工作中偶尔会碰到,后端返回一个目标位置的经纬度(吐槽:怎么不直接返回一个距离回来,还要让前端来算,【差评、嫌弃】),然后让你计算用户当前位置与目标位置的距离。
话不多说,直接上代码:
/**
* 根据经纬度获取两点之间的距离
* @param {Object} location1 = { latitude, longitude } 位置1的经纬度
* @param {Object} location2 = { latitude, longitude } 位置2的经纬度
*/
export const getDistance = (location1, location2) => {
let lat1 = location1.latitude || 0;
let lng1 = location1.longitude || 0;
let lat2 = location2.latitude || 0;
let lng2 = location2.longitude || 0;
let rad1 = lat1 * Math.PI / 180.0;
let rad2 = lat2 * Math.PI / 180.0;
let a = rad1 - rad2;
let b = lng1 * Math.PI / 180.0 - lng2 * Math.PI / 180.0;
let r = 6378137;
let distance = r * 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(rad1) * Math.cos(rad2) * Math.pow(Math
.sin(b / 2), 2)));
// 返回 m(米)
return Number(distance)
.toFixed(2);
}