HTML5笔记:Geolocation(地理定位)API
Geolocation(地理定位)API 用于定位用户的位置
开始之前,一定要知道,该特性可能侵犯用户的隐私,因此除非用户同意,否则用户位置信息是不可见的(用户必须通过浏览器提示,接收或者拒绝你访问他们的位置)
一. geolocation对象
地理位置信息可以通过geolocation对象访问,它是作为navigator对象的属性存在,第一步就是检测浏览器支持情况
if(navigator.geolocation){
//正常进行
}else{
alert(“您的浏览器不支持定位哦”);
}
1. getCurrentPosition()方法
要想访问用户位置,需要使用getCurrentPosition()方法,该方法接收三个参数,并以一次性快照的形式返回用户的位置
- 第一个参数,成功时的回调函数
- 第一个参数,失败时的回调函数(可选)
-
第一个参数,配置对象(可选)
var local = navigator.geolocation;
local.getCurrentPosition(sucCallback,errCallback,options);
getCurrentPosition()方法是异步的, 一旦被调用,会继续执行后续代码,当用户同意访问自己的地理位置并且获取到该位置信息时,成功回调函数被调用,用户拒绝访问或者其它原因未获取到位置信息,则调用失败回调函数
成功回调函数
成功回调函数接受一个position对象作为参数,该对象拥有一个coords属性,该属性中储存着相关的位置信息(都是只读的)
- coords.latitude:纬度
- coords.longitude:经度
- coords.accuracy:精度(米,数值越小,精度越高)
以下属性,只有在设备开启GPS时,才会有用,否则值都是0、NaN或者null
- coords.altitude——海拔
- coords.altitudeAccuracy——海拔精度(米)
- coords.heading——移动方向
- coords.value——相对于正北偏移的角度
- coords.speed——移动速度(米/秒)
例
var local = navigator.geolocation;
local.getCurrentPosition(sucCallback);
function sucCallback(position){
var coords = position.coords;
alert(coords.latitude);
alert(coords.longitude);
alert(coords.accuracy);
}
失败回调函数
如果用户拒绝了获取位置的请求,或者关闭了GPS,接收超时等,
则失败回调函数会被调用(如果有的话)
失败回调函数接受一个error对象作为参数
- error.code:返回代表错误类型的数字值(或常量)
数字1(error.PERMISSION_DENIED)表示用户拒绝
数字2(error.POSSITION_UNAVAILABLE)表示无法获得位置
数字3(error.TIMEOUT)表示请求超时
- error.message:返回错误描述的信息
配置对象
配置对象进一步明确了一些行为,该对象拥有三个属性
- enableHighAccuracy:布尔值,是否启用GPS(如果有的话),默认为false,启用的话,结果会更准确
- timeout:设置超时时间(毫秒),若超过此时间还未获取信息,则调用失败回调函数,此时 error.code===3
- maximumAge:设置浏览器缓存位置信息的时间(毫秒),值为0意味着浏览器必须在每次调用成功回调函数时都获取一个新位置
注意,除非确实需要非常精确的信息,否则建议设置enableHighAccuracy为false(默认值),因为,设置为true需要更长的获取时间,而且在移动设备上还会导致消耗更多电量;类似地,如果不需要频繁更新用户的位置信息,可以将maximumAge设置为 Infinity,从而始终都使用上一次的坐标信息
{
enableHighAcuracy: false,
timeout: 5000,
maximumAge: Infinity
}
2. watchPosition()方法
该方法接收的参数与getCurrentPosition()方法相同,但是前者是一次性快照,后者是时时获取用户信息,不断更新
与定时调用getCurrentPosition()的效果相同
第一次调用watchPosition()方法后,会取得当前位置,执行成功回调或者错误回调;然后, watchPosition()就地等待系统发出位置已改变的信号(它不会自己轮询位置)
该方法会返回一个watchID(数值),基于这个返回值可以取消监控操作
var watchID = navigator.geolocation.watchPosition(sucCallback,errCallback,options);
3. clearWatch()方法
该方法用于停止监控,参数就是watchPosition()方法的返回值
clearWatch(watchID);
用法类似于setTimeout和clearTimeout

浙公网安备 33010602011771号