使用R计算两点(纬度,长度)之间的地理空间距离的函数

Ste*_*eO7 48 packages r distance geospatial latitude-longitude

我有long,lat格式的地理编码点,我想用R计算它们之间的距离.这看起来非常简单,但我找不到一个能够轻松完成的功能.我一直试图用gdistance包来做,但它似乎非常复杂并且面向图形,我只需要一个数字.这样的东西distanceBetween(pointA,pointB)会返回一个数字.

更新:这个问题特定于R,可能的dup更一般.虽然有一个R特定的答案,但它被埋没在其他28个答案中.

Per*_*reG 70

加载geosphere包,您可以使用许多不同的功能

library(geosphere)
distm(c(lon1, lat1), c(lon2, lat2), fun = distHaversine)
Run Code Online (Sandbox Code Playgroud)

也:

distHaversine()
distMeeus()
distRhumb()
distVincentyEllipsoid()
distVincentySphere()
Run Code Online (Sandbox Code Playgroud)

...

  • "distm"返回的距离默认为米.`distm`的文档没有提到默认返回距离的单位,但在`distHaversine`文档中提到了这一点. (11认同)
  • 小记.geosphere方法:distm没有矢量化.要向量化它,请使用*apply*函数. (6认同)
  • @DotPi它在`distm`的文档(版本`1.5-5`)中说前两个参数可以是`Nx2`矩阵(即点的集合),所以我认为不需要`apply`这里? (2认同)
  • @oens 那是为了通过组合不同的点来获得距离矩阵,而不仅仅是点之间的 Nx1 距离列表 (2认同)

Agu*_*aco 15

在上面的回答中同意@PereG,但认为纬度和经度的顺序是相反的:lon,lat.这将影响距离矩阵的结果.所以正确的是:

library(geosphere)
distm (c(lon1, lat1), c(lon2, lat2), fun = distHaversine)
Run Code Online (Sandbox Code Playgroud)

资料来源:ftp://cran.r-project.org/pub/R/web/packages/geosphere/geosphere.pdf