使用经纬度计算城市距离时结果与谷歌地图差异过大的问题咨询
问题原因
你的计算偏差来自两个核心错误:
- 经度符号错误
通用经纬度数值规范为:东经为正、西经为负,北纬为正、南纬为负。你代码中两个城市都位于北美西半球,经度应该为负值,你填的正数相当于把地点定位到了中国境内的对应经纬度位置,自然偏差极大。 - 城市经纬度匹配错误
你代码里第二个城市的经纬度对应的是俄克拉荷马州的斯蒂尔沃特,本身和明尼苏达州的圣保罗直线距离就有一千多公里。你要找的是明尼苏达州紧邻圣保罗的斯蒂尔沃特,正确经纬度为北纬45.0559、西经92.8108。
修正后代码
let cities = [ { city: "St Paul", lat: 44.9537, lon: -93.09 }, { city: "Stillwater, MN", lat: 45.0559, lon: -92.8108 }, ]; function distance(lat1, lon1, lat2, lon2) { var p = 0.017453292519943295; var c = Math.cos; var a = 0.5 - c((lat2 - lat1) * p) / 2 + (c(lat1 * p) * c(lat2 * p) * (1 - c((lon2 - lon1) * p))) / 2; return 12742 * Math.asin(Math.sqrt(a)); } let d = distance(cities[0].lat, cities[0].lon, cities[1].lat, cities[1].lon); document.write(d.toFixed(1) + " km");
运行后输出结果约为30.4km,和谷歌地图显示的33km通行距离吻合,差值符合直线距离与实际道路距离的正常误差范围。
内容的提问来源于stack exchange,提问作者Asher
相关产品推荐
相关产品推荐

