1.問題
項目中需要進行測距,當前位置到指定位置的直線距離,目的坐標使用為百度坐標,而我們在微信里獲取的當前坐標為wgs-48國際坐標這里需要對其進行轉換
2.轉化微信坐標到百度坐標
在這里百度為我們提供了轉換工具,只要按照轉換文檔進行轉換即可,大家可以到這個網址上看看http://lbsyun.baidu.com/index.php?title=webapi/guide/changeposition應該就知道如何進行轉換了,當然這里我們會用到百度的jssdk
關於jssdk我們只需要引入相應的src路徑即可
<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=你的ak"></script>
這里大家只需要改成你自己的ak就行了,關於這個秘鑰怎么獲取在上面的網址鏈接中百度會告訴如何取申請自己的ak
<script src="http://api.map.baidu.com/library/GeoUtils/1.2/src/GeoUtils_min.js" type="text/javascript"></script>
這里使我們下面要進行測距需要使用到的工具類
因為jssdk后我們就可以轉換了,這里直接上代碼
function getBaiduPosition(lng,lat) { var url ="http://api.map.baidu.com/geoconv/v1/?coords="+lng+","+lat+"&from=1&to=5&ak="+config.ak; $.ajax({ url: url, type: 'GET', contentType: "application/json", dataType: 'jsonp',//這里要用jsonp的方式不然會報錯 success: function(data) { config.lng = data.result[0].x;//經度 config.lat = data.result[0].y;//緯度 } }); }
這段代碼就是將其他坐標轉換為百度坐標,至於里面的from和to參數大家還是參考上面的網址中知道去填寫。
其中這里的lng是經度,lat是緯度,這里使用的是jsonp因為出現了跨域問題所以只能通過這種方式解決,幸好百度支持^_^,這里我是將獲取到轉換的經緯度坐標保存到了配置文件里方便后面使用。
3.進行測距
因為目的坐標是我們可以從服務器端獲取的,這里我們也獲取到了當前位置的坐標,這樣我們就可以測距了,這里直接上代碼:
function getDistance(lng,lat){ //測距需要的兩點 var point1 = new BMap.Point(lng,lat); var point2 = new BMap.Point(config.lng,config.lat); //進行測距 var distance = BMapLib.GeoUtils.getDistance(point1, point2); return distance; // $.alert(distance); }
上面的這段代碼就是進行測距的,主要使用到了工具類里面的東西,這個工具類百度是公開的源碼的哦,大家有興趣可以了解下 http://api.map.baidu.com/library/GeoUtils/1.2/docs/symbols/BMapLib.GeoUtils.html
好了經過上面的兩段代碼就實現了微信公眾號獲取到的當前位置轉換成百度坐標,並進行測距。
這里需要大家注意的是兩個js的引入以及轉換坐標時的url的使用
