JS實現根據兩點經緯度位置獲取距離

根據兩點經緯度獲取距離

最近公司開發的一個平臺,其中包含配送業務功能, 超出N距離提示不給予配送。

desc

  • 需要有目的地經緯度

  • 獲取當前位置的經緯度

    這裏商家經緯度由後臺返回, 所以需獲取到當前的位置經緯度

效果圖

在這裏插入圖片描述

js方法

方法一:

function rad(d) {
    return d * Math.PI / 180.0;
}


// 根據經緯度計算距離,參數分別爲第一點的緯度,經度;第二點的緯度,經度
function getDistances(lat1, lng1, lat2, lng2) {

    var radLat1 = rad(lat1);
    var radLat2 = rad(lat2);
    var a = radLat1 - radLat2;
    var b = rad(lng1) - rad(lng2);
    var s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) +
        Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2)));
    s = s * 6378.137; // EARTH_RADIUS;
    // 輸出爲公里
    s = Math.round(s * 10000) / 10000;

    var distance = s;
    var distance_str = "";

    if (parseInt(distance) >= 1) {
        // distance_str = distance.toFixed(1) + "km";
        distance_str = distance.toFixed(2) + "km";
    } else {
        // distance_str = distance * 1000 + "m";
        distance_str = (distance * 1000).toFixed(2) + "m";
    }

    //s=s.toFixed(4);

    // console.info('lyj 距離是', s);
    // console.info('lyj 距離是', distance_str);
    // return s;
    
    //小小修改,這裏返回對象
    let objData = {
        distance: distance,
        distance_str: distance_str
    }
    return objData
}

方法二:

function getDistance(lat1, lng1, lat2, lng2) {
    lat1 = lat1 || 0;
    lng1 = lng1 || 0;
    lat2 = lat2 || 0;
    lng2 = lng2 || 0;

    var rad1 = lat1 * Math.PI / 180.0;
    var rad2 = lat2 * Math.PI / 180.0;
    var a = rad1 - rad2;
    var b = lng1 * Math.PI / 180.0 - lng2 * Math.PI / 180.0;
    var r = 6378137;
    var 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)));

    return distance;
}

使用

/**
* 計算兩個點經緯度距離
*/
getDestinationAddress: function() {
    //獲取當前經緯度
    let getLocalLng = wx.getStorageSync('lngAndLat');
    //這裏商家經緯度是後臺返回的
    let getDistance = util.getDistances(getLocalLng.lat, getLocalLng.lng, this.data.bizLat, this.data.bizLng);
    this.setData({
        distance: getDistance.distance_str
    })
    //判斷超過5公里時不可配送
    if (this.data.currentChooseType == 1 && parseInt(getDistance.distance) >= 5) {
        this.setData({
            isOutDistance: false
        })
    }
},

感謝參考文章

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章