在程序中计算需要转化为弧度(*π/180) 地球半径为R=6378.137 km
主要用到的计算方法:
d=R∗arcos[cos(y1)∗cos(y2)∗cos(x1−x2)+sin(y1)∗sin(y2)]
(lng1, lat1, lng2, lat2) (经度1, 纬度1, 经度2, 纬度2)
#### 方法一:
function GetDistance1( lng1, lat1, lng2, lat2){
// 角度转弧度
let a = Math.PI / 180;
let t1 = Math.sin(lat1 * a) * Math.sin(lat2 * a);
let t2 = Math.cos(lat1 * a) * Math.cos(lat2 * a);
let t3 = Math.cos(lng1 * a - lng2 * a);
let t4 = t2 * t3;
let t5 = t1 + t4;
let s = Math.atan(-t5/Math.sqrt(-t5 * t5 +1)) + 2 * Math.atan(1);
s = s *6378.137 ;// EARTH_RADIUS;
s = Math.round(s * 10000) / 10000;
return s;
}
#### 方法二:
function GetDistance2( lng1, lat1, lng2, lat2){
let radLat1 = lat1*Math.PI / 180.0;
let radLat2 = lat2*Math.PI / 180.0;
let a = radLat1 - radLat2;
let b = lng1*Math.PI / 180.0 - lng2*Math.PI / 180.0;
let s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a/2),2) + Math.cos(radLat1)*Math.cos(radLat2)*Math.pow(Math.sin(b/2),2)));
s = s *6378.137 ;// EARTH_RADIUS;
s = Math.round(s * 10000) / 10000;
return s;
}
#### 方法三:
function GetDistance3( lng1, lat1, lng2, lat2){
let a = Math.PI / 180;
let s = Math.acos(Math.cos(lat1 * a) * Math.cos(lat2 * a) * Math.cos(lng1 * a - lng2 * a) + Math.sin(lat1 * a) * Math.sin(lat2 * a))
s = s *6378.137 // EARTH_RADIUS;
s = Math.round(s * 10000) / 10000;
return s;
}