HTML5 Geolocation API是新增的地理位置應用程序接口。它提供了一個可以準確感知瀏覽器用戶當前地理位置的方法朗若。如果瀏覽器支持恼五,且設備具有定位功能,就能夠直接使用這個API來獲取當前位置信息哭懈。
window.navigator.geolocation對象存在3個方法:
- getCurrentPosition 獲取當前地理位置
- 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 獲取當前地理位置getCurrentPosition
這個getCurrentPosition(successCallback, onError, options)方法接受1個灾馒、2個或者3個參數(shù)。第1個參數(shù)為獲取當前地理位置信息成功時所執(zhí)行的回調(diào)函數(shù)遣总,第2個參數(shù)為獲取當前地理位置信息失敗時所執(zhí)行的回調(diào)函數(shù)睬罗,第3個參數(shù)為一些可選屬性的列表。其中旭斥,第2容达、3個參數(shù)為可選參數(shù)。
navigator.geolocation.getCurrentPosition(function(position) {
//TODO 獲取成功時的處理
var timestamp = position.timestamp;
var coords = position.coords;
console.log(timestamp);
console.log(coords);
}, function(error) {
//TODO 獲取失敗時的處理
console.log(error);
}, {
maximumAge: 0
});
第1個參數(shù)垂券,在獲取地理位置信息成功時執(zhí)行的回調(diào)函數(shù)中花盐,帶有一個position參數(shù),它是一個Geoposition對象。該對象有以下兩個屬性:
timestamp屬性算芯,時間戳柒昏。
coords屬性,coords屬性是一個Coordinates類型對象熙揍,包含下面這些屬性:
- accuracy 獲取到的經(jīng)度或緯度的精度(以米為單位)职祷。
- altitude 當前地理位置的海拔高度(不能獲取時為null)。
- altitudeAccuracy 獲取到的海拔高度的精度(以米為單位)届囚。
- heading 設備的前進方向堪旧。用面朝正北方向的順時針旋轉(zhuǎn)角度來表示(不能獲取時為null)。
- latitude 當前地理位置的經(jīng)度奖亚。
- longitude 當前地理位置的緯度
- speed 當前的前進速度(以米/秒為單位淳梦,不能獲取時為null)。
第2個參數(shù)昔字,在獲取地理位置信息失敗時執(zhí)行的回調(diào)函數(shù)中爆袍,帶有一個error參數(shù),它是一個PositionError對象作郭。該對象有以下兩個屬性:
code屬性陨囊,可能值:
- 當屬性值為1時,表示用戶拒絕了位置服務夹攒,"User denied Geolocation"蜘醋。
- 當屬性值為2時,表示獲取不到位置信息咏尝,"Timeout expired"压语。
- 當屬性值為3時,表示獲取信息超時錯誤编检。
message屬性
message屬性值為一個字符串胎食,包含了錯誤信息,這個錯誤信息在我們開發(fā)和調(diào)試時非常有用允懂。
第3個參數(shù)是一個可選屬性的列表厕怜,說明如下:
enableHighAccuracy屬性,是否要求高精度的地理位置信息蕾总。
timeout屬性粥航,超時限制(單位為毫秒)。如果在該時間內(nèi)未獲取到地理位置信息生百,則返回錯誤递雀。
maximumAge屬性,對地理位置信息進行緩存的有效時間(單位為毫秒)置侍。如果該值設為0映之,則每次都去重新獲取地理位置信息拦焚。
4 監(jiān)視地理位置信息watchPosition
使用watchPosition(successCallback, errorCallback, options)方法可以定期地獲取用戶地理位置信息。該方法使用方式與getCurrentPosition方法類似杠输,這里就不再詳細解釋了赎败。調(diào)用該方法會返回一個數(shù)字,這個數(shù)字與setInterval方法的返回值用法類似蠢甲,可以被clearWatch方法使用僵刮,以停止對當前地理位置信息的監(jiān)視.
5 停止獲取位置信息clearWatch
使用clearWatch方法可以停止對當前用戶地理位置信息的監(jiān)視。用法如下:
navigator.geolocation.clearWatch(watchId);
參數(shù)watchId為調(diào)用watchPosition方法時的返回值鹦牛。