1. 程式人生 > >map-utils計算座標距離

map-utils計算座標距離

const PI = 3.14159265358979324; // 圓周率
const R = 6367000; //6378.137; // 地球半徑

// 計算弧度
function rad(d) {
    return d * PI / 180.0;
}

/**
 * 計算座標距離,單位米
 * @param {Object} coordsA 座標A
 * @param {Object} coordsB 座標B
 * @return {Number} s 兩點間距離
 */
export function getDistance(coordsA, coordsB) {
    var radLngA = rad(coordsA.lng);
    var radLatA = rad(coordsA.lat);
    var radLngB = rad(coordsB.lng);
    var radLatB = rad(coordsB.lat);

    var a = radLatA - radLatB; // 緯度弧度差
    var b = radLngA - radLngB; // 精度弧度差

    var s = 2 * Math.asin(
            Math.sqrt(
                Math.pow(Math.sin(a / 2), 2) +
                Math.cos(radLatA) * Math.cos(radLatB) * Math.pow(Math.sin(b / 2), 2)
            )
        );

    s = s * R;
    s = Math.round(s * 10000) / 10000;

    return s;
}