Geolocation API

Geolocation API用于访问用户的当前位置信息。当然,访问之前必须得到用户的明确许可,即用户同意在页面中共享其位置信息。

Geolocation API在浏览器中的实现是: navigation.geolocation对象。

navigation.geolocation对象包含3个方法:

  • getCurrentPosition()
  • watchPosition()
  • clearWatch()

1.  getCurrentPosition()方法

getCurrentPosition()可以触发 请求用户共享地理定位信息的对话框。

参数有3个: 成功的回调函数、[可选]失败的回调函数、[可选]选项对象。

1.1 成功的回调函数

成功的回调函数接受1个参数: Position对象参数。该参数对象有2个属性: coords 和 timestamp。

coords对象中包含:

  • latitude: 经度(用十进制表示的)
  • longitude: 纬度(用十进制表示的)
  • accuracy: 经纬度坐标的精度。(用米表示的)
  • altitude: 海拔高度 (用米表示的)。如果相关数据不存在则为null。
  • altitudeAccuracy: 海拔高度的精度(用米表示的)。数值越大越不精确。
  • heading: 指南针的方向。0°表示正北, 值为NaN表示没有检测到相关数据。
  • speed: 速度,即每秒移动多少米。如果没有相关数据则值为null。

在地图上绘制用户的位置:

navigation.geolocation.getCurrentPosition(  function(position){

     drawMapCenteredAt( position.coords.latitude , positions.coords.longitude);

} );

1.2 失败的回调函数

失败的回调函数也接受一个参数对象: Error。该对象包含2个属性: message 和 code。

message: 保存着解释为什么出错的文本信息。

code: 保存着一个数值,表示错误的类型。

  •  (1) : 用户拒绝共享
  •  (2) : 位置无效
  •  (3) : 超时
navigation.geolocation.getCurrentPosition(  function(position){

     drawMapCenteredAt( position.coords.latitude , positions.coords.longitude);

},  function(error){

     console.log( "Error Message: " + error.message);

     console.log( "Error Code : "  + erroe.code);

} );

1.3 选项对象

选项对象用于设定信息的类型。

可设置的选项有3个:

  • enableHighAccuracy : 表示必须尽可能使用最准确的位置信息。是个布尔值。
  • timeout : 等待位置信息的最长时间。单位: 毫秒值。
  • maximumAge: 表示上一次取得的坐标信息的有效时间。单位: 毫秒值。如果时间到了则重新取得新坐标信息。
navigation.geolocation.getCurrentPosition(  function(position){

     drawMapCenteredAt( position.coords.latitude , positions.coords.longitude);

},  function(error){

     console.log( "Error Message: " + error.message);

     console.log( "Error Code : "  + erroe.code);

}, {

    enableHighAccuracy: true,

    timeout: 5000,

    maximumAge: 25000

} );

2. watchPosition()方法

watchPosition()用于跟踪用户的位置。

返回值: 一个数值标识符,用于跟踪监控的操作。

watchPosition()方法接收的参数 与 getCurrentPosition()方法接收的参数完全相同。

        实际上, watchPosition()方法 与定时调用getCurrentPosition()的效果相同。在第一次调用watchPosition()后,会取得当前位置,执行成功的回调函数或者失败的回调函数。然后,watchPosition()就地等待系统发出 位置已经改变的信号(它不会自己轮询位置)。根据watchPosition()方法的返回值可以取消监控操作,只要将其传递给clearWatch()方法即可。

var watchId = navigator.geolocation.watchPosition( function(position){

       drawMapCenteredAt( position.coords.latitude , positions.coords,longitude);

} , function(erro){      

     console.log( "Error Message: " + error.message);

     console.log( "Error Code : "  + erroe.code);

} );

3. clearWatch()方法

clearWatch()取消监控操作。参数: watchPosition()方法的返回值。

var watchId = navigator.geolocation.watchPosition( function(position){

       drawMapCenteredAt( position.coords.latitude , positions.coords,longitude);

} , function(erro){      

     console.log( "Error Message: " + error.message);

     console.log( "Error Code : "  + erroe.code);

} );

clearWatch( watchId) ;

上面例子调用了 watchPosition() 方法,将返回的标识符保存在了 watchId中。 然后,又将watchId传给了clearWatch()方法,取消了监控操作。

猜你喜欢

转载自blog.csdn.net/wei_jia007/article/details/82344716