HTML5获取地理位置之Geolocation
地图在我们日常出行中必不可少,由于纸质地图的更新慢、非动态,查询费时,所以那个年代早已一去不复返。现代网络地图已经强大到足够满足我们日程需求,特别是你在地图上查找位置时,它会智能的给你提供路线方案和路程时间。你也用它来更新你当前位置的信息,虽然耗流量,但的确是一款非常不错的应用。
在HTML5中定义了geolocation,它可以获取当前地址位置的经度、维度、准确度、海拔、海拔准确度、行进方向、地面速度、时间戳诸类特性。如果使用geolocation结合百度地图API还能获取你周围的地图信息。
那么HTML5中geolocation是如何获取地理信息的呢?主要是通过以下几种方式:
- IP地址
- 基站
- GPS全球定位系统
- wifi无线网络
这里需要注意,使用geolocation前,浏览器会提醒你,是否共享你的位置信息。只有共享后才能使用geolocation的相关功能。如果要在手机上使用geolocation获取很准确的位置,则您的手机必须有GPS。
geolocation 函数
geolocation 定义了三个函数,分别是getCurrentPosition()、watchPosition()和clearWatch(),接下来逐个介绍:
getCurrentPosition()
getCurrentPosition函数可接受三个参数,分别是地理位置获取成功的处理,地理位置获取失败的处理,以及地理位置获取的相关设置,返回的是一组数据。当然这里接受的参数名你也可自定义:
getCurrentPosition(locationSuccess,locationFail,positionOptions); |
然后我们分别来介绍着三个参数:
locationSuccess—-获取地理位置成功后,我们可以进一步获取地理位置的相关属性 :
属性 | 描述 |
---|---|
coords.longitude | 经度 |
coords.latitude | 维度 |
coords.accuracy | 位置的准确度 |
coords.altitude | 海拔 |
coords.altitudeAcuracy | 海拔准确度 |
coords.heading | 移动方向 |
coords.speed | 移动速度 |
new Date(Position.timestamp) | 相应时间 |
function locationSuccess(position) { |
locationFail—-倘若获取地理位置失败,则函数会返回一个错误编码,这个编码包括四种情况:
属性 | 描述 |
---|---|
UNKNOW_ERROR–0 | 未知错误 |
PERMISSION_DENIED–1 | 用户拒绝对地理位置的要求 |
POSITION_UNAVALIABLE–2 | 位置信息不可用 |
TIMEOUT–3 | 获取用户位置超时 |
function locationFail(error) { |
locationOptions—地理位置获取的相关设置,locationOptions是以json数据格式存在的,其中包含三个可选属性:
属性 | 描述 |
---|---|
enableHighAcuracy | 是否获取高精度的位置,默认为false |
timeout | 指定获取地理位置的超时时间,默认不限时,单位为毫秒 |
maximumAge | 重复获取地理位置的时间间隔,适用移动设备。 |
var positionOptions = { |
watchPosition()
之前说到的getCurrentPosition只能单次获取地理位置,而对于移动的目标来说,要隔一段时间就需获取位置,如果我们设置定时器每隔一段时间去获取位置的话,则它会每次都提醒否要共享位置,而我们希望的是它能够自动更新当前地理位置。
因此, geolocation定义了watchPosition方法,这个函数的用法与getCurrentPosition一样。不同的是,它是根据locationOptions设置的maximumAge来间隔性发送获取地理位置信息的请求,且不会每次提醒你是否共享位置信息,而是自动更新地理位置。所以这种方法更适用于移动的目标。
clearWatch()
除了获取地理位置外,geolocation 还定义了clearWath()方法来关闭地理位置更新请求。此函数接受一个参数,即指定发送多次请求地理位置的那个对象。
var getPos = navigator.geolocation.watchPosition(locationSuccess, locationFail, locationOptions); |
最后要说的是,通过geolocation获取地理位置并非每次都成功,毕竟它也规定了一些错误编码,此时我们要做的,就是刷新网页,手动发送请求。
应用
若只是用geolocation单纯的来获取经纬度其实并不大实用,它的强大功能主要通过与百度地图API结合获取当前地图信息。有关百度API信息详见:
百度Api介绍:http://developer.baidu.com/map/jshome.htm
功能模块代码:http://developer.baidu.com/map/jsdemo.htm
最后做了个小demo: Geolocation获取地理位置