一、ip地址git
書上說不許確,不少時候獲取的是ISP機房的位置,可是獲取很是方便,沒有什麼限制。可是實際上我以爲在中國,ip地址仍是比較準確的,基本上上能精確到小區或大樓的標準。web
二、GPS瀏覽器
很是準確,可是須要在戶外,且須要很長時間搜索衛星。最主要的不少設備好比筆記本電腦基本都是不帶GPS的,新的智能手機purse hanger卻是都有。服務器
三、WiFi基站的mac地址。函數
(猜想是鏈接位置已知的公共WiFi的時候,經過Mac地址識別WiFi接入點,從而定位)spa
這種定位的精度仍是很不錯的,並且還能夠在室內定位。不過因爲這種位置公開的wifi比較少,此種方法的適用範圍比較少。code
四、 GSM或CDMA基站對象
經過基站定位,精度隨基站密度變化,精度通常,仍是隻有手機能用。看來地理位置API仍是手機上比較有實用性。ip
五、用戶指定位置get
暈,這個就不是HTML5的範疇了。
地理位置獲取流程:
一、用戶打開須要獲取地理位置的web應用。
二、應用向瀏覽器請求地理位置,瀏覽器彈出詢問窗口,詢問用戶是否共享地理位置。
三、假設用戶容許,瀏覽器從設別查詢相關信息。
四、瀏覽器將相關信息發送到一個信任的位置服務器,服務器返回具體的地理位置。
檢測瀏覽器支持:
位置請求方式:
單次請求
回調函數updateLocation接受一個對象參數,表示當前的地理位置,它有以下屬性:
latitude——緯度
longitude——精度
accuracy——精確度,單位米
altitude——高度,單位米
altitudeAccuracy——高度的精確地,單位米
heading—運動的方向,相對於正北方向的角度
speed——運動的速度(假設你在地平線上運動),單位米/秒
回調函數handleLocationError接受錯誤對象,error.code是以下錯誤號。
UNKNOWN_ERROR (error code 0) —— 錯誤不在以下三種以內,你能夠使用error.message獲取錯誤詳細信息。
PERMISSION_DENIED (error code 1)—— 用不選擇不共享地理位置
POSITION_UNAVAILABLE (error code 2) ——沒法獲取當前位置
TIMEOUT (error code 3) ——在指定時間沒法獲取位置會觸發此錯誤。
第三個參數options是可選參數,屬性以下:
enableHighAccuracy——指示瀏覽器獲取高精度的位置,默認爲false。當開啓後,可能沒有任何影響,也可能使瀏覽器花費更長的時間獲取更精確的位置數據。
timeout——指定獲取地理位置的超時時間,默認不限時。單位爲毫秒。
maximumAge——最長有效期,在重複獲取地理位置時,此參數指定多久再次獲取位置。默認爲0,表示瀏覽器須要馬上從新計算位置。
參數使用的例子以下:wedding veil
重複請求
navigator.geolocation.watchPosition(updateLocation, handleLocationError);
使用 watchPosition能夠持續獲取地理位置,瀏覽器或屢次調用updateLocation函數以便傳遞最新的位置。該函數返回一個 watchID,使用navigator.geolocation.clearWatch(watchId)能夠清除這次回調,使用不帶參數的 navigator.geolocation.clearWatch()清除說有watchPosition。
地址轉換:
因爲地理位置API返回的是經緯度,若是要計算兩個位置之間的距離,能夠使用著名的Haversine公式計算兩個座標在地平線上的距離。
Listing 4-7. A JavaScript Haversine implementation