JS实现根据两点经纬度位置获取距离
根据两点经纬度获取距离最近公司开发的一个平台,其中包含配送业务功能, 超出N距离提示不给予配送。效果图js方法方法一:function rad(d) {return d * Math.PI / 180.0;}// 根据经纬度计算距离,参数分别为第一点的纬度,经度;第二点的纬度,经度function getDistances(lat1, lng1, lat2, l...
·
根据两点经纬度获取距离
最近公司开发的一个平台,其中包含配送业务功能, 超出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('距离是', s);
// console.info('距离是', 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
})
}
},
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献5条内容
所有评论(0)