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

posted @ 2015-12-18 16:51  Ievery  阅读(303)  评论(0)    收藏  举报