navigator.geolocation的三个方法:html
1. getCurrentPosition()git
2. watchPosition()api
3. clearWatch()缓存
getCurrentPosition()函数
使用方法:navigator.geolocation.getCurrentPosition(successCallback, [errorCallback] , [positionOptions]);post
A) successCallback 获取定位成功时执行的回调函数 eg: function(position){alert("纬度:"+position.coords.latitude+";经度:"+position.coords.longitude)};spa
successCallback返回一个地理数据对象position做为参数,该对象有属性timestamp和coords。timestamp表示该地理数据建立时间(时间戳);coords包括另外七个属性:firefox
1. coords.latitude:估计纬度
2. coords.longitude:估计经度
3. coords.altitude:估计高度
4. coords.accuracy:所提供的以米为单位的经度和纬度估计的精确度
5. coords.altitudeAccuracy:所提供的以米为单位的高度估计的精确度
6. coords.heading: 宿主设备当前移动的角度方向,相对于正北方向顺时针计算
7. coords.speed:以米每秒为单位的设备的当前对地速度code
PS:firefox下还有address属性,能够获取详细地址,不过我获得的地址是错误的,使用方法:position.address.city,具体以下:htm
QueryInterface:function QueryInterface() { [native code] } streetNumber:200号 street:人民大道 premises:null city:上海市 county:null region:上海市 country:中国 countryCode:CN postalCode:null getInterfaces:function getInterfaces() { [native code] } getHelperForLanguage:function getHelperForLanguage() { [native code] } contractID:null classDescription:null classID:null implementationLanguage:2 flags:8 SINGLETON:1 THREADSAFE:2 MAIN_THREAD_ONLY:4 DOM_OBJECT:8 PLUGIN_OBJECT:16 CONTENT_NODE:64 RESERVED:2147483648
B) errorCallback 定位失败时执行的回调函数 eg: function(error){alert(error.message);}
errorCallback返回一个错误数据对象error做为参数,该对象有属性:
1.code :表示失败缘由,返回1 or 2 or 3 ,具体为
PERMISSION_DENIED
(数值为1) 表示没有权限使用地理定位API
POSITION_UNAVAILABLE (数值为2) 表示没法肯定设备的位置,例如一个或多个的用于定位采集程序报告了一个内部错误致使了所有过程的失败
TIMEOUT (数值为3) 表示超时
详情查看 http://dev.w3.org/geo/api/spec-source.html#permission_denied_error
2.message :错误提示内容
C) positionOptions 用来设置positionOptions来更精细的执行定位,positionOptions拥有三个属性{enableHighAccuracy:boolean , timeout:long , maximumAge:long}。
enableHighAccuracy 【true or false(默认)】是否返回更详细更准确的结构,默认为false不启用,选择true则启用,可是会致使较长的响应时间及增长功耗,这种状况更多的用在移动设备上。
timeout 设备位置获取操做的超时时间设定(不包括获取用户权限时间),单位为毫秒,若是在设定的timeout时间内未能获取位置定位,则会执行errorCallback()返回code(3)。若是未设定timeout,那么timeout默认为无穷大,若是timeout为负数,则默认timeout为0。
maximumAge 设定位置缓存时间,以毫秒为单位,若是不设置该值,该值默认为0,若是设定负数,则默认为0。该值为0时,位置定位时会从新获取一个新的位置对象;该值大于0时,即从上一次获取位置时开始,缓存位置对象,若是再次获取位置时间不超过maximumAge,则返回缓存中的位置,若是超出maximumAge,则从新获取一个新的位置。
watchPosition()
功能getCurrentPosition()类似,watchPosition()是按期轮询设备的位置,一样拥有3个参数,与getCurrentPosition()相同。
使用方法:navigator.geolocation.watchPosition(successCallback, [errorCallback] , [positionOptions]);
执行步骤:
1.首先初始化positionOptions内的属性(详细同上)。
2.判断是否有缓存位置对象,该对象年龄是否可用、是否超出maximumAge ,若是可用且未超出,返回缓存位置,不然从新肯定设备位置。
3.位置定位操做:
i.创建一个计时器,进行位置获取操做,若是在timeout以前完成,执行下一步;若是未在timeout以前完成,则执行errorCallback(),code为3,跳出步骤作等待从新激活。
ii.若是在timeout以前得到位置成功,则执行successCallback(),而后重置计时器(从获取位置成功时刻从新算起),继续挂起获取新位置。当有与以前位置有明显不一样位置出现时,再次执行successCallback(),并重复操做,该循环直到timeout超时或者获取操做中遇到POSITION_UNAVAILABLE错误执行errorCallback()为止,亦或者执行clearWatch()操做。
clearWatch()
配合watchPosition()使用,用于中止watchPosition()轮询。
watchPosition()须要定义一个watchID,var watchID = watchPosition(...),经过clearWatch(watchID)来中止watchPosition(),使用方法相似setInterval。
相关资料: