我正在使用 geosphere package 中的 distVincentyEllipsoid()函数来计算世界端口之间的距离。此功能将两个地方的经度和纬度作为输入,并以米为单位给出输出距离。它似乎运作良好,但在某些情况下,它一直给我NAs没有明显的原因。我想知道是否有人知道一个错误(我没有找到解决这个问题的在线文档),或者可能指出我做错了什么。奇怪的是它似乎只影响特定的对 - 例如。 f(a,b)和f(b,a)将给出NA,但f(a,c)和f(b,c)不会。
EG。 Whangarei,新西兰(Lon:174.35 Lat:-35.76)到直布罗陀,直布罗陀(Lon:-5.35 Lat:36.13):
distVincentyEllipsoid(C(174.35,-35.76),C(-5.35,36.13))
> NA
...但:
Valetta,Malta(Lon:14.51 Lat:35.89)到Gibraltar,Gibraltar(Lon:-5.35 Lat:36.13):
distVincentyEllipsoid(C(14.51,35.89),C(-5.35,36.13))
> 1787499
...和
新西兰旺格雷(Lon:174.35 Lat:-35.76)到马耳他瓦莱塔(Lon:14.51 Lat:35.89):
distVincentyEllipsoid(C(174.35,-35.76),C(14.51,35.89))
> 18207301
(根据谷歌地图,这两个输出都是正确的 - 请注意这些值以米为单位。)
非常感谢任何帮助。
编辑:问题解决了 - 文森特的距离法因近对映点而失败。
答案 0 :(得分:4)
使用distGeo而不是distVincentyEllipsoid。这被添加到 版本1.5中的geosphere,它使用a计算测地距离 better algorithm(由我!)而不是文森特的。这返回准确 所有点对的结果。特别是新西兰旺格雷(Lon:174.35 Lat:-35.76)直布罗陀,直布罗陀(Lon:-5.35 Lat:36.13)
> distGeo(c(174.35,-35.76),c(-5.35,36.13))
[1] 19958627
此demonstration page显示 Google地图中显示的近对映测地线的示例。