【问题标题】:Function to calculate geospatial distance between two points (lat,long) using R [duplicate]使用R计算两点(纬度,经度)之间地理空间距离的函数
【发布时间】:2015-11-28 14:26:38
【问题描述】:

我有经纬度格式的地理编码点,我想使用 R 计算它们之间的距离。这看起来很简单,但我找不到一个可以轻松完成的函数。我一直在尝试用 gdistance 包来做这件事,但它看起来非常复杂并且面向图形,我只需要一个数字。类似distanceBetween(pointA,pointB) 的东西会返回一个数字。

【问题讨论】:

标签: r package geospatial distance latitude-longitude


【解决方案1】:

加载geosphere包你可以使用很多不同的功能

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

还有:

distHaversine()
distMeeus()
distRhumb()
distVincentyEllipsoid()
distVincentySphere()

...

【讨论】:

  • 这些看起来也很有用!阅读他们的描述,他们使用的计算方式略有不同。我在树林里找不到森林!
  • 一个小笔记。方法 geosphere:distm 未矢量化。要对其进行矢量化,请使用 apply 函数。
  • @DotPi 它在distm 的文档(版本1.5-5)中说,前两个参数可以是Nx2 矩阵(即点的集合),所以我看不到需要apply吗?
  • @oens 那是为了从组合不同的点中获取距离矩阵,而不仅仅是点之间距离的 Nx1 列表
  • distm 返回的距离默认为米。 distm 的文档没有提到默认返回距离的单位,但 distHaversine 文档中提到了这一点。
【解决方案2】:

同意@PereG 对上述答案的看法,但认为纬度和经度的顺序是相反的:lon,lat。这将影响距离矩阵的结果。所以正确的是:

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

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

【讨论】:

  • 输出的单位是什么?米或公里或其他东西。如果有别的,我怎么能把它转换成米?
  • 是的,正如手册中所说,默认为米。
猜你喜欢
  • 2012-10-13
  • 2011-04-11
  • 2012-01-26
  • 1970-01-01
  • 1970-01-01
  • 2012-11-22
  • 2018-06-11
  • 2016-01-11
  • 1970-01-01
相关资源
最近更新 更多