【发布时间】:2020-11-27 11:55:41
【问题描述】:
我有两个数据框,其中的观测值是由纬度/经度组合定义的地理位置。对于df1 中的每个点,我想获取df2 中的最近点以及相关值。我知道如何通过计算所有可能的距离(例如使用 Imap 包中的 gdist 函数)并获取最小距离的索引来做到这一点。但事实是,df1 有 1000 行,df2 大约有 1500 万行,它充其量是过长的。
您知道如何在不计算所有距离的情况下达到目标吗?也许有办法限制必要的计算(例如使用纬度/经度值的差异)?
感谢您的帮助,
值
这是df1的样子:
Latitude Longitude
1 56.76342 8.320824
2 54.93165 9.115982
3 55.80685 9.102455
4 57.27000 9.760000
5 56.76342 8.320824
6 56.89333 9.684435
7 56.62804 8.571573
8 56.64850 8.501947
9 55.40596 8.884374
10 54.89786 11.880828
然后df2:
Latitude Longitude Value
1 41.91000 -4.780000 40500
2 41.61063 14.750832 13500
3 41.91000 -4.780000 4500
4 38.70000 -2.350000 28500
5 52.55172 0.088622 1500
6 39.06000 -1.830000 51000
7 41.91000 -4.780000 49500
8 48.00623 -4.389639 12000
9 56.24889 -3.666940 27000
10 42.72000 -3.750000 49500
【问题讨论】:
-
简单的方法:使用支持 GIS 的数据库(例如 postgreSQL 的 postGIS 插件)。您也可以使用 GIS 软件(您的任务是 GIS 中最常见的任务之一,除了可视化)。否则你“索引”数据:你建立扇区,你只检查同一扇区中的数据,或者 ev。您搜索附近的部门,并只在那里进行搜索。 [EV。更多层次]。当然有更好的算法。我总是预处理数据
-
这可能会让你朝着正确的方向前进:stackoverflow.com/questions/57525670/…
-
另一个取决于您的应用程序和所需精度的选项是将纬度和经度从 5 位精度向下舍入到 2 或 3 位,然后将匹配的起点组合在一起。
-
谢谢!我设法通过使用
raster包来做到这一点。我得到了每个数据库中每个点对应的区域,然后计算了每个特定点与df1和df2中与同一区域相关联的点之间的距离。