// 角度转弧度
function _angle2rad(d) {
return d * Math.PI / 180.0;
}
function gpsDistance(p1, p2) {
var lat1 = _angle2rad(p1[1]);
var lat2 = _angle2rad(p2[1]);
var a = lat1 - lat2;
var b = _angle2rad(p1[0]) - _angle2rad(p2[0]);
var distance = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2)
+ Math.cos(lat1) * Math.cos(lat2) * Math.pow(Math.sin(b / 2), 2)));
return distance * 6378137;
}
上述代码以球状模型计算地球上两点之间的直线距离。
以计算成都北站到成都东站的直线距离为例:
成都北站经纬度:104.074047,30.695510
成都东站经纬度:104.139949,30.629326
经纬度拾取来源:https://lbs.qq.com/tool/getpoint/get-point.html
gpsDistance([104.074047,30.695510], [104.139949,30.629326]);
// 输出:9700.684129156278
计算结果为9700米,跟百度地图测距工具测量结果吻合: