带有 distHaversine 的 distm() 是否给出了不准确的结果?
Is distm() with distHaversine giving inaccurate results?
我对从 geosphere::distm()
得到的这个结果感到困惑。我计算从起点到两点 a
和 b
的距离。在 Google 地图上,我可以看到从 start
到 a
的距离大于从 start
到 b
的距离。但是 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
我对从 geosphere::distm()
得到的这个结果感到困惑。我计算从起点到两点 a
和 b
的距离。在 Google 地图上,我可以看到从 start
到 a
的距离大于从 start
到 b
的距离。但是 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