【问题标题】:distVincentyEllipsoid() yielding NA values (geosphere package)distVincentyEllipsoid() 产生 NA 值(geosphere 包)
【发布时间】: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)对我很有用。

标签: r geosphere


【解决方案1】:

使用 distGeo 代替 distVincentyEllipsoid。这被添加到 geosphere 在 1.5 版中,它使用 a 计算测地线距离 better algorithm(我!)比文森蒂的。这返回准确 所有点对的结果。特别是新西兰旺格雷(经度:174.35 纬度:-35.76)至直布罗陀直布罗陀(经度:-5.35经纬度:36.13)

> distGeo(c(174.35,-35.76),c(-5.35,36.13))
[1] 19958627

这个demonstration page 显示 Google 地图中显示的近对跖测地线示例。

【讨论】:

    猜你喜欢
    • 2016-10-17
    • 1970-01-01
    • 2018-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-19
    • 1970-01-01
    • 2020-08-18
    相关资源
    最近更新 更多