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

使用经纬度计算城市距离时结果与谷歌地图差异过大的问题咨询

问题原因

你的计算偏差来自两个核心错误:

  1. 经度符号错误
    通用经纬度数值规范为:东经为正、西经为负,北纬为正、南纬为负。你代码中两个城市都位于北美西半球,经度应该为负值,你填的正数相当于把地点定位到了中国境内的对应经纬度位置,自然偏差极大。
  2. 城市经纬度匹配错误
    你代码里第二个城市的经纬度对应的是俄克拉荷马州的斯蒂尔沃特,本身和明尼苏达州的圣保罗直线距离就有一千多公里。你要找的是明尼苏达州紧邻圣保罗的斯蒂尔沃特,正确经纬度为北纬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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 09:09:00