瀏覽器定位是如何實現的?為什么會有瀏覽器定位失敗的情況?


高德地圖開放平台JavaScript API提供的Geolocation定位插件,融合了HTML5 Geolocation定位接口、精確IP定位服務,以及安卓定位sdk定位。其中與安卓定位sdk的結合使用適用於開發安卓系統的H5應用,需同時使用安卓定位sdk和JavaScript API。

 

PART1. Geolocation.getCurrentPosition獲取精確位置的流程是什么樣的?

在PC端,因為原生接口成功率很低,JavaScript API會優先調用精確IP定位服務,在IP定位失敗的時候,嘗試使用瀏覽器原生定位接口進行定位,如果原生定位接口也定位失敗,則返回error事件或回調error信息。定位成功之后我們會對瀏覽器定位的經緯度結果進行向高德坐標的轉化,並對所有有效定位結果融合地址信息后返回complete事件或者回調complete信息。

在移動端,如果開發者開啟了sdk輔助定位,那么安卓手機上我們會優先嘗試調用sdk的定位接口,失敗之后優先調用瀏覽器原生定位接口進行定位,瀏覽器定位失敗之后嘗試進行精確IP定位,如果以上三種定位全部嘗試失敗則返回error事件或回調error信息,否則和PC端的一樣,定位成功之后進行高德坐標轉化和地址融合。

我們在定位的回調或者事件響應中返回了message字段,message字段明確指出了每一步的成敗和失敗原因。

 

PART2. getCurrentPosition定位失敗的原因有哪些?

1.IP精確定位失敗,message包含‘Get ipLocation failed.’信息,精確IP定位服務無法完全覆蓋所有IP和用戶,故而失敗;

2.sdk定位失敗,請檢查sdk的key是否設置好,以及webview的定位權限及應用和系統的定位權限是否開啟。

3.瀏覽器定位失敗,有多種情況:

  1. 第一種情況,瀏覽器不支持原生定位接口,如IE較低版本的瀏覽器等,message字段包含‘Browser not Support html5 geolocation.’信息;
  2. 第二種情況,用戶禁用了定位權限,需要用戶開啟定位權限,message字段包含‘Geolocation permission denied.’
  3. 第三種情況,瀏覽器禁止了非安全域的定位請求,比如Chrome、IOS10已陸續禁止,這時候需要升級站點到HTTPS,message字段也是包含‘Geolocation permission denied.’信息。注意Chrome不會禁止localhost等域名HTTP協議下的定位;
  4. 第四種情況,瀏覽器定位超時,包括原生的超時,可以適當增加超時屬性的設定值以減少這一現象,另外還有個別瀏覽器本身的定位接口就是黑洞,完全沒有回應,也會超時返回失敗,message字段包含‘Get geolocation time out.’信息;
  5. 第五種情況,確實定位失敗,Chrome、火狐以及部分套殼瀏覽器接入的定位服務在國外,有較大限制,失敗率高;

注釋:如果定位到城市即可滿足需求,建議大家改用Geolocation.getCityInfo方法,可以根據IP返回用戶所在城市的基本信息,包括省、市名稱、adcode、citycode、城市中心點,城市矩形邊界等信息。


PART3. getCurrentPosition定位代碼怎么寫?

var  geolocation = new AMap.Geolocation();
        map.addControl(geolocation);
        //geolocation.getCurrentPosition(); //精准定位
        geolocation.getCityInfo();  //定位到城市
    });

 


免責聲明!

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



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