开发者控制台

使用地理位置数据


使用地理位置数据

在支持navigator.geolocation属性的设备上,应用可以通过JavaScript使用地理位置数据。W3C提供了地理位置API规范,该规范描述了地理位置数据的访问方式。

该地理位置示例演示了如何访问地理位置数据。此示例的代码位于<Amazon Apps & Games Services SDKs>/Web/Cookbook/Geolocation/。可以从SDK下载页面下载网页应用SDK。

检测是否支持地理位置

要检测是否支持地理位置,请检查navigator.geolocation属性是否存在。如果存在,则支持地理位置。

if (navigator.geolocation) {
  // 支持地理位置
} else {
  // 不支持地理位置
}

请求用户当前位置的地理位置数据

确认存在navigator.geolocation属性后,就可以通过调用navigator.geolocation.getCurrentPosition()(至少有一个参数,最多三个参数)来请求用户当前位置的地理位置数据。这些参数依次是:

  1. (必需)对成功确定设备当前位置后所调用的函数的回调。
  2. (可选)对试图确定设备当前位置时出现错误后所调用函数的回调。
  3. (可选)封装定位选项的对象。

定位选项如下:

  • enableHighAccuracy(布尔值)提供了一个提示,指出应用希望接收到最佳结果。高精度结果可能会导致响应时间变慢和/或功耗增加。用户可能会拒绝此功能,或者设备可能无法提供比将此标记设置为false时更精确的结果。此标记的目的是允许应用通知实现过程,说明它们不需要高精度结果,以便实现过程能够避免使用高功耗的地理位置提供方,如GPS。
  • timeout(长整型)是调用getCurrentPosition()与调用相应的成功回调之间可以经过的最大毫秒数。如果timeout指定的毫秒数已过并且没有发生其他错误,则调用错误回调并携带超时错误代码。
  • maximumAge(长整型)是旧的缓存位置可以使用并仍在使用的最大毫秒数。如果maximumAge设置为零,则实现过程必须立即尝试获取新的位置数据。将maximumAge设置为无穷大意味着无论存在时间长短,始终会返回缓存的数据。

以下示例展示了对getCurrentPosition()的调用,其中定义了成功回调、错误回调和选项对象。成功回调的实现在“使用地理位置数据”一节中有所展示。错误回调的实现没有展示出来。

var options = {
  enableHighAccuracy: true,
  timeout: 5000,
  maximumAge: 0
};

if (navigator.geolocation) {
  navigator.geolocation.getCurrentPosition(showPositionSuccessCallback, showPositionErrorCallback, options);
} else {
  $("#location").text("此浏览器或环境不支持地理位置");
}

使用地理位置数据

提出的地理位置数据请求得到成功处理后,将调用成功回调。回调函数将接收包含坐标对象和时间戳的位置对象。坐标对象包含以下属性:

  • latitude(维度),以十进制度数表示。
  • longitude(经度),以十进制度数表示。
  • altitude(海拔)是指WGS84椭圆上方位置的高度,以米为单位。如果实现过程无法提供此信息,则可能为null。
  • accuracy(精度),纬度和经度的精度,以米为单位,置信水平为95%。
  • altitudeAccuracy(海拔精度),以米为单位,置信水平为95%。如果实现过程无法提供海拔信息,则可能为null。
  • heading(方向)是设备的移动方向,以度表示,如0° ≤ heading < 360°。如果设备静止(即速度为0),则可能为NaN。如果实现过程无法提供heading信息,则可能为null。
  • speed(速度)是指设备当前速度的水平分量大小,以米每秒表示。如果实现过程无法提供速度信息,则可能为null。

以下示例展示了一个成功回调,它使用位置的坐标对象中的信息来显示纬度、经度和精度信息,以及指向将这些纬度和经度信息嵌入查询字符串中的地图的链接:

function showPositionSuccessCallback(position) {
  var latitude = position.coords.latitude;
  var longitude = position.coords.longitude;
  var accuracy = position.coords.accuracy;
  $("#location").html("Latitude: " + latitude
                      + "<br/>Longitude: " + longitude
                      + "<br/>Accuracy: " + accuracy + " meters");
  $("#osm").html('<a href="http://www.openstreetmap.org/?lat=' + latitude
                 + '&lon=' + longitude + '&zoom=17&layers=M">Open Street Maps view</a>');
}

请求使用地理位置数据的权限

将应用提交到亚马逊应用商店时,请确保选中应用程序文件选项卡上Web应用程序功能部分中的Geolocation(地理位置)复选框。这将在Android清单中添加适当的权限。如果不选中相应的复选框,则应用的地理位置功能将无法正常工作。