Geolocation API用于访问用户的当前位置信息。当然,访问之前必须得到用户的明确许可,即用户同意在页面中共享其位置信息。
Geolocation API在浏览器中的实现是: navigation.geolocation对象。
navigation.geolocation对象包含3个方法:
- getCurrentPosition()
- watchPosition()
- clearWatch()
1. getCurrentPosition()方法
getCurrentPosition()可以触发 请求用户共享地理定位信息的对话框。
参数有3个: 成功的回调函数、[可选]失败的回调函数、[可选]选项对象。
1.1 成功的回调函数
成功的回调函数接受1个参数: Position对象参数。该参数对象有2个属性: coords 和 timestamp。
coords对象中包含:
- latitude: 经度(用十进制表示的)
- longitude: 纬度(用十进制表示的)
- accuracy: 经纬度坐标的精度。(用米表示的)
- altitude: 海拔高度 (用米表示的)。如果相关数据不存在则为null。
- altitudeAccuracy: 海拔高度的精度(用米表示的)。数值越大越不精确。
- heading: 指南针的方向。0°表示正北, 值为NaN表示没有检测到相关数据。
- speed: 速度,即每秒移动多少米。如果没有相关数据则值为null。
在地图上绘制用户的位置:
navigation.geolocation.getCurrentPosition( function(position){
drawMapCenteredAt( position.coords.latitude , positions.coords.longitude);
} );
1.2 失败的回调函数
失败的回调函数也接受一个参数对象: Error。该对象包含2个属性: message 和 code。
message: 保存着解释为什么出错的文本信息。
code: 保存着一个数值,表示错误的类型。
- (1) : 用户拒绝共享
- (2) : 位置无效
- (3) : 超时
navigation.geolocation.getCurrentPosition( function(position){
drawMapCenteredAt( position.coords.latitude , positions.coords.longitude);
}, function(error){
console.log( "Error Message: " + error.message);
console.log( "Error Code : " + erroe.code);
} );
1.3 选项对象
选项对象用于设定信息的类型。
可设置的选项有3个:
- enableHighAccuracy : 表示必须尽可能使用最准确的位置信息。是个布尔值。
- timeout : 等待位置信息的最长时间。单位: 毫秒值。
- maximumAge: 表示上一次取得的坐标信息的有效时间。单位: 毫秒值。如果时间到了则重新取得新坐标信息。
navigation.geolocation.getCurrentPosition( function(position){
drawMapCenteredAt( position.coords.latitude , positions.coords.longitude);
}, function(error){
console.log( "Error Message: " + error.message);
console.log( "Error Code : " + erroe.code);
}, {
enableHighAccuracy: true,
timeout: 5000,
maximumAge: 25000
} );
2. watchPosition()方法
watchPosition()用于跟踪用户的位置。
返回值: 一个数值标识符,用于跟踪监控的操作。
watchPosition()方法接收的参数 与 getCurrentPosition()方法接收的参数完全相同。
实际上, watchPosition()方法 与定时调用getCurrentPosition()的效果相同。在第一次调用watchPosition()后,会取得当前位置,执行成功的回调函数或者失败的回调函数。然后,watchPosition()就地等待系统发出 位置已经改变的信号(它不会自己轮询位置)。根据watchPosition()方法的返回值可以取消监控操作,只要将其传递给clearWatch()方法即可。
var watchId = navigator.geolocation.watchPosition( function(position){
drawMapCenteredAt( position.coords.latitude , positions.coords,longitude);
} , function(erro){
console.log( "Error Message: " + error.message);
console.log( "Error Code : " + erroe.code);
} );
3. clearWatch()方法
clearWatch()取消监控操作。参数: watchPosition()方法的返回值。
var watchId = navigator.geolocation.watchPosition( function(position){
drawMapCenteredAt( position.coords.latitude , positions.coords,longitude);
} , function(erro){
console.log( "Error Message: " + error.message);
console.log( "Error Code : " + erroe.code);
} );
clearWatch( watchId) ;
上面例子调用了 watchPosition() 方法,将返回的标识符保存在了 watchId中。 然后,又将watchId传给了clearWatch()方法,取消了监控操作。