html5的自動定位

近期在作項目的時候用到 經緯度的定位html

    /*默認獲取附近的經緯度*/    git

if (navigator.geolocation){api

var ershouPosition = function(position){瀏覽器

var lat_lon ={"latitude":position.coords.latitude,"longitude":position.coords.longitude};緩存

if (lat_lon) {異步

lat = position.coords.latitude || "",函數

lon=position.coords.longitude || "";spa

}firefox

dealPostion(lat,lon);code

}

if (navigator.geolocation){

navigator.geolocation.getCurrentPosition(ershouPosition);

}

}else{

alert("您的瀏覽器不支持GPS定位服務");

return;

}


getCurrentPosition 屬於異步方法 會有必定的延遲 致使了 方法體後面的方法始終獲取不到經緯度,這個是須要注意的,getCurrentPosition 




JS新API標準 地理定位(navigator.geolocation)

在新的API標準中,能夠經過navigator.geolocation來獲取設備的當前位置,返回一個位置對象,用戶能夠從這個對象中獲得一些經緯度的相關信息。

navigator.geolocation的三個方法:

1. getCurrentPosition()

2. watchPosition()

3. clearWatch()

getCurrentPosition()

使用方法:navigator.geolocation.getCurrentPosition(successCallback, [errorCallback] , [positionOptions]);

A) successCallback 獲取定位成功時執行的回調函數 eg: function(position){alert("緯度:"+position.coords.latitude+";經度:"+position.coords.longitude)};

successCallback返回一個地理數據對象position做爲參數,該對象有屬性timestamp和coords。timestamp表示該地理數據建立時間(時間戳);coords包括另外七個屬性:

  1. coords.latitude:估計緯度
  2. coords.longitude:估計經度
  3. coords.altitude:估計高度
  4. coords.accuracy:所提供的以米爲單位的經度和緯度估計的精確度
  5. coords.altitudeAccuracy:所提供的以米爲單位的高度估計的精確度
  6. coords.heading: 宿主設備當前移動的角度方向,相對於正北方向順時針計算
  7. coords.speed:以米每秒爲單位的設備的當前對地速度

PS:firefox下還有address屬性,能夠獲取詳細地址,不過我獲得的地址是錯誤的,使用方法:position.address.city,具體以下:

address屬性

B) errorCallback 定位失敗時執行的回調函數 eg: function(error){alert(error.message);}

errorCallback返回一個錯誤數據對象error做爲參數,該對象有屬性:

  1.code :表示失敗緣由,返回1 or 2 or 3 ,具體爲

    PERMISSION_DENIED (數值爲1) 表示沒有權限使用地理定位API

    POSITION_UNAVAILABLE (數值爲2) 表示沒法肯定設備的位置,例如一個或多個的用於定位採集程序報告了一個內部錯誤致使了所有過程的失敗

    TIMEOUT (數值爲3) 表示超時

    詳情查看 http://dev.w3.org/geo/api/spec-source.html#permission_denied_error

  2.message :錯誤提示內容 

C) positionOptions 用來設置positionOptions來更精細的執行定位,positionOptions擁有三個屬性{enableHighAccuracy:boolean , timeout:long , maximumAge:long}。

enableHighAccuracy 【true or false(默認)】是否返回更詳細更準確的結構,默認爲false不啓用,選擇true則啓用,可是會致使較長的響應時間及增長功耗,這種狀況更多的用在移動設備上。

timeout 設備位置獲取操做的超時時間設定(不包括獲取用戶權限時間),單位爲毫秒,若是在設定的timeout時間內未能獲取位置定位,則會執行errorCallback()返回code(3)。若是未設定timeout,那麼timeout默認爲無窮大,若是timeout爲負數,則默認timeout爲0。

maximumAge 設定位置緩存時間,以毫秒爲單位,若是不設置該值,該值默認爲0,若是設定負數,則默認爲0。該值爲0時,位置定位時會從新獲取一個新的位置對象;該值大於0時,即從上一次獲取位置時開始,緩存位置對象,若是再次獲取位置時間不超過maximumAge,則返回緩存中的位置,若是超出maximumAge,則從新獲取一個新的位置。

watchPosition()

功能getCurrentPosition()類似,watchPosition()是按期輪詢設備的位置,一樣擁有3個參數,與getCurrentPosition()相同。

使用方法:navigator.geolocation.watchPosition(successCallback, [errorCallback] , [positionOptions]);

執行步驟:

1.首先初始化positionOptions內的屬性(詳細同上)。

2.判斷是否有緩存位置對象,該對象年齡是否可用、是否超出maximumAge ,若是可用且未超出,返回緩存位置,不然從新肯定設備位置。

3.位置定位操做:

  i.創建一個計時器,進行位置獲取操做,若是在timeout以前完成,執行下一步;若是未在timeout以前完成,則執行errorCallback(),code爲3,跳出步驟作等待從新激活。

  ii.若是在timeout以前得到位置成功,則執行successCallback(),而後重置計時器(從獲取位置成功時刻從新算起),繼續掛起獲取新位置。當有與以前位置有明顯不一樣位置出現時,再次執行successCallback(),並重復操做,該循環直到timeout超時或者獲取操做中遇到POSITION_UNAVAILABLE錯誤執行errorCallback()爲止,亦或者執行clearWatch()操做。

clearWatch()

配合watchPosition()使用,用於中止watchPosition()輪詢。

watchPosition()須要定義一個watchID,var watchID = watchPosition(...),經過clearWatch(watchID)來中止watchPosition(),使用方法相似setInterval。

相關資料:

1. http://dev.w3.org/geo/api/spec-source.html#geolocation

2. http://kb.cnblogs.com/page/108732/

轉載請註明出處:http://www.cnblogs.com/lecaf/

若有任何建議或疑問,歡迎留言討論。

相關文章
相關標籤/搜索