HTML5提供了一組API用來獲取用戶的地理位置,如果瀏覽器支持且設(shè)備具有定位功能,就能夠直接使用這組API來獲取當(dāng)前位置信息。
該API是navigator對象的一個屬性 – Geolocation。目前除了ie內(nèi)核瀏覽器外,其他瀏覽器的最新版本基本都支持Geolocation。同時,移動設(shè)備IOS 3.0+ 和 Android 2.0+ 系統(tǒng)也支持它,現(xiàn)在很多移動設(shè)備的應(yīng)用加入了地理定位的元素。
那么我們接下來看如何使用Geolocation API:
一、檢查瀏覽器是否支持Geolocation
var hasGeolocation = !!(navigator.geolocation);
if(hasGeolocation){
alert(“瀏覽器支持hasGeolocation”);
}
二、navigator.geolocation 的方法:
* navigator.geolocation有三個方法,分別是getCurrentPosition()、watchPosition()和clearWatch()
getCurrentPosition()方法
* getCurrentPosition()方法檢索用戶的當(dāng)前位置,但只檢索一次。當(dāng)該方法被腳本調(diào)用時,方法以異步的方式來嘗試獲取宿主設(shè)備的當(dāng)前位置。
* 該方法最多可以有三個參數(shù):
geolocationSuccess:帶回當(dāng)前位置的回調(diào)(callback)(必需的)
geolocationError:有錯誤發(fā)生時使用的回調(diào)(可選的)
geolocationOptions:地理位置選項(可選的)
調(diào)用如下所示:
navigator.geolocation.getCurrentPosition(geolocationSuccess, geolocationError, geolocationOptions);
watchPosition()方法
* watchPosition()方法定期輪詢用戶的位置,查看用戶的位置是否發(fā)生改變。其最多可帶三個參數(shù)。
調(diào)用如下所示:
var watchPositionHandler = navigator.geolocation.watchPosition(geolocationSuccess, geolocationError, geolocationOptions);
clearWatch()方法
* clearWatch()方法終止正在進(jìn)行的watchPosition(),該方法只能帶一個參數(shù)。在調(diào)用時,其找到之前已經(jīng)開始了的watchID參數(shù)并立即停止它。
調(diào)用如下所示:
navigator.geolocation.clearWatch(watchID);
三、navigator.geolocation返回一個Position對象:
* Position對象有兩個屬性:timestamp和coords。timestamp屬性表示地理位置數(shù)據(jù)的創(chuàng)建時間,coords屬性又包含七個屬性:
coords.latitude:估計緯度
coords.longitude:估計經(jīng)度
coords.altitude:估計高度
coords.accuracy:所提供的以米為單位的經(jīng)度和緯度估計的精確度
coords.altitudeAccuracy:所提供的以米為單位的高度估計的精確度
coords.heading: 宿主設(shè)備當(dāng)前移動的角度方向,相對于正北方向順時針計算
coords.speed:以米每秒為單位的設(shè)備的當(dāng)前對地速度
* 注意altitude, altitudeAccuracy, heading, speed不一定被瀏覽器支持,所以大家最好看一下官方規(guī)范的描述,多一些了解。
四、注意事項
* Geolocation App是不能直接訪問設(shè)備的,只能通過請求瀏覽器來訪問設(shè)備;
* Geolocation涉及到用戶隱私,在獲取 Geolocation 的時候,需要先征求用戶的意思。
* Geolocation目前沒有比較好的前端兼容解決方案,但是在移動設(shè)備 iOS 和 Android上,我們可以大膽嘗試使用。