【问题标题】:Calculating great-circle distance matrix计算大圆距离矩阵
【发布时间】:2014-05-12 17:16:37
【问题描述】:

dist(coords) 提供使用欧几里得距离的距离矩阵;它还提供了其他几个选项。但它不提供任何选项,例如半正弦公式。

distHaversine() 为给定的两组纬度/经度坐标计算我想要的距离(大圆)。我想知道是否有一个现有的包/函数可以使用 hasrsine 公式计算大圆距离矩阵。

【问题讨论】:

  • 你试过library("sos"); findFn("{great circle} distance")(和变体)吗?
  • 您需要半正弦公式还是只需要基于矩阵的距离?

标签: r matrix great-circle


【解决方案1】:

您可能已经注意到,distHaversine() 将计算单个点与两列坐标矩阵之间的距离。

要计算两个坐标矩阵之间的所有成对距离,只需使用apply()逐行遍历其中一个矩阵,计算其每个点到所有点的距离在另一个。

library(geosphere)

## Example coordinates (here stored in two column matrices)
cc1 <- rbind(c(0,0),c(1,1))
cc2 <- rbind(c(90,0),c(90,90), c(45,45))

## Compute matrix of distances between points in two sets of coordinates
apply(cc1, 1, FUN=function(X) distHaversine(X, cc2))
#          [,1]    [,2]
# [1,] 10018754 9907452
# [2,] 10018754 9907435
# [3,]  6679169 6524042

有趣的注释:快速浏览一下sp::spDists()(它确实计算两个矩阵之间的成对距离)揭示了它使用基本相同的apply() ——基于策略。除了一些额外的错误检查和参数传递之外,主要区别在于它在我们应用distHaversine() 的地方应用了函数spDistsN1()

【讨论】:

  • 完美! spDists(data, longlat=TRUE) 正是我要找的。谢谢!
  • 太棒了。只是为了记录,spDists()' 似乎并没有立即使用Haversine 公式进行其“大圆距离(WGS84 椭圆体)”距离计算。不过,您会知道这对您的应用程序是否重要。
猜你喜欢
  • 2018-08-05
  • 1970-01-01
  • 2018-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-03
相关资源
最近更新 更多