计算地图两点间距离
- 前端
- 三生万物
- 0
方式一
// 计算距离
function calcDistance(coord, coord2) {
let lon1 = coord[0],
lat1 = coord[1],
lon2 = coord2[0],
lat2 = coord2[1];
let La1 = (lat1 * Math.PI) / 180.0;
let La2 = (lat2 * Math.PI) / 180.0;
let La3 = La1 - La2;
let Lb3 = (lon1 * Math.PI) / 180.0 - (lon2 * Math.PI) / 180.0;
let s =
2 *
Math.asin(
Math.sqrt(
Math.pow(Math.sin(La3 / 2), 2) +
Math.cos(La1) * Math.cos(La2) * Math.pow(Math.sin(Lb3 / 2), 2)
)
);
s = s * 6378.137; // 地球半径
s = Math.round(s * 10000) / 10000;
return s;
}
调用
calcDistance([117.272597, 31.86047], [118.78871, 32.028276]); // 144.4262km
方式二
不是特别准,对比方式一有点差别
function getRad(d){
var PI = Math.PI;
return d*PI/180.0;
}
/**
* 获取两个经纬度之间的距离
* @param lat1 第一点的纬度
* @param lng1 第一点的经度
* @param lat2 第二点的纬度
* @param lng2 第二点的经度
* @returns {Number}
*/
function getDistance(lat1,lng1,lat2,lng2){
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;//The Radius of eath in meter.
var fl = 1/298.257;
sg = sg*sg;
sl = sl*sl;
sf = sf*sf;
s = sg*(1-sl) + (1-sf)*sl;
if(s === 0) return 0;
c = (1-sg)*(1-sl) + sf*sl;
if(c === 0) return 0;
w = Math.atan(Math.sqrt(s/c));
if(w === 0) return 0;
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(2);//指定小数点后的位数。
return +s;
}
调用
getDistance(25.102648 102.93465 25.102648 102.93465)
免责申明:本站发布的内容(图片、视频和文字)以转载和分享为主,文章观点不代表本站立场,如涉及侵权请联系站长邮箱:xbc-online@qq.com进行反馈,一经查实,将立刻删除涉嫌侵权内容。