HTML5提供了一組API用來獲取用戶的地理位置,如果瀏覽器支持且設(shè)備具有定位功能,就能夠直接使用這組API來獲取當(dāng)前位置信息。

該API是navigator對(duì)象的一個(gè)屬性 – Geolocation。目前除了ie內(nèi)核瀏覽器外,其他瀏覽器的最新版本基本都支持Geolocation。同時(shí),移動(dòng)設(shè)備IOS 3.0+ 和 Android 2.0+ 系統(tǒng)也支持它,現(xiàn)在很多移動(dòng)設(shè)備的應(yīng)用加入了地理定位的元素。

那么我們接下來看如何使用Geolocation API:

一、檢查瀏覽器是否支持Geolocation

var hasGeolocation = !!(navigator.geolocation);
if(hasGeolocation){
alert(“瀏覽器支持hasGeolocation”);
}

二、navigator.geolocation 的方法:

* navigator.geolocation有三個(gè)方法,分別是getCurrentPosition()、watchPosition()和clearWatch()

getCurrentPosition()方法

* getCurrentPosition()方法檢索用戶的當(dāng)前位置,但只檢索一次。當(dāng)該方法被腳本調(diào)用時(shí),方法以異步的方式來嘗試獲取宿主設(shè)備的當(dāng)前位置。

* 該方法最多可以有三個(gè)參數(shù):

geolocationSuccess:帶回當(dāng)前位置的回調(diào)(callback)(必需的)
geolocationError:有錯(cuò)誤發(fā)生時(shí)使用的回調(diào)(可選的)
geolocationOptions:地理位置選項(xiàng)(可選的)

調(diào)用如下所示:


navigator.geolocation.getCurrentPosition(geolocationSuccess, geolocationError, geolocationOptions);

watchPosition()方法

* watchPosition()方法定期輪詢用戶的位置,查看用戶的位置是否發(fā)生改變。其最多可帶三個(gè)參數(shù)。

調(diào)用如下所示:


var watchPositionHandler = navigator.geolocation.watchPosition(geolocationSuccess, geolocationError, geolocationOptions);

clearWatch()方法

* clearWatch()方法終止正在進(jìn)行的watchPosition(),該方法只能帶一個(gè)參數(shù)。在調(diào)用時(shí),其找到之前已經(jīng)開始了的watchID參數(shù)并立即停止它。

調(diào)用如下所示:


navigator.geolocation.clearWatch(watchID);

三、navigator.geolocation返回一個(gè)Position對(duì)象:

* Position對(duì)象有兩個(gè)屬性:timestamp和coords。timestamp屬性表示地理位置數(shù)據(jù)的創(chuàng)建時(shí)間,coords屬性又包含七個(gè)屬性:

coords.latitude:估計(jì)緯度
coords.longitude:估計(jì)經(jīng)度
coords.altitude:估計(jì)高度
coords.accuracy:所提供的以米為單位的經(jīng)度和緯度估計(jì)的精確度
coords.altitudeAccuracy:所提供的以米為單位的高度估計(jì)的精確度
coords.heading: 宿主設(shè)備當(dāng)前移動(dòng)的角度方向,相對(duì)于正北方向順時(shí)針計(jì)算
coords.speed:以米每秒為單位的設(shè)備的當(dāng)前對(duì)地速度

* 注意altitude, altitudeAccuracy, heading, speed不一定被瀏覽器支持,所以大家最好看一下官方規(guī)范的描述,多一些了解。

四、注意事項(xiàng)

* Geolocation App是不能直接訪問設(shè)備的,只能通過請(qǐng)求瀏覽器來訪問設(shè)備;
* Geolocation涉及到用戶隱私,在獲取 Geolocation 的時(shí)候,需要先征求用戶的意思。
* Geolocation目前沒有比較好的前端兼容解決方案,但是在移動(dòng)設(shè)備 iOS 和 Android上,我們可以大膽嘗試使用。