【发布时间】:2017-04-05 22:25:56
【问题描述】:
我正在使用 geosphere 包 中的函数 distVincentyEllipsoid() 来计算世界港口之间的距离。此函数将两个地方的经度和纬度作为输入,并以米为单位给出距离作为输出。它似乎总体上运行良好,但在某些情况下,它一直在无缘无故地给我 NA。我想知道是否有人知道错误(没有在线文档我可以找到解决此问题的文档),或者可能会指出我做错了什么。奇怪的是,它似乎只影响特定的配对——例如。 f(a,b) 和 f(b,a) 会给出 NA,但 f(a,c) 和 f(b,c) 不会。
例如。 新西兰旺加雷 (Lon:174.35 Lat:-35.76) 到直布罗陀直布罗陀 (Lon: -5.35 Lat:36.13):
distVincentyEllipsoid(c(174.35,-35.76),c(-5.35,36.13))
> NA
...但是:
马耳他瓦莱塔(经度:14.51 纬度:35.89)至直布罗陀直布罗陀(经度:-5.35 纬度:36.13):
distVincentyEllipsoid(c(14.51,35.89),c(-5.35,36.13))
> 1787499
...和:
新西兰旺格雷(经度:174.35 纬度:-35.76)至马耳他瓦莱塔(经度:14.51 纬度:35.89):
distVincentyEllipsoid(c(174.35,-35.76),c(14.51,35.89))
> 18207301
(根据谷歌地图,这两个输出都是正确的 - 请注意这些值以米为单位。)
任何帮助将不胜感激。
编辑:问题已解决——Vincenty 的距离方法对近对映点失败。
【问题讨论】:
-
大多数人称之为很少使用的函数的令人费解的行为可能更好地指向包维护者:尝试:
maintainer("geosphere") -
特别奇怪,因为
distHaversine(c(174.35,-35.76),c(-5.35,36.13))产生了答案。 -
好点@42,我会联系的。
-
经过更多研究,Vincenty 的方法似乎在(近)对点点上会失败,this website 表明它可能会在大于 19,936 公里的距离上失败。在您的示例中这很有意义,因为 Haversine 距离是 19,988 公里
-
不用担心;了解我正在整理的
spatial.data.table包(尤其是 calculations)对我很有用。