第四章 Geolocation API

4.1 位置信息

HTML5 Geolocation API的使用方法相当简单,请求一个位置信息,如果用户同意,浏览器就会返回位置信息,该位置信息是通过支持HTML5地理定位功能的底层设备提供给浏览器的。位置信息由纬度、经度坐标和一些其他元数据组成。

4.1.1 纬度和经度坐标

经纬度可以用以下两种方式表示:

十进制格式

DMS(Degree Minute Second,角度)格式

提示 HTML5 Geolocation API返回坐标的格式为十进制格式

4.2 HTML5 Geolocaltion的浏览器支持情况

4.3 隐私

HTML5 Geolocation API规范提供了一套保护用户隐私的机制。除非得到用户的明确许可,否则不可获取位置信息。

4.4 使用HTML5 Geolocation API

目前有两种类型的位置要求:

单次定位请求

重复性的位置更新请求

1.单次定位请求

void getCurrentPoistion(in PositionCallback successCallback,

in optional PositionErrorCallback errorCallback,

in optional PositionOptions options)

successCallback:为浏览器指明位置数据可用时应调用的函数。successCallback是收到实际位置信息并进行处理的地方。

errorCallback:提供一个用于跟用户解释或者提示其重试的errorCallback函数。

options:该对象可以调整HTML5 Geolocation服务的数据收集方式。

位置对象中包含的特性:

latitude(纬度):十进制用户位置

longitude(经度):十进制用户位置

accuracy(准确度):以m为单位指定纬度和经度值与实际位置间的差距,置信度为95%;

altitude:用户位置的海拔高度,以m为单位;

altitudeAccuracy:海拔高度的准确度,也是以m为单位,如果不支持altitude特性也会返回null;

heading:行进方向,相对于正北而言

speed:地面速度,以m/s为单位。

错误对象中的错误编号:

UNKNOW_ERROR(错误编号为0)——不包括在其他错误编号中的错误。需要通过message参数查找错误更多详细信息。

PERMISSION_DENID(错误编号为1)——用户选择拒绝浏览器获取其位置。

POSITION_UNAVALABLE(错误编号为2)——尝试获取用户位置数据,但失败了。

TIMEOUT(错误编号为3):设置了可选的timeout值。尝试确定用户位置的过程超时。

可选的地理定位请求特性

如果要同时处理正常情况和错误情况,就应该把注意力集中到三个可选参数(enableHighAccuracy、timeout和maximumAge)上,将这三个可选参数传递给HTML5 Geolocation服务以调用整数数据收集方式。请注意,这三个参数可以使用JSON对象传递,这样更便于添加到HTML5 Geolocation请求调用中。

enableHighAccuracy:如果启用该参数,则通知浏览器启用HTML5 Geolocation服务的高精度模式。参数的默认值为false。如果启用此参数,可能没有任何差别,也可能导致机器花费更多的时间和资源来确定位置,所以应谨慎使用。

提示:需要注意的是,高精度的设置只是一个切换操作:true或false。API不允许吧精度设置为不同的等级或一个数字范围。也许,这将在未来版本的规范中得到解决。

timeout:可选值,单位为ms,告诉浏览器计算当前位置所允许的最长时间。如果在这个时间段内未完成计算,就会调用错误处理程序。其默认值为Infinity,即无穷大或无限制。

maximumAge:这个值表示浏览器重新计算位置的时间间隔。它也是一个以ms为单位的值。此值默认为零,这意味着浏览器每次请求时必须立即重新计算位置。

 

2.重复性的位置更新请求

 

有时候,仅更新一次是不够的。还好,Geolocation服务的设计者使应用程序可以在单次请求用户位置和以既定间隔多次轻轻用户位置间相互转换。 事实上,转换的方式很简单,只需要变换请求函数即可,如下所示:

navigator.geolocation.getCurrentPosition(updateLocation,handleLocationError);

navigator.geolocation.watchPosition(updateLocation,handleLocationError);

关闭更新也很简单。如果应用程序不再需要接受有关用户的持续位置更新,则只需调用clearWatch()函数,如下所示:

navigator.geolocation.clearWatch(watchId);

4.5 使用HTML5 Geolocation构建实时应用

4.6 进阶功能

相关推荐