HTML5提供了一组API用来获取用户的地理位置,如果浏览器支持且设备具有定位功能,就能够直接使用这组API来获取当前位置信息。

该API是navigator对象的一个属性 – Geolocation。目前除了ie内核浏览器外,其他浏览器的最新版本基本都支持Geolocation。同时,移动设备IOS 3.0+ 和 Android 2.0+ 系统也支持它,现在很多移动设备的应用加入了地理定位的元素。

那么我们接下来看如何使用Geolocation API:

一、检查浏览器是否支持Geolocation

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

二、navigator.geolocation 的方法:

* navigator.geolocation有三个方法,分别是getCurrentPosition()、watchPosition()和clearWatch()

getCurrentPosition()方法

* getCurrentPosition()方法检索用户的当前位置,但只检索一次。当该方法被脚本调用时,方法以异步的方式来尝试获取宿主设备的当前位置。

* 该方法最多可以有三个参数:

geolocationSuccess:带回当前位置的回调(callback)(必需的)
geolocationError:有错误发生时使用的回调(可选的)
geolocationOptions:地理位置选项(可选的)

调用如下所示:


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

watchPosition()方法

* watchPosition()方法定期轮询用户的位置,查看用户的位置是否发生改变。其最多可带三个参数。

调用如下所示:


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

clearWatch()方法

* clearWatch()方法终止正在进行的watchPosition(),该方法只能带一个参数。在调用时,其找到之前已经开始了的watchID参数并立即停止它。

调用如下所示:


navigator.geolocation.clearWatch(watchID);

三、navigator.geolocation返回一个Position对象:

* Position对象有两个属性:timestamp和coords。timestamp属性表示地理位置数据的创建时间,coords属性又包含七个属性:

coords.latitude:估计纬度
coords.longitude:估计经度
coords.altitude:估计高度
coords.accuracy:所提供的以米为单位的经度和纬度估计的精确度
coords.altitudeAccuracy:所提供的以米为单位的高度估计的精确度
coords.heading: 宿主设备当前移动的角度方向,相对于正北方向顺时针计算
coords.speed:以米每秒为单位的设备的当前对地速度

* 注意altitude, altitudeAccuracy, heading, speed不一定被浏览器支持,所以大家最好看一下官方规范的描述,多一些了解。

四、注意事项

* Geolocation App是不能直接访问设备的,只能通过请求浏览器来访问设备;
* Geolocation涉及到用户隐私,在获取 Geolocation 的时候,需要先征求用户的意思。
* Geolocation目前没有比较好的前端兼容解决方案,但是在移动设备 iOS 和 Android上,我们可以大胆尝试使用。