HTML5 获取地理位置信息

Geolocation API的基本知识

在HTML5中,为window.navigator对象新增了一个geolocation属性,可以使用Geolocation API来对该属性进行访问。window.navigator对象的geolocation属性存在三个方法。

取得当前地理位置

可以使用getCurrentPosition()方法来取得用户当前的地理位置信息,该方法的定义如下:

void getCurrentPosition(onSuccess, onError, options);

其中第一个参数为获取当前地理位置信息成功时所执行的回调函数,第二个参数为获取当前地理位置信息失败时所执行的回调函数,第三个参数为一些可选属性的列表。其中,后两个参数是可选的。

该方法成功取得地理位置信息时执行的回调函数使用方法如下:

navigator.geolocation.getCurrentPosition(function(position) {
    // 获取成功时的处理。
});

如果获取地理位置信息失败,可以通过该方法的第二个参数定义的回调函数把错误信息提示给用户。当在浏览器中打开使用了Geolocation API来获得用户当前位置信息的页面时,浏览器会询问用户是否共享位置信息,如果拒绝共享的话也会引起错误。该回调函数使用一个error对象作为参数,该对象具有两个属性:code属性、message属性。

code属性的可能值有:用户拒绝了位置服务(属性值“1”)、获取不到位置信息(属性值“2”)、获取信息超时(属性值“3”)。

message属性为一个字符串,在该字符串中包含了错误信息,这个错误信息在开发和调试时很有用。有些浏览器不支持该属性。

错误处理回调函数的使用方法如下:

navigator.geolocation.getCurrentPosition(function(position) {}, function(error) {
    var errorType = ['位置服务被拒绝', '获取不到位置信息', '获取信息超时'];
    alert(errorType[error.code - 1]);
});

该方法第三个参数为可选属性列表,这些可选属性包括:

  • enableHighAccuracy:是否要求高精度的地理位置信息,这个参数在很多设备上设置了都没用,因为使用在设置上时需要结合设备电量、具体地理情况来综合考虑。因此,多数情况下把该属性高为默认,由设备自身来调整。
  • timeout:对地理位置信息的获取操作做一个超时限制(单位为毫秒)。如果在该时间内未获取到地理位置信息,则返回错误。
  • maximumAge:对地理位置信息进行缓存的有效时间(单位为毫秒)。超过这个时间后缓存的地理位置信息被废弃,尝试重新获取地理位置信息。如果该值设置为“0”,则无条件重新获取新的地理位置信息。

该属性使用方法如下所示:

navigator.geolocation.getCurrentPosition(function(position) {}, function(error) {}, 
// 以下为可选属性。
{
    maximumAge: 60 * 1000 * 2,  // 设置缓存有效时间为2分钟。
    timeout: 5000
});

持续监视当前地理位置信息

使用watchPosition()方法来持续获取用户的当前地理位置信息,它会定期地自动获取,该方法定义如下:

int watchCurrentPosition(onSuccess, onError, options);

该方法三个参数的说明与使用方法与getCurrentPosition()方法相同。该方法返回一个数字,该数字的使用方法与JavaScript脚本中的setInterval()方法的返回结果类似,可以被clearWatch()方法使用,停止对当前地理位置信息的监视。

停止获取当前用户的地理位置信息

使用该方法可以停止对当前用户的地理位置信息的监视。该方法定义如下:

void clearWatch(watchId);

该方法的参数为调用watchCurrentPosition()方法监视地理位置信息时的返回参数。

position对象

如果获取地理位置信息成功,则可以在获取成功后的回调函数中通过访问position对象的属性来得到这些地理位置信息。position对象具有如下属性:

  • latitude:当前地理位置的纬度。
  • longitude:当前地理位置的经度。
  • altitude:当前地理位置的海拔高度(不能获取时为null)。
  • accuracy:获取到的纬度或经度的的精度(以米为单位)。
  • altitudeAccurancy:获取到的海拔高度的精度(以米为单位)。
  • heading:设备的前进方向。用面朝正北方向的顺时针旋转角度来表示(不能获取时为null)。
  • speed:设备的前进速度(以米/秒为单位,不能获取时为null)。
  • timestamp:获取地理位置信息的时间。

你可能感兴趣的:(JavaScript,html5)