根據兩點經緯度獲取距離
最近公司開發的一個平臺,其中包含配送業務功能, 超出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
})
}
},