图集1/1

正文 2287字数 48,056阅读


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 }
Run code
Cut to clipboard

    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; }
    Run code
    Cut to clipboard

      /** * 计算两个点经纬度距离 */ 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 }) } },
      Run code
      Cut to clipboard