關於百度地圖js api的getCurrentPosition定位不准確的解決方法


很久之前幫大叔解決了一個gps坐標轉換為百度地圖坐標的問題。今天大叔又給我講百度地圖定位不准。我查了一下api,用了官方給出的這樣一組函數。

 1 //創建查詢對象
 2 var geolocation = new BMap.Geolocation();
 3 
 4 //調用getCurrentPosition函數
 5 geolocation.getCurrentPosition(function (position) {
 6 
 7     //如果查詢成功
 8     if (this.getStatu() == 'BMAP_STATU_SUCCESS') {
 9 
10         //根據point對象創建標記遮擋物,並添加到地圖中
11         var marker = new BMap.Marker(position.point);
12         map.addOverlay(marker);
13 
14         //將地圖中心設置為獲得的當前位置
15         map.panTo(position.point)
16     }
17 })

 

我自己試的完全不行,和實際地址偏差很大,偏差有幾公里,這肯定是不行的。所以我在網上查資料知道了百度地圖的定位都是有偏移量的。

當然我最終的解決方案並非通過這個api然后去掉偏移量,我是用另一種方法。

也就是用html5自帶的定位。之前我給大叔解決的問題就是把gps坐標轉換為百度地圖坐標,所以我就想html5的定位獲取的是不是gps坐標。

事實證明這是可以的。

 

也就是說,不使用百度自身提供的api,而使用html5的api,並把得到的結果去用百度的轉換坐標的api去轉換一下。這話說着聽繞口的。

1、調用navigator.geolocation.getCurrentPosition(callback); 函數

2、注冊回調函數,在回調函數中調用百度的坐標轉換的api,這個api大叔知道,我沒有細查,只知道能通過url去請求並注冊一個回調,但是BMap提供了一個這樣的函數,我這里先假設是convgps(x,y,from,to,callback);

     這幾個參數是什么意思呢

     x:經度

     y:緯度

     from:要轉換的坐標類型,百度官網有1為國際gps坐標,2為國際gps米度坐標,這個可以去官網看,取值范圍是1-7

     to:要轉換成的坐標類型,只能是5或者6,5為百度地圖坐標,6為百度地圖米度坐標(別問我什么是米度坐標,我不知道...)

     callback:回調

     當然這里只是假設是這樣的。

3、在convgps的回調中注冊,使用轉換好的經緯度創建一個marker並將地圖中心放在這個經緯度上,也就是和前面代碼一樣的 

 

 

 注意,以下代碼請勿直接使用,只是提供一個思路的代碼,因為我沒有去查那個函數的名字。

 1 navigator.geolocation.getCurrentPosition(function (position) {
 2 
 3     //得到html5定位結果
 4     var x = position.coords.longitude;
 5     var y = position.coords.latitude;
 6 
 7     //由於html5定位的結果是國際標准gps,所以from=1,to=5
 8     //下面的代碼並非實際是這樣,這里只是提供一個思路
 9     BMap.convgps(x, y, 1, 5, function (convRst) {
10         var point = new BMap.Point(convRst.x, convRst.y);
11 
12         //這個部分和上面的代碼是一樣的
13         var marker = new BMap.Marker(point);
14         map.addOverlay(marker);
15         map.panTo(point);
16     })
17 
18 })

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM