微信小程序計(jì)算兩坐標(biāo)距離

對(duì)于iOS或者安卓同學(xué)來說,可能會(huì)覺得特別簡(jiǎn)單吧。OC里就有原生類CLLocation計(jì)算坐標(biāo)點(diǎn)距離。當(dāng)然,大多數(shù)時(shí)候我們都是直接使用第三方計(jì)算,比如百度SDK。

但是接觸到微信小程序后,由于可能剛起步,許多API并不完善。像百度SDK關(guān)于微信小程序的就沒有提供這樣的接口去計(jì)算。百度地圖微信小程序JS API

仔細(xì)翻一番看看,在開發(fā)指南->獲取地圖數(shù)據(jù) 菜單下只看到4個(gè)最基本的功能(POI檢索、POI檢索熱詞聯(lián)想、逆地址解析、天氣查詢),并沒有看到關(guān)于計(jì)算距離的??吹竭@些還好,至少不會(huì)繼續(xù)下去入坑了。

后來我就度娘了,第一條檢索就是騰訊地圖開放平臺(tái)的內(nèi)容。這也是為什么今天我要寫這篇文章的原因,我入坑了。友情提示,使用騰訊地圖確實(shí)可以計(jì)算兩坐標(biāo)距離,但是呢?只能是10km以內(nèi)的距離。不然調(diào)用后返回結(jié)果:status: 373, message: "起終點(diǎn)距離超長"

如果不在意只是10km以內(nèi)距離的話,想要去集成騰訊地圖SDK,文檔在此?騰訊地圖微信小程序JavaScript SDK

最終解決方案只能自己算了,不用第三方了。

//計(jì)算兩坐標(biāo)點(diǎn)之間的距離

? 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;

? ? return (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)))).toFixed(0)

? },

需要注意的是,該方法返回單位為米,如果想要轉(zhuǎn)換成公里,除以1000即可。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容