/* 计算经纬度之间的距离公式 */
function getRad(d) {
var PI = Math.PI;
return d * PI / 180.0;
}
/**
* 获取两个经纬度之间的距离:A[lng1,lat1],B[lng2,lat2]
* @param lng1 A点的经度
* @param lat1 A点的纬度
* @param lng2 B点的经度
* @param lat2 B点的纬度
* @returns {Number}
*/
function getDistance(lng1, lat1, lng2, lat2) {
var f = getRad((lat1 + lat2) / 2);
var g = getRad((lat1 - lat2) / 2);
var l = getRad((lng1 - lng2) / 2);
var sg = Math.sin(g);
var sl = Math.sin(l);
var sf = Math.sin(f);
var s, c, w, r, d, h1, h2;
var a = 6378137.0; // 地球半径
var fl = 1 / 298.257;
sg = sg * sg;
sl = sl * sl;
sf = sf * sf;
s = sg * (1 - sl) + (1 - sf) * sl;
c = (1 - sg) * (1 - sl) + sf * sl;
w = Math.atan(Math.sqrt(s / c));
r = Math.sqrt(s * c) / w;
d = 2 * w * a;
h1 = (3 * r - 1) / 2 / c;
h2 = (3 * r + 1) / 2 / s;
s = d * (1 + fl * (h1 * sf * (1 - sg) - h2 * (1 - sf) * sg));
s = s / 1000;
s = s.toFixed(18); //指定小数点后的位数。
return s;
}
-
方法二
var factors = {
miles: 3960,
nauticalmiles: 3441.145,
degrees: 57.2957795,
radians: 1,
inches: 250905600,
yards: 6969600,
meters: 6373000,
metres: 6373000,
kilometers: 6373,
kilometres: 6373
};
function PointToDistance(A, B, units) {
// A {array} form第一个点经纬度
// B {array} to第二个点经纬度
var R = Math.PI / 180;
var dLat = R * (B[1] - A[1]);
var dLon = R * (B[0] - A[0]);
var lat1 = R * A[1];
var lat2 = R * B[1];
var a = Math.pow(Math.sin(dLat / 2), 2) + Math.pow(Math.sin(dLon / 2), 2) * Math.cos(lat1) * Math.cos(lat2);
var s = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
var factor = factors[units || 'kilometers'];
if(factor === undefined) {
throw new Error('Invalid unit');
}
return s * factor;
}