前言
小程序?qū)嵅伲嚯x計(jì)算總結(jié)复斥。
思路
一共有兩種方法营密,各有利弊:
1.利用小程序的wx.getLocation 方法得到用戶的經(jīng)緯度,然后用已知的商家的經(jīng)緯進(jìn)行計(jì)算;
2.利用騰訊地圖位置服務(wù)calculateDistance直接計(jì)算;
先熟悉下兩個(gè)單詞:
longitude:經(jīng)度;
latitude:緯度;
下邊是兩種方法的具體實(shí)現(xiàn)
一目锭、獲取用戶的位置信息,再進(jìn)行計(jì)算(wx.getLocation)
1.小程序提供了獲取用戶位置信息的api评汰,所以我們能直接獲取到經(jīng)緯度;
2.在騰訊位置服務(wù)坐標(biāo)拾取器,獲取商家的具體經(jīng)緯度(例:北京故宮博物院116.397027(經(jīng)度),39.917990(緯度))痢虹;
3.利用公式進(jìn)行兩點(diǎn)的經(jīng)緯度計(jì)算被去,需注意:小程序默認(rèn)坐標(biāo)系是wgs84,您需設(shè)置為gcj02再試奖唯;
代碼:
Page({
data:{
},
onLoad: function() {
var _this = this;
_this.findXy() //查詢用戶與商家的距離
},
findXy() { //獲取用戶的經(jīng)緯度
var _this = this
wx.getLocation({
type: 'gcj02',
success(res) {
_this.getDistance(res.latitude, res.longitude, 39.917990,116.397027)
}
})
},
Rad: function(d) { //根據(jù)經(jīng)緯度判斷距離
return d * Math.PI / 180.0;
},
getDistance: function(lat1, lng1, lat2, lng2) {
// lat1用戶的緯度
// lng1用戶的經(jīng)度
// lat2商家的緯度
// lng2商家的經(jīng)度
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) + '公里' //保留兩位小數(shù)
console.log('經(jīng)緯度計(jì)算的距離:' + s)
return s
}
)}
二惨缆、利用騰訊地圖的位置服務(wù)
1、先到騰訊位置服務(wù)注冊(cè)登錄丰捷,申請(qǐng)key坯墨、引入依賴。
下圖的第三步配置是要在小程序的后臺(tái)那里設(shè)置病往,記得不要找錯(cuò)地方了捣染。如圖:
2、配置完成了之后停巷,小程序重新編譯一下
3耍攘、求兩點(diǎn)距離文檔:騰訊位置-兩點(diǎn)求距
4、讀完可知,我們只需要商家的經(jīng)緯度即可,我們?cè)谛〕绦蚶飳?shí)驗(yàn)一下
// 引入SDK核心類
var QQMapWX = require('../../utils/qqmap-wx-jssdk.js');
Page({
onLoad: function() {
var _this = this;
_this.findShop() //查詢用戶與商家的距離
},
findShop() { //拿到商家的地理位置畔勤,用到了騰訊地圖的api
// 實(shí)例化API核心類
var _that = this
var demo = new QQMapWX({
key: '你申請(qǐng)到的key' // 必填
});
// 調(diào)用接口
demo.calculateDistance({
to: [{
latitude: 39.917990, //商家的緯度
longitude: 116.397027, //商家的經(jīng)度
}],
success: function(res) {
let hw = res.result.elements[0].distance //拿到距離(米)
if (hw && hw !== -1) { //拿到正確的值
//轉(zhuǎn)換成公里
hw = (hw / 2 / 500).toFixed(2) + '公里'
} else {
hw = "距離太近或請(qǐng)刷新重試"
}
console.log('騰訊地圖計(jì)算距離商家' + hw);
}
});
}
})
可能會(huì)出現(xiàn)的錯(cuò)誤:
{status:199,message:'此key未開啟webservice功能'}
此時(shí)需要打開騰訊位置服務(wù)-key配置,設(shè)置一下剛才申請(qǐng)key的詳情頁面蕾各,把下列選項(xiàng)全部勾上,把你小程序的appid也寫上,webservice域名白名單設(shè)置為空即可庆揪。
保存完式曲,重新編譯再試
作者:大師兄
鏈接:https://segmentfault.com/a/1190000017401316
來源:SegmentFault
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán)缸榛,非商業(yè)轉(zhuǎn)載請(qǐng)注明出處检访。