关于计算两点经纬度之间距离的疑问?

A点:22.788423,113.70234
B点: 22.788445,113.701404

网上开源的两点计算:

            getDistance(latFrom, lngFrom, latTo, lngTo) {
                var rad = function(d) { //计算角度
                    return d * Math.PI / 180.0;
                }
                var EARTH_RADIUS = 6378136.49;
                var radLatFrom = rad(latFrom);
                var radLatTo = rad(latTo);
                var a = radLatFrom - radLatTo;
                var b = rad(lngFrom) - rad(lngTo);
                var distance = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(radLatFrom) * Math.cos(
                    radLatTo) * Math.pow(Math.sin(b / 2), 2)));
                distance = distance * EARTH_RADIUS;
                distance = Math.round(distance * 10000) / 10000;
                return parseFloat(distance.toFixed(0));
            },

与 一个工具网站计算对比 ,上述代码和这网站计算相差几米。

但是交给 高德计算 相差几百米?

为什么呢?

如果交给前端计算和判断定位范围,误差很大

各位前辈,请问有什么解决差值这么大的方案吗?

阅读 3.8k
1 个回答

首先明白一点,任何经纬度转换空间距离都是有误差的,因为他们都是把空间近似于椭圆去求距离,但实际上空间并不是椭圆的,所以这个真实误差我们是必须要接受的。

但是同样是误差,不同坐标系下产生的误差也是不一样的,这就好比使用不同长宽的椭圆去贴地球,然后计算两点距离,得到的结果能相等吗?

国际上最常使用的坐标系是WGS84,它的长半轴参数 radius = 6378137 m,精度1-2m,这个精度改动一点,测出来的距离可能误差就会很大。

因为国家保密需要,国内高德、百度、腾讯等地图的地理坐标系统均经过WGS84坐标加密,与真实的WGS84坐标是有误差的,这个误差值并不固定,通常是几十米到几百米。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题