微信小程式結合騰訊地圖實現使用者商家距離計算

@寶兒姐發表於2020-09-29

前言

小程式實操,距離計算總結。

思路

一共有兩種方法,各有利弊:

1.利用小程式的wx.getLocation 方法得到使用者的經緯度,然後用已知的商家的經緯進行計算;

2.利用騰訊地圖位置服務calculateDistance直接計算;

先熟悉下兩個單詞:

longitude:經度;

latitude:緯度;

下邊是兩種方法的具體實現

一、獲取使用者的位置資訊,再進行計算(wx.getLocation)

1.小程式提供了獲取使用者位置資訊的api,所以我們能直接獲取到經緯度;

2.在騰訊位置服務座標拾取器,獲取商家的具體經緯度(例:北京故宮博物院116.397027(經度),39.917990(緯度));

3.利用公式進行兩點的經緯度計算,需注意:小程式預設座標系是wgs84,您需設定為gcj02再試;

程式碼:

Page({
 data:{
    },
 onLoad: function() {
        var _this = this;
        _this.findXy() //查詢使用者與商家的距離
        },
        
   findXy() { //獲取使用者的經緯度
        var _this = this
        wx.getLocation({
            type: 'gcj02',
            success(res) {
                _this.getDistance(res.latitude, res.longitude, 39.917990,116.397027)
            }
        })
    },
    
     Rad: function(d) { //根據經緯度判斷距離
        return d * Math.PI / 180.0;
    },
    getDistance: function(lat1, lng1, lat2, lng2) {
        // lat1使用者的緯度
        // lng1使用者的經度
        // lat2商家的緯度
        // lng2商家的經度
        var radLat1 = this.Rad(lat1);
        var radLat2 = this.Rad(lat2);
        var a = radLat1 - radLat2;
        var b = this.Rad(lng1) - this.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;
        s = Math.round(s * 10000) / 10000;
        s = s.toFixed(2) + '公里' //保留兩位小數
        console.log('經緯度計算的距離:' + s)
        return s
    }
    )}

二、利用騰訊地圖的位置服務

1、先到騰訊位置服務註冊登入,申請key、引入依賴。
下圖的第三步配置是要在小程式的後臺那裡設定,記得不要找錯地方了。如圖:

2、配置完成了之後,小程式重新編譯一下

3、求兩點距離文件:騰訊位置-兩點求距

4、讀完可知,我們只需要商家的經緯度即可,我們在小程式裡實驗一下

// 引入SDK核心類
var QQMapWX = require('../../utils/qqmap-wx-jssdk.js');

Page({
 onLoad: function() {
        var _this = this;
        _this.findShop() //查詢使用者與商家的距離
        },
 findShop() { //拿到商家的地理位置,用到了騰訊地圖的api
        // 例項化API核心類
        var _that = this
        var demo = new QQMapWX({
            key: '你申請到的key' // 必填
        });
        // 呼叫介面
        demo.calculateDistance({
            to: [{

                latitude: 39.917990, //商家的緯度
                longitude: 116.397027, //商家的經度
            }],
            success: function(res) {
                let hw = res.result.elements[0].distance //拿到距離(米)
                if (hw && hw !== -1) { //拿到正確的值
                    //轉換成公里
                    hw = (hw / 2 / 500).toFixed(2) + '公里'
                } else {
                    hw = "距離太近或請重新整理重試"
                }
          
                console.log('騰訊地圖計算距離商家' + hw);
            }
        });
    }
})

可能會出現的錯誤:
{status:199,message:‘此key未開啟webservice功能’}

此時需要開啟騰訊位置服務-key配置,設定一下剛才申請key的詳情頁面,把下列選項全部勾上,把你小程式的appid也寫上,webservice域名白名單設定為空即可。

儲存完,重新編譯再試

作者:大師兄

連結:https://segmentfault.com/a/1190000017401316

來源:SegmentFault

著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。

相關文章