HTML5 Geolocation API是新增的地理位置應(yīng)用程序接口。它提供了一個(gè)可以準(zhǔn)確感知瀏覽器用戶當(dāng)前地理位置的方法。如果瀏覽器支持,且設(shè)備具有定位功能,就能夠直接使用這個(gè)API來獲取當(dāng)前位置信息。
window.navigator.geolocation對象存在3個(gè)方法:
- getCurrentPosition 獲取當(dāng)前地理位置
- watchPosition 監(jiān)視位置信息
- clearWatch 停止獲取位置信息
1 瀏覽器支持情況
瀏覽器 | 說明 |
---|---|
IE | 通過gears插件支持 |
FireFox | 3.5及以上版本支持 |
Opera | 10及以上版本支持 |
Chrome | 2.0及以上版本支持 |
Safari | 4.0及以上版本支持 |
2 檢測瀏覽器是否支持
function supportGeolocation() {
return 'geolocation' in navigator;
}
3 獲取當(dāng)前地理位置getCurrentPosition
這個(gè)getCurrentPosition(successCallback, onError, options)方法接受1個(gè)、2個(gè)或者3個(gè)參數(shù)。第1個(gè)參數(shù)為獲取當(dāng)前地理位置信息成功時(shí)所執(zhí)行的回調(diào)函數(shù),第2個(gè)參數(shù)為獲取當(dāng)前地理位置信息失敗時(shí)所執(zhí)行的回調(diào)函數(shù),第3個(gè)參數(shù)為一些可選屬性的列表。其中,第2、3個(gè)參數(shù)為可選參數(shù)。
navigator.geolocation.getCurrentPosition(function(position) {
//TODO 獲取成功時(shí)的處理
var timestamp = position.timestamp;
var coords = position.coords;
console.log(timestamp);
console.log(coords);
}, function(error) {
//TODO 獲取失敗時(shí)的處理
console.log(error);
}, {
maximumAge: 0
});
第1個(gè)參數(shù),在獲取地理位置信息成功時(shí)執(zhí)行的回調(diào)函數(shù)中,帶有一個(gè)position參數(shù),它是一個(gè)Geoposition對象。該對象有以下兩個(gè)屬性:
timestamp屬性,時(shí)間戳。
coords屬性,coords屬性是一個(gè)Coordinates類型對象,包含下面這些屬性:
- accuracy 獲取到的經(jīng)度或緯度的精度(以米為單位)。
- altitude 當(dāng)前地理位置的海拔高度(不能獲取時(shí)為null)。
- altitudeAccuracy 獲取到的海拔高度的精度(以米為單位)。
- heading 設(shè)備的前進(jìn)方向。用面朝正北方向的順時(shí)針旋轉(zhuǎn)角度來表示(不能獲取時(shí)為null)。
- latitude 當(dāng)前地理位置的經(jīng)度。
- longitude 當(dāng)前地理位置的緯度
- speed 當(dāng)前的前進(jìn)速度(以米/秒為單位,不能獲取時(shí)為null)。
第2個(gè)參數(shù),在獲取地理位置信息失敗時(shí)執(zhí)行的回調(diào)函數(shù)中,帶有一個(gè)error參數(shù),它是一個(gè)PositionError對象。該對象有以下兩個(gè)屬性:
code屬性,可能值:
- 當(dāng)屬性值為1時(shí),表示用戶拒絕了位置服務(wù),"User denied Geolocation"。
- 當(dāng)屬性值為2時(shí),表示獲取不到位置信息,"Timeout expired"。
- 當(dāng)屬性值為3時(shí),表示獲取信息超時(shí)錯誤。
message屬性
message屬性值為一個(gè)字符串,包含了錯誤信息,這個(gè)錯誤信息在我們開發(fā)和調(diào)試時(shí)非常有用。
第3個(gè)參數(shù)是一個(gè)可選屬性的列表,說明如下:
enableHighAccuracy屬性,是否要求高精度的地理位置信息。
timeout屬性,超時(shí)限制(單位為毫秒)。如果在該時(shí)間內(nèi)未獲取到地理位置信息,則返回錯誤。
maximumAge屬性,對地理位置信息進(jìn)行緩存的有效時(shí)間(單位為毫秒)。如果該值設(shè)為0,則每次都去重新獲取地理位置信息。
4 監(jiān)視地理位置信息watchPosition
使用watchPosition(successCallback, errorCallback, options)方法可以定期地獲取用戶地理位置信息。該方法使用方式與getCurrentPosition方法類似,這里就不再詳細(xì)解釋了。調(diào)用該方法會返回一個(gè)數(shù)字,這個(gè)數(shù)字與setInterval方法的返回值用法類似,可以被clearWatch方法使用,以停止對當(dāng)前地理位置信息的監(jiān)視.
5 停止獲取位置信息clearWatch
使用clearWatch方法可以停止對當(dāng)前用戶地理位置信息的監(jiān)視。用法如下:
navigator.geolocation.clearWatch(watchId);
參數(shù)watchId為調(diào)用watchPosition方法時(shí)的返回值。