摘要:前言最近在幫朋友商家寫(xiě)小程序,所以看了不少關(guān)于小程序的知識(shí),總結(jié)一下計(jì)算距離這條線。
前言
最近在幫朋友(商家)寫(xiě)小程序,所以看了不少關(guān)于小程序的知識(shí),總結(jié)一下計(jì)算距離這條線。
思路一共有兩種方法,各有利弊:
1.利用小程序的wx.getLocation 方法得到用戶的經(jīng)緯度,然后用已知的商家的經(jīng)緯進(jìn)行計(jì)算;
2.利用騰訊地圖位置服務(wù)calculateDistance直接計(jì)算
先熟悉下兩個(gè)單詞:
**longitude:經(jīng)度;
latitude:緯度;**
下邊是兩種方法的具體實(shí)現(xiàn)
1.小程序提供了獲取用戶位置信息的api,所以我們能直接獲取到經(jīng)緯度;
2.在百度拾取坐標(biāo)系統(tǒng),獲取商家的具體經(jīng)緯度(例:北京故宮116.403414(經(jīng)度),39.924091(緯度)。)
3.利用公式進(jìn)行兩點(diǎn)的經(jīng)緯度計(jì)算
代碼:
Page({ data:{ }, onLoad: function() { var _this = this; _this.findXy() //查詢用戶與商家的距離 }, findXy() { //獲取用戶的經(jīng)緯度 var _this = this wx.getLocation({ type: "wgs84", success(res) { _this.getDistance(res.latitude, res.longitude, 39.924091,116.403414) } }) }, 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.這里配置的地方就比較多一點(diǎn)了,先到騰訊位置服務(wù)注冊(cè)登錄,申請(qǐng)key、引入依賴。
下圖的第三步配置是要在小程序的后臺(tái)那里設(shè)置,記得不要找錯(cuò)地方了。如圖:
2.配置完成了之后,小程序重新編譯一下
3.我們看下騰訊的api,是怎么求兩點(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.924091, //商家的緯度 longitude: 116.403414, //商家的經(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未開(kāi)啟webservice功能"},
不要緊,打開(kāi)騰訊位置-key配置,設(shè)置一下剛才申請(qǐng)key的詳情頁(yè)面,把下列選項(xiàng)全部勾上,把你小程序的appid也寫(xiě)上。
保存完,重新編譯再試
優(yōu)點(diǎn):
第一種方法,不用配置任何東西,只需兩點(diǎn)的經(jīng)緯度即可,沒(méi)有使用次數(shù)限制;
第二種方法,不需要自己計(jì)算,騰訊會(huì)計(jì)算好,距離比較精確,只需要只要商家的經(jīng)緯度即可
缺點(diǎn):
第一種方法,計(jì)算精度上可能有待考量,在我的實(shí)驗(yàn)下,感覺(jué)是在上帝視角,直接計(jì)算兩個(gè)點(diǎn)的距離,不過(guò)好像兩點(diǎn)距離不太遠(yuǎn),問(wèn)題不大;
下圖是我用兩種方法計(jì)算的杭州-石家莊的距離,方法一顯然比騰訊的少一點(diǎn)距離,騰訊可能參考了一些實(shí)際的路程、路況之類的吧,感覺(jué)跟從地圖上查行程規(guī)劃出來(lái)的距離差不多。
第二種方法,有使用次數(shù)上的限制,每天只能用1萬(wàn)次,當(dāng)然可以再去買配額
既然騰訊的api有使用次數(shù)限制,那我們就寫(xiě)個(gè)方法,先用騰訊的,加上判斷,用完了再用 經(jīng)緯度計(jì)算的。當(dāng)然,有錢的大佬可以另外買騰訊的配額。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/100110.html
摘要:根據(jù)最新稅改后計(jì)算個(gè)人所得稅的計(jì)算器。在開(kāi)發(fā)微信小程序組件框架時(shí),我遇到了一個(gè)問(wèn)題,微信小程序中的組件有特定的,背景可以用去掉,但是邊框再用去掉就不可以了,這也是微信小程序與的不同之處。但是在微信小程序中使用選擇器就可以實(shí)現(xiàn)這一功能。 根據(jù)最新稅改后計(jì)算個(gè)人所得稅的計(jì)算器。 如有其它疑惑,也歡迎提出任何修改意見(jiàn)。可以在主題下留言或者在小程序中點(diǎn)擊聯(lián)系在線客服或者加入qq群:869113...
摘要:功能三滴滴費(fèi)用計(jì)算古人云細(xì)節(jié)決定成敗,一個(gè)良好的微信小程序往往就是一些細(xì)節(jié)打動(dòng)人心,居然是模仿,雖做不到百分百,至少還是很希望一模一樣。 最近時(shí)常感嘆道:時(shí)間總是那么的快,轉(zhuǎn)瞬即逝。對(duì)于像我這種剛?cè)腴T(mén)的小生來(lái)講,技術(shù)每天都在更新,框架也層出不窮,有時(shí)候還沒(méi)弄懂這個(gè)知識(shí)大牛們又推出了更好的技術(shù)。當(dāng)然學(xué)習(xí)好的技術(shù)也是十分重要的。但是在學(xué)習(xí)之后怎樣才能夠得到自己想要的呢,一個(gè)好的建議便是靜...
摘要:零售商家通過(guò)微信支付小程序?qū)崿F(xiàn)線上線下消費(fèi)一體化,通過(guò)線上支付線下單品完成商品數(shù)據(jù)的打通。因此小程序搭載智慧零售,能助力商家實(shí)現(xiàn)消費(fèi)場(chǎng)景數(shù)字化以及購(gòu)買行為具象化,從新的維度提高用戶服務(wù)水平。 隨著移動(dòng)互聯(lián)網(wǎng)、大數(shù)據(jù)、AI等技術(shù)日益成熟,實(shí)體行業(yè)領(lǐng)域的轉(zhuǎn)型成為業(yè)績(jī)提升的關(guān)鍵。對(duì)于零售行業(yè)從業(yè)者,這意味著思維方式的自我進(jìn)化,對(duì)于消費(fèi)者,則意味著與產(chǎn)品產(chǎn)生新的連接,享受更加個(gè)性化、更具人情味...
摘要:零售商家通過(guò)微信支付小程序?qū)崿F(xiàn)線上線下消費(fèi)一體化,通過(guò)線上支付線下單品完成商品數(shù)據(jù)的打通。因此小程序搭載智慧零售,能助力商家實(shí)現(xiàn)消費(fèi)場(chǎng)景數(shù)字化以及購(gòu)買行為具象化,從新的維度提高用戶服務(wù)水平。 隨著移動(dòng)互聯(lián)網(wǎng)、大數(shù)據(jù)、AI等技術(shù)日益成熟,實(shí)體行業(yè)領(lǐng)域的轉(zhuǎn)型成為業(yè)績(jī)提升的關(guān)鍵。對(duì)于零售行業(yè)從業(yè)者,這意味著思維方式的自我進(jìn)化,對(duì)于消費(fèi)者,則意味著與產(chǎn)品產(chǎn)生新的連接,享受更加個(gè)性化、更具人情味...
摘要:零售商家通過(guò)微信支付小程序?qū)崿F(xiàn)線上線下消費(fèi)一體化,通過(guò)線上支付線下單品完成商品數(shù)據(jù)的打通。因此小程序搭載智慧零售,能助力商家實(shí)現(xiàn)消費(fèi)場(chǎng)景數(shù)字化以及購(gòu)買行為具象化,從新的維度提高用戶服務(wù)水平。 隨著移動(dòng)互聯(lián)網(wǎng)、大數(shù)據(jù)、AI等技術(shù)日益成熟,實(shí)體行業(yè)領(lǐng)域的轉(zhuǎn)型成為業(yè)績(jī)提升的關(guān)鍵。對(duì)于零售行業(yè)從業(yè)者,這意味著思維方式的自我進(jìn)化,對(duì)于消費(fèi)者,則意味著與產(chǎn)品產(chǎn)生新的連接,享受更加個(gè)性化、更具人情味...
閱讀 1015·2021-09-26 09:55
閱讀 3556·2021-09-24 10:30
閱讀 1364·2021-09-08 09:36
閱讀 2552·2021-09-07 09:58
閱讀 603·2019-08-30 15:56
閱讀 764·2019-08-29 18:32
閱讀 3593·2019-08-29 15:13
閱讀 1840·2019-08-29 13:49