對(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即可。