带有 distHaversine 的 distm() 是否给出了不准确的结果?

Is distm() with distHaversine giving inaccurate results?

我对从 geosphere::distm() 得到的这个结果感到困惑。我计算从起点到两点 ab 的距离。在 Google 地图上,我可以看到从 starta 的距离大于从 startb 的距离。但是 distm() 函数看起来正好相反。

library(geosphere)
start <- c(42.23025, -83.71448)
a <- c(42.30022, -83.71255)
b <- c(42.24302, -83.75135)

# distm() says start is closer to a:

distm(start, a, fun = distHaversine)
#>         [,1]
#> [1,] 879.541
distm(start, b, fun = distHaversine)
#>          [,1]
#> [1,] 4107.282

但是 NOAA 的距离计算器显示到 a 的距离约为 4 英里,而 b 的距离约为 2 英里。当我对毕达哥拉斯定理进行简单应用时,我得到的 a 的比率几乎是远的两倍:

sqrt((start[1] - a[1])^2 + (start[2] - a[2])^2)
#> [1] 0.06999661
sqrt((start[1] - b[1])^2 + (start[2] - b[2])^2)
#> [1] 0.03901884

如何解释 distm() 的结果?我的点靠得很近,不到五英里,这会有所贡献吗?

这看起来像是交换纬度和经度的情况。 (我每次都这样做。)虽然传达坐标的传统方式是 Lat,Long,但 distm 正在寻找 Long,Lat(即与 XY 相关)。我们可以使用 rev 交换顺序来反转坐标向量的顺序。

distHaversine(rev(start), rev(a))
[1] 7790.647 # 4.8 miles

distHaversine(rev(start), rev(b))
[1] 3354.825 # 2 miles