HTML5 Geolocation API是新增的地理位置应用程序接口。它提供了一个可以准确感知浏览器用户当前地理位置的方法。如果浏览器支持,且设备具有定位功能,就能够直接使用这个API来获取当前位置信息。
window.navigator.geolocation对象存在3个方法:
- getCurrentPosition 获取当前地理位置
- watchPosition 监视位置信息
- 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个参数。第1个参数为获取当前地理位置信息成功时所执行的回调函数,第2个参数为获取当前地理位置信息失败时所执行的回调函数,第3个参数为一些可选属性的列表。其中,第2、3个参数为可选参数。
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个参数,在获取地理位置信息成功时执行的回调函数中,带有一个position参数,它是一个Geoposition对象。该对象有以下两个属性:
timestamp属性,时间戳。
coords属性,coords属性是一个Coordinates类型对象,包含下面这些属性:
- accuracy 获取到的经度或纬度的精度(以米为单位)。
- altitude 当前地理位置的海拔高度(不能获取时为null)。
- altitudeAccuracy 获取到的海拔高度的精度(以米为单位)。
- heading 设备的前进方向。用面朝正北方向的顺时针旋转角度来表示(不能获取时为null)。
- latitude 当前地理位置的经度。
- longitude 当前地理位置的纬度
- speed 当前的前进速度(以米/秒为单位,不能获取时为null)。
第2个参数,在获取地理位置信息失败时执行的回调函数中,带有一个error参数,它是一个PositionError对象。该对象有以下两个属性:
code属性,可能值:
- 当属性值为1时,表示用户拒绝了位置服务,"User denied Geolocation"。
- 当属性值为2时,表示获取不到位置信息,"Timeout expired"。
- 当属性值为3时,表示获取信息超时错误。
message属性
message属性值为一个字符串,包含了错误信息,这个错误信息在我们开发和调试时非常有用。
第3个参数是一个可选属性的列表,说明如下:
enableHighAccuracy属性,是否要求高精度的地理位置信息。
timeout属性,超时限制(单位为毫秒)。如果在该时间内未获取到地理位置信息,则返回错误。
maximumAge属性,对地理位置信息进行缓存的有效时间(单位为毫秒)。如果该值设为0,则每次都去重新获取地理位置信息。
4 监视地理位置信息watchPosition
使用watchPosition(successCallback, errorCallback, options)方法可以定期地获取用户地理位置信息。该方法使用方式与getCurrentPosition方法类似,这里就不再详细解释了。调用该方法会返回一个数字,这个数字与setInterval方法的返回值用法类似,可以被clearWatch方法使用,以停止对当前地理位置信息的监视.
5 停止获取位置信息clearWatch
使用clearWatch方法可以停止对当前用户地理位置信息的监视。用法如下:
navigator.geolocation.clearWatch(watchId);
参数watchId为调用watchPosition方法时的返回值。
网友评论
2. 当属性值为2时,表示获取不到位置信息,"Timeout expired"。
这Timeout明显应该是返回值3的情况。