微信小程序——計算2點之間的距離


關於計算2點之間的距離都依賴了騰訊地圖,所以請先在騰訊地圖官網申請key。具體流程看下圖:

 

下面具體講計算2點之間距離的方法。

方法一:

1.通過 wx.getLocation(Object object)  獲取用戶當前的經度,緯度:

getPosition: function () {
    var that = this;
    wx.getLocation({
      success: function (res) {
        that.setData({
          fromLng: res.longitude,
          fromLat: res.latitude
        })
      }
    })
  },

 

2.通過 騰訊地圖 逆解析 你的目的地地址,獲取經度,緯度:

wx.request({
  url: 'https://apis.map.qq.com/ws/geocoder/v1/',
  data: {
    "key": "你的騰訊地圖 key",
    "address": "目的地"
  },
  method: 'GET',
  success: function (res) {
    if (res.data.result) {
      const addressLocation = res.data.result.location;
      const courseLat = addressLocation.lat;//獲取目的地的緯度
      const courseLng = addressLocation.lng;//獲取目的地的經度
    } 
    that.setData({
      toLat: courseLat,
      toLng:courseLng 
    })
  }
}) 

 

3.定義 計算距離的 方法:

getDistance: function(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;
}

 

4.調用該方法:

getDistance(fromLng,fromLat,toLat,toLng)

 

我需要同時計算多條數據的距離,我發現在遍歷返回目的地經緯度的時候,它返回來的結果並不是按照你列表的順序返回來的,而且有些地址還解析不出來。

不知道是我的寫法有問題,還是接口調用的問題。如果哪位大神看到網上有這種示例,麻煩提供一下鏈接給我,借鑒學習一下~后面我采取的是下面這種方法:

 

方法二:通過騰訊地圖的距離計算接口

1.跟方法一第1步一樣,獲取用戶的接口權限;

 

2.把 qqmap-wx-jssdk.min.js 加到你小程序;

 

3.在需要計算距離的js頁面引用 qmap-wx-jssdk.min.js ,並實例化該對象:

const QQMapWX = require('../../lib/js/qqmap-wx-jssdk.min.js');
var qqmapsdk;

onLoad: function (options) {
    // 實例化API核心類
    qqmapsdk = new QQMapWX({
      key: 'VBXBZ-YVGRW-2Z4RK-O6H27-WEXUT-3ZB2M'
    });
  },

 

4.先逆解析目的地,再調用計算距離的接口

wx.request({
  url: 'https://apis.map.qq.com/ws/geocoder/v1/',
  data: {
    "key": "你的key",
    "address": "目的地名稱"
  },
  method: 'GET',
  success: function (res) {
    if (res.data.result) {
      const addressLocation = res.data.result.location;
      const courseLat = addressLocation.lat;
      const courseLng = addressLocation.lng;
      let destinationDistance;
      qqmapsdk.calculateDistance({
        to: [{
          latitude: courseLat,
          longitude: courseLng
        }],
        success: function (res) {
          destinationDistance = res.result.elements[0].distance;
          let distanceKm = `${(destinationDistance/1000).toFixed(2)}Km`;//轉換成km
          that.setData({
            distance: distanceKm  
          })
        },
        fail: function (res) {
          console.log(res);
        }
      });
    }
  }
})

 

注意騰訊地圖的請求限制:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM