使用R编写计算两个点(经度,纬度)之间地理距离的函数

80

我已经将点用经纬度格式进行了地理编码,并且想要使用 R 计算它们之间的距离。这似乎很简单,但我找不到一个能够轻松完成此任务的函数。我一直在尝试使用 gdistance 包来完成,但它似乎非常混乱并且面向绘图,而我只需要一个数字。类似于 distanceBetween(pointA,pointB) 这样返回一个数字的函数。


8
请参阅sp包中的spDistsN1()函数。 - user3710546
谢谢 Pascal,这个方法可行! - SteveO7
你看到Jaap在https://dev59.com/BHVD5IYBdhLWcg3wTJrF#23095329的回答了吗? - Andy Clifton
2个回答

109

通过加载 geosphere 包,您可以使用许多不同的函数。

library(geosphere)
distm(c(lon1, lat1), c(lon2, lat2), fun = distHaversine)

此外:

distHaversine()
distMeeus()
distRhumb()
distVincentyEllipsoid()
distVincentySphere()
抱歉,我只能回答英文问题。

这些都看起来也很有用!阅读它们的描述,它们使用略微不同的计算方式。我找不到树林中的森林了! - SteveO7
8
小提示:方法geosphere:distm不支持向量化。要进行向量化,请使用apply函数。 - DotPi
2
@DotPi 在 distm 的文档(版本 1.5-5)中写道,前两个参数可以是 Nx2 矩阵(即点的集合),所以我不明白这里为什么需要使用 apply - oens
2
@oens 这是为了从组合不同点得到距离矩阵,而不仅仅是点之间的距离列表。 - Hack-R
20
distm 默认返回的距离单位为米。distm 的文档未提及默认情况下距离以哪种单位返回,但是 distHaversine 的文档中有提到。 - Mikko
显示剩余4条评论

24

输出的单位是什么?米还是千米或其他单位?如果是其他单位,我该如何将其转换为米? - DSaad
1
是的,正如手册所述,默认单位是米。 - Agustín Indaco

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