Geolocation 对象

navigator.geolocation属性返回一个 Geolocation 对象。该对象具有以下三个方法。

  • Geolocation.getCurrentPosition():返回一个 Position 对象,表示用户的当前位置。
  • Geolocation.watchPosition():指定一个监听函数,每当用户的位置发生变化,就执行该监听函数。
  • Geolocation.clearWatch():取消watchPosition()方法指定的监听函数。

Geolocation.getCurrentPosition()

Geolocation.getCurrentPosition()方法用于获取用户的位置。

  1. navigator.geolocation.getCurrentPosition(success, error, options)

该方法接受三个参数。

  • success:用户同意给出位置时的回调函数,它的参数是一个 Position 对象。
  • error:用户拒绝给出位置时的回调函数,它的参数是一个 PositionError 对象。该参数可选。
  • options:参数对象,该参数可选。

Position 对象有两个属性。

  • Position.coords:返回一个 Coordinates 对象,表示当前位置的坐标。
  • Position.timestamp:返回一个对象,代表当前时间戳。

PositionError 对象主要有两个属性。

  • PositionError.code:整数,表示发生错误的原因。1表示无权限,有可能是用户拒绝授权;2表示无法获得位置,可能设备有故障;3表示超时。
  • PositionError.message:字符串,表示错误的描述。

参数对象option可以指定三个属性。

  • enableHighAccuracy:布尔值,是否返回高精度结果。如果设为true,可能导致响应时间变慢或(移动设备的)功耗增加;反之,如果设为false,设备可以更快速地响应。默认值为false
  • timeout:正整数,表示等待查询的最长时间,单位为毫秒。默认值为Infinity
  • maximumAge:正整数,表示可接受的缓存最长时间,单位为毫秒。如果设为0,表示不返回缓存值,必须查询当前的实际位置;如果设为Infinity,必须返回缓存值,不管缓存了多少时间。默认值为0

下面是一个例子。

  1. var options = {
  2. enableHighAccuracy: true,
  3. timeout: 5000,
  4. maximumAge: 0
  5. };
  6. function success(pos) {
  7. var crd = pos.coords;
  8. console.log(`经度:${crd.latitude}`);
  9. console.log(`纬度:${crd.longitude}`);
  10. console.log(`误差:${crd.accuracy} 米`);
  11. }
  12. function error(err) {
  13. console.warn(`ERROR(${err.code}): ${err.message}`);
  14. }
  15. navigator.geolocation.getCurrentPosition(success, error, options);

Geolocation.watchPosition()

Geolocation.watchPosition()对象指定一个监听函数,每当用户的位置发生变化,就是自动执行这个函数。

  1. navigator.geolocation.watchPosition(success[, error[, options]])

该方法接受三个参数。

  • success:监听成功的回调函数,该函数的参数为一个 Position 对象。
  • error:该参数可选,表示监听失败的回调函数,该函数的参数是一个 PositionError 对象。
  • options:该参数可选,表示监听的参数配置对象。

该方法返回一个整数值,表示监听函数的编号。该整数用来供Geolocation.clearWatch()方法取消监听。

下面是一个例子。

  1. var id;
  2. var target = {
  3. latitude : 0,
  4. longitude: 0
  5. };
  6. var options = {
  7. enableHighAccuracy: false,
  8. timeout: 5000,
  9. maximumAge: 0
  10. };
  11. function success(pos) {
  12. var crd = pos.coords;
  13. if (target.latitude === crd.latitude && target.longitude === crd.longitude) {
  14. console.log('恭喜,你已经到达了指定位置。');
  15. navigator.geolocation.clearWatch(id);
  16. }
  17. }
  18. function error(err) {
  19. console.warn('ERROR(' + err.code + '): ' + err.message);
  20. }
  21. id = navigator.geolocation.watchPosition(success, error, options);

Geolocation.clearWatch()

Geolocation.clearWatch()方法用来取消watchPosition()方法指定的监听函数。它的参数是watchPosition()返回的监听函数的编号。

  1. navigator.geolocation.clearWatch(id);

使用方法的例子见上一节。