關於計算2點之間的距離都依賴了騰訊地圖,因此請先在騰訊地圖官網申請key。具體流程看下圖:html
下面具體講計算2點之間距離的方法。git
1.經過 wx.getLocation(Object object) 獲取用戶當前的經度,緯度:
小程序
getPosition: function () { var that = this; wx.getLocation({ success: function (res) { that.setData({ fromLng: res.longitude, fromLat: res.latitude }) } }) },
2.經過 騰訊地圖 逆解析 你的目的地地址,獲取經度,緯度:api
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.調用該方法:ui
getDistance(fromLng,fromLat,toLat,toLng)
我須要同時計算多條數據的距離,我發如今遍歷返回目的地經緯度的時候,它返回來的結果並非按照你列表的順序返回來的,並且有些地址還解析不出來。this
不知道是個人寫法有問題,仍是接口調用的問題。若是哪位大神看到網上有這種示例,麻煩提供一下連接給我,借鑑學習一下~後面我採起的是下面這種方法:url
1.跟方法一第1步同樣,獲取用戶的接口權限;spa
2.把 qqmap-wx-jssdk.min.js 加到你小程序;code
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); } }); } } })
注意騰訊地圖的請求限制: