You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

geosphere::distm()搭配distHaversine计算距离结果不准是什么原因?

问题原因

geosphere包的所有距离计算函数,都要求输入坐标的格式为**c(经度, 纬度)**,你当前传入的坐标顺序是c(纬度, 经度),顺序完全颠倒,才会得到和谷歌地图、NOAA计算器不符的结果,和点位间距不足5英里没有关系。

你之前用勾股定理计算的相对比例符合预期,是因为所有坐标都统一用了反序的数值,差值的相对大小不会变化;但球面距离计算中,经度和纬度对应的地表单位长度并不相同:同度数的纬度差对应的地表距离固定约为111km,而同度数的经度差对应的地表距离会随纬度升高缩短,在你所在的北纬42度区域,1度经度对应的地表距离仅约82km。经纬度顺序传反后,两类长度系数被用反,自然会算出完全错误的结果。

修正代码

将所有坐标的两个数值调换位置即可得到正确结果:

library(geosphere)
# 调整为 经度在前,纬度在后的标准输入格式
start <- c(-83.71448, 42.23025)
a <- c(-83.71255, 42.30022)
b <- c(-83.75135, 42.24302)

# 计算起点到a的距离,单位为米
distm(start, a, fun = distHaversine)
#>         [,1]
#> [1,] 7790.75
# 换算后约4.84英里,和NOAA结果一致

# 计算起点到b的距离,单位为米
distm(start, b, fun = distHaversine)
#>         [,1]
#> [1,] 3388.96
# 换算后约2.11英里,和实际相对大小匹配

内容的提问来源于stack exchange,提问作者Sam Firke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 23:06:01