文章目錄
- 行動裝置持續擷取地理位置方法: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的監控事件。