基于坐标如何查找最近的地点

3

我有一个主数据库,其中包含多个气象站。每个气象站都有以十进制度数表示的坐标。以下只是一个示例,因为坐标是虚构的。

stationid lon lat
1a        80  104
1b        84  110
1c        85  111

除此之外,我还有一个更小的地点数据集。我需要将每个地点与主数据库中最接近的气象站匹配(最好有指定距离阈值)。

  place lon   lat 
  2a    80.5  104.1
  3b    83    109

因此,所得到的较小数据库将显示

  place lon   lat    stationid
  2a    80.5  104.1  1a
  3b    83    109    1b

我会很感激任何关于IT技术方面的想法。

1个回答

3

试试使用 geosphere::distmmax.col

df2$stationid <- df1$stationid[max.col(-distm(rev(df2[-1]), rev(df1[-1])))]

这提供了

  place  lat   lon stationid
1    2a 80.5 104.1        1a
2    3b 83.0 109.0        1b

刚刚修复了。我猜是经纬度顺序的问题。现在出现了“错误:无法分配大小为73.0 Gb的向量”的提示。 - Andres Mora
@AndresMora 如果你不想出现内存空间错误,可以尝试使用for循环来查找最近的点。虽然速度会比较慢,但是比较安全。 - ThomasIsCoding
1
也许:对于每个点,在R中计算到第二个数据集中最近点的距离。在该帖中,OP似乎有相同的问题:“我可以通过使用gDistance计算所有成对距离并取最小值(就像这里的答案一样)来执行天真的实现,但我有一些巨大的数据集,并且正在寻找更高效的方法”。 - Henrik
@Henrik 很好的建议。非常感谢! - ThomasIsCoding
1
@ThomasIsCoding 不客气!但最终似乎“错误:无法分配向量”对OP来说并不是问题;) 干杯 - Henrik
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接