摘要摘要:获取定位信息的方式有很多种,精度最高的要数GPS技术,除此之外还可以通过IP地址和WiFi热点等方式获取位置。HTML5中提供了一组Geolocation API(地理位置应用程序接口),用来获取Web用户的地理位置信息,且同样适用于移动设备中。Geolocation API的使用非常简单,在浏览器支持的情况下,使用getCurrentPosition()方法即能获取当前位置的坐标值。
关键词关键词:HTML5;地理定位;Geolocation API;百度地图
DOIDOI:10.11907/rjdk.1511004
中图分类号:TP301
文献标识码:A文章编号文章编号:16727800(2015)011003003
作者简介作者简介:龚丽(1971-),女,湖北武汉人,武汉软件工程职业学院计算机学院副教授,研究方向为计算机编程、网页设计。
0引言
HTML5涉及的新特征与新功能十分广泛,从技术层面而言,主要包括8个方面:语义、离线存储、设备通用、连接、多媒体、图形和特效、性能和集成、CSS3呈现。其中设备感知能力的增强使Web也能实现诸多传统应用程序的功能,如Orientation API可以访问重力感应,Geolocation API能定位设备等。本文主要讨论如何通过Geolocation API来获取用户当前所在的地理位置信息。
从地理定位的原理而言,其依赖的主要方式有:IP地址、GPS、WiFi或GSM/CDMA,并且每种方式都有不同的精度。桌面及笔记本的浏览器一般会使用WiFi(精确到100m范围)或者IP定位(只能精确到城市级别,如果用户连接的是企业VPN或代理服务器,得到的结果可能错误)。移动装置一般会使用GPS(精确到10m范围)、WiFi或GSM/CDMA网络信号定位(精确到1 000m范围)。HTML5技术则是综合了IP 地址、基于Web的数据库、无线网络连接和三角测量或GPS技术来确定经度和纬度[5]。
Navigator是JS的浏览器对象,通过它可以查看浏览器语言、用户引擎和安装插件等。在HTML5中,为该对象新增了一个Geolocation属性,以及一组实现地理定位的API。如果浏览器支持,且设备具有定位功能,就能够直接使用这组API获取当前位置信息,而且该Geolocation API也可以应用于移动设备中的地理定位。因此,用户通过Web应用程序既能知道所处的地理位置,还可搜索所处位置附近的有关需求信息,比如最近的餐厅等。
1基于Geolocation属性的方法
1.1getCurrentPosition方法获取当前地理位置
可以使用getCurrentPosition方法取得用户当前的地理位置信息,该方法定义如下:
void getCurrentPosition(onSuccess, onError, options)
其中,第1个参数onSuccess是一个函数,用于成功获取用户当前地理位置信息时的回调操作,该回调函数中有一个position对象,该对象描述了地理位置的详细数据信息,包括当前地理位置的纬度(latitude)、经度(longitude)、海拔高度(altitude)、纬度和经度的精度(accuracy)、海拔精度(altitudeAccuracy)、设备前进方向(heading)、设备前进速度(speed),以及获取地理位置信息时的时间(timestamp)。
第2个参数onError是获取地理位置失败时的回调函数,该函数通过一个error对象作为形参,根据error对象的“code”属性获取定位失败的原因。code属性包括以下3个值,如表1所示。
getCurrentPosition方法的第3个参数可以省略,它是一些可选属性的列表,包括:①enableHighAccuracy:布尔值,表示是否要求高精度的地理位置信息,默认为false;②timeout:对地理位置信息的获取设置超时限制(单位:ms);③maximumAge:对地理位置信息进行缓存的有效时间(单位:ms)。
1.2watchPosition方法持续追踪当前地理位置信息
getCurrentPosition方法能够获取用户当前位置信息,但如果用户在四处移动,可以使用watchPosition方法来持续追踪。使用该方法,设备会定期自动检测并把每次获得的位置发送给成功时的回调函数。该方法定义如下:
void watchPosition(onSuccess, onError, options)
其3个参数的使用与getCurrentPosition方法相同,但其回调函数有可能被执行多次。该方法返回一个数字,即watchID,该ID和JavaScript脚本中setInterval()函数返回的ID类似,可以被clearWatch方法使用,用于清除此次监视操作。
1.3clearWatch方法停止获取当前地理位置信息
使用clearWatch方法可以停止对当前用户的地理位置信息的监视,该方法定义如下:
void clearWatch(watchID)
这里的参数watchID为watchPosition方法的返回参数。
3误差问题
该地理定位的Web应用程序在火狐浏览器中运行时,地图中定位的位置与实际所处的位置相距较远,出现了较大误差,而在IE浏览器中运行误差却较小。关于误差问题,一般而言,在移动设备(如手机)上开启GPS定位可精确到10m左右,是精确度最高的方式;而在桌面浏览
器中通过IP定位,精确度从几百到几千米不等,甚至更
多,偏差较大。主要原因是用户用浏览器打开定位的IP不是用户本身电脑的IP,而是公网出口的IP。例如,用电信上网时, IP定位到的可能是附近的某座电信大楼。百度也提供了API来“纠偏”,这里不再赘述。
4结语
HTML5中的Geolocation API提供了准确定位浏览器用户当前位置的功能,而且封装了获取位置的技术细节,降低了应用开发难度。当然,地理位置属于比较敏感的用户隐私,所以getCurrentPosition方法在被调用时,浏览器会询问用户是否允许当前页面访问自己的位置信息,获得用户许可后方能继续执行。
参考文献参考文献:
[1]林珑.HTML5移动Web开发实战详解[M].北京:清华大学出版社,2014.
[2]陆凌牛.HTML5与CSS3权威指南[M].北京:机械工业出版社,2012:182185.
[3]陶国荣.HTML5实战[M].北京:机械工业出版社,2012:267268.
[4]MARCO CASARIO,等.HTML5实战[M].乔晶峰,孙爱红,译.北京:人民邮电出版社,2013:218.
[5]uruoxin的专栏.HTML5 地理定位详解[EB/OL]. http://blog.csdn.net/xuruoxin/article/details/9635439.
责任编辑(责任编辑:黄健)