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));
},
与 一个工具网站计算对比 ,上述代码和这网站计算相差几米。
但是交给 高德计算 相差几百米?
为什么呢?
如果交给前端计算和判断定位范围,误差很大
各位前辈,请问有什么解决差值这么大的方案吗?
首先明白一点,任何经纬度转换空间距离都是有误差的,因为他们都是把空间近似于椭圆去求距离,但实际上空间并不是椭圆的,所以这个真实误差我们是必须要接受的。
但是同样是误差,不同坐标系下产生的误差也是不一样的,这就好比使用不同长宽的椭圆去贴地球,然后计算两点距离,得到的结果能相等吗?
国际上最常使用的坐标系是WGS84,它的长半轴参数 radius = 6378137 m,精度1-2m,这个精度改动一点,测出来的距离可能误差就会很大。
因为国家保密需要,国内高德、百度、腾讯等地图的地理坐标系统均经过WGS84坐标加密,与真实的WGS84坐标是有误差的,这个误差值并不固定,通常是几十米到几百米。