基於geolocation來擷取經緯度地址

來源:互聯網
上載者:User
文章目錄
  • 行動裝置持續擷取地理位置方法:navigator.geolocation.watchPosition

  以前如果要擷取互連網使用者所在地都是根據使用者的IP地址來擷取地理位置,這樣擷取到的資料和真實資料有很大的偏差。為了擷取更加精確的位置,可以使用了html5的geolocation來擷取經緯度,然後再擷取所在地理位置,如何擷取,我在下面會說到。先說下基本概念。

  Geolocation在的navigator 對象中,我們可以通過 navigator.geolocation 來使用它。不支援 geolocation 的瀏覽器並不包含這一對象,那麼可以通過下面的代碼來做能力檢測,對不同的瀏覽器做不同的處理。在訪問 geolocation 對象時,即調用 geolocation 下面的方法時,瀏覽器會彈出提示,詢問使用者是否許可網站提供的位置服務,只有在得到使用者許可過後,服務才會繼續,否則將被停止。 

  常用的navigator.geolocation對象有以下三種方法:

  擷取當前地理位置:navigator.geolocation.getCurrentPosition(success_callback_function, error_callback_function, position_options)

  持續擷取地理位置:navigator.geolocation.watchPosition(success_callback_function, error_callback_function, position_options)

  清除持續擷取地理位置事件:navigator.geolocation.clearWatch(watch_position_id)  

  參數position_options是配置項,由JSON格式傳入:

  enableHighAccuracy:true/false,它將告訴瀏覽器是否啟用高精度裝置,所謂的高精度裝置包含但不局限於前面所提到的 GPS 和 WIFI,值為 true 的時候,瀏覽器會嘗試啟用這些裝置,預設指為 true,在這種情況下,瀏覽器會儘可能地進行更為精確的查詢,簡單地說,如果使用者有可用的 GPS 裝置,會返回 GPS 裝置的查詢結果,IP 是最後的選擇,對於行動裝置來說,網路存取點(基站)或許成為另一個選擇,對此我還沒有完全瞭解,但根據測試,即時沒有任何額外功能的手機,也能夠得到更為精確的查詢結果。

  maximumAge:單位毫秒,告訴裝置緩衝時間,主要用於裝置的省電或者節省頻寬方面。

  timeout:單位毫秒,逾時事件,擷取位置資訊時超出設定的這個時間長度,將會觸發錯誤,捕獲錯誤的函數將被調用,並且錯誤碼指向TIMEOUT。

var position_option = {                enableHighAccuracy: true,                maximumAge: 30000,                timeout: 20000            };navigator.geolocation.getCurrentPosition(getPositionSuccess, getPositionError, position_option);
function getPositionSuccess( position ){        var lat = position.coords.latitude;        var lng = position.coords.longitude;        alert( "您所在的位置: 緯度" + lat + ",經度" + lng );        if(typeof position.address !== "undefined"){                var country = position.address.country;                var province = position.address.region;                var city = position.address.city;                alert(' 您位於 ' + country + province + '省' + city +'市');        }}

coords其他返回資訊:

coords.accuracy:返回經緯度的精度(米)

coords.speed :速度

coords.altitude :當前的高度,海拔(米)

coords.altitudeAccuracy:高度的精度(米)

coords.heading:朝向

function getPositionError(error) {    switch (error.code) {        case error.TIMEOUT:            alert("連線逾時,請重試");            break;        case error.PERMISSION_DENIED:            alert("您拒絕了使用位置共用服務,查詢已取消");            break;        case error.POSITION_UNAVAILABLE:            alert("擷取位置資訊失敗");            break;    }}

在擷取城市資訊的時候只有firefox會提供城市地址。chrom不會給出。當然sogou地圖提供了擷取位置資訊的api。

連結地址:http://map.sogou.com/api/documentation/javascript/api2.5/interface_regeocode.html  

行動裝置持續擷取地理位置方法:navigator.geolocation.watchPosition

對於使用行動裝置的使用者來說,位置並不是固定的,W3C 當然也考慮到了這一點,watchPosition 是一個專門用來處理這一情況的方法,watchPosition 被調用後,瀏覽器會跟蹤裝置的位置,每一次位置的變化,watchPosition 中的代碼都將會被執行。對於致力於行動裝置 web 開發的同學來說,這個方法是及其重要的,它也許將會改變 web 移動用戶端的格局。
使用navigator.geolocation.clearWatch既可以清除navigator.geolocation.watchPosition的監控事件。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.