地理定位(geolocation)是最令人兴奋,而且得到了广泛支持的一个新API。通过这套API,

JavaScript代码能够访问到用户的 当前位置信息。当然,访问之前必须得到用户的明确许可,即同意在页面共享其位置信息。

如果页面尝试访问其地理定位信息,浏览器就会显示一个对话框,请求用 户许可共享其位置信息。

Geolocation API在浏览器中的实现是navigator.geolocation对象,这个对象包含3个方法。第一个是getCurrentPosition(),

调用这个方法就会触发请求用户共享地理定位信息的对话框。这个方法接收3个参数:成功回调函数、可选的失败回调函数和可选的选项对象。

其中,成功返回调用函数会接收到一个Position对象参数,该参数有两个属性:coords和timestamp。而coords对象中将包含下列与位置相关的信息。

  • latitude:以十进制度数表示的纬度。
  • longitude:以十进制度数表示的经度。
  • accuracy:经、纬度坐标的精度,以米为单位。有些浏览器还可能会在coords对象中提供如下属性。
  • altitude:以米为单位的海拔高度,如果没有相关数据则值为null。
  • altitudeAccuracy:海拔高度的精度,以米为单位,数值越大越不精确。
  • heading:指南针的方向,0°表示正北,值为NaN表示没有检测到数据。
  • speed:速度,每秒移动多少米,如果没有相关数据则为null。

在实际开发中,latitude和longitude是大多数Web应用最常用到的属性。例如,以下代码将在地图上绘制用户的位置:

navigator.geolocation.getCurrentPosition(function(position) {
    drawMapCenteredAt(position.coords.latitude, position.coords.longitude);
});

以上介绍的是成功回调函数。 getCurrentPosition()的第二个参数,即失败回调函数,在被调用的时候也会接收到一个参数。

这个参数是一个对象,包含两个属 性:message和code。其中,message属性中保存着给人看的文本消息,解释为什么会出错,

而code属性中保存着一个数值,表示错误的类 型:用于拒绝共享(1)、位置无效(2)或者超时(3)。实际开发中,

大多数Web应用只会将错误消息保存到日志文件中,而不一定会因此修改用户界面。例 如:

navigator.geolocation.getCurrentPosition(function(position){
    drawMapCenteredAt(position.coords.latitude, position.coords.longitude);
}, function(error) {
    console.log("Error code: " + error.code);
    console.log("Error message: " + error.message);
});

getCurrentPosition()的第三个参数是一 个选项对象,用于设定信息的类型。可以设置的选项有三个:

enableHighAccuracy是一个布尔值,表示必须尽可能使用最准确的位置信 息;timeout是以毫秒数表示的等待位置信息的最长时间;

maximumAge表示上一次取得的坐标信息的有效时间,以毫秒表示,如果时间到则重新获 得最新坐标信息。例如:

navigator.geolocation.getCurrentPosition(function(position){
    drawMapCenteredAt(position.coords.latitude, position.coords.longitude);
}, function(error) {
    console.log("Error code: " + error.code);
    console.log("Error message: " + error.message);
}, {
    enableHighAccuracy: true,
    timeout: 5000,
    maximumAge: 25000
});

这三个选项都是可选的,可以单独设置,也可以与其它选项一起 设置。除非确实需要非常精确的信息,

否则建议保持enableHighAccuracy的false值(默认值)。将这个选项设置为ture需要更长的时 候,

而且在移动设备上还会导致消耗更多电量。类似的,如果不需要频繁更新用户的位置信息,那么可以将maximumAge设置为Infinity,

从而始 终都使用上一次的坐标信息。

如果你希望跟踪用户的位置,那么可以使用另一个方法watchPosition()。这个方法接收的参数与 getCurrentPosition()效果相同。

在第一次调用watchPosition()方法后,会取得当前位置,执行成功回调或者错误回调。然 后,watchPosition()就地等待位置已改变的信号(它不会自己轮询位置)。

调用watchPosition()会返回一个数值标识符,用于跟踪监控的操作。基于这个返回值可以取消监控操作,

只要将其传递给clearWatch()方法即可(与使用setTimeout()和clearTimeout()类似)。例如:

var watchId = navigator.geolocation.watchPosition(function(position){
    drawMapCenteredAt(position.coords.latitude, position.coords.longitude);
}, function(error) {
    console.log("Error code: " + error.code);
    console.log("Error message: " + error.message);
});
clearWatch(watchId);

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

支持地理定位的浏览器有IE9+、Firefox 3.5+、Opeara 10.6+、Safari 5+、Chrome、iOS版Safari、Android版WebKit。

HTML5 地理位置定位API(4)的更多相关文章

  1. HTML5 地理位置定位API(1)

    地理位置(Geolocation)是 HTML5 的重要特性之一,提供了确定用户位置的功能,借助这个特性能够开发基于位置信息的应用.今天这篇文章向大家介绍一下 HTML5 地理位置定位的基本原理及各个 ...

  2. HTML5 地理位置定位API(3)

    HTML5 地理位置定位实例 这篇文章主要为大家介绍了HTML5地理定位的方法,实例讲述了html5获取坐标完整实现过程, 并对比不同浏览器运行效果给出参考结果,需要的朋友可以参考下 本文实例讲述了h ...

  3. HTML5 地理位置定位API(5)

    HTML5 Geolocation API (地理位置应用程序接口) 目前PC浏览器支持情况: Firefox 3.5+Chrome 5.0+Safari 5.0+Opera 10.60+Intern ...

  4. HTML5 地理位置定位API(2)

    HTML5 Geolocation API (地理位置应用程序接口) 目前PC浏览器支持情况: Firefox 3.5+Chrome 5.0+Safari 5.0+Opera 10.60+Intern ...

  5. HTML5 地理位置定位(HTML5 Geolocation)原理及应用

    地理位置(Geolocation)是 HTML5 的重要特性之一,提供了确定用户位置的功能,借助这个特性能够开发基于位置信息的应用.今天这篇文章向大家介绍一下 HTML5 地理位置定位的基本原理及各个 ...

  6. [Javascript] HTML5 地理位置定位(HTML5 Geolocation)原理及应用

    地理位置(Geolocation)是 HTML5 的重要特性之一,提供了确定用户位置的功能,借助这个特性能够开发基于位置信息的应用.今天这篇文章向大家介绍一下 HTML5 地理位置定位的基本原理及各个 ...

  7. 使用HTML5地理位置定位到城市的方法及注意事项

    介绍 本文将简述一下如何通过HTML5和百度地图开放平台提供的API来实现对浏览器的定位.实现效果为显示出用户所在的省市,即: XXX省 XXX市. 实现思路 利用HTML5 提供的API获取到用户的 ...

  8. html5地理位置定位功能小析

    Geolocationd 基本原理1.GPS    GPS基本原理是测量出已知位置的卫星到用户接收机之间的距离,然后综合多颗卫星的数据就可知道接收机的具体位置.适用于具备GPS功能的设备(1)优点:在 ...

  9. HTML5地理定位API在chrome中不能正常使用

    navigator.geolocation.getCurrentPosition在chrome中不能正常使用. 经测试发现,FQ后就能正常使用,估计是因为chrome 对这个API的实现使用了goog ...

随机推荐

  1. BCB 如何让Application收到SendMessage发送来的消息

    一般,都是通过添加一个ApplicationEvent组件就可以接收到PostMessage发来的消息,那么如何收到SendMessage发来的消息呢? https://stackoverflow.c ...

  2. @PostMapping和@PutMapping区别

    @PostMapping和@PutMapping作用等同,都是用来向服务器提交信息.如果是添加信息,倾向于用@PostMapping,如果是更新信息,倾向于用@PutMapping.两者差别不是很明显 ...

  3. Mybatis3.1-[tp-30-31]-select_resultMap_关联查询_级联属性封装结果__association定义关联对象封装规则

    笔记要点 出错分析与总结 在全局配置中,映射dao包下的全部: <mapper> <package name="com.dao"/> </mapper ...

  4. mybatis3.1-[topic-18-20]-_映射文件_参数处理_单个参数&多个参数&命名参数 _POJO&Map&TO 三种方式及举例

    笔记要点出错分析与总结 /**MyBatis_映射文件_参数处理_单个参数&多个参数&命名参数 * _POJO&Map&TO 三种方式及举例 _ * 单个参数 : #{ ...

  5. Django之路——2 Django的安装

    Django的安装分为两种方式,一种是命令行安装,另外一种是pycharm安装.在这里只说一种在命令行里面安装的 1.命令行安装 这个自不必多说,直接上干货,如果遇到pip版本过低,安装失败的,请自自 ...

  6. NodeJS开发博客(一)

    1 区分 ECMAScript/JS/NodeJs --ECMAScript.定义了语法,写JS和NodeJS都要遵守: 变量定义,循环/判断/函数: 原型和原形链/作用域和闭包/异步 不能操作DOM ...

  7. C++——宏观把控

    跟看所有的书一样,我们都要求第一遍泛读,宏观把控书本内容,C++依旧如此进行.看到前面这几章的时候感觉非常熟悉,因为能让我联想到很多以前学习的VB.C#等的知识,感觉轻松很多,原来我已经学过了很多东西 ...

  8. centos安装nodejs和配置npm

    1.下载安装nodejs 1 wget http://nodejs.org/dist/v7.4.0/node-v7.4.0.tar.gz 2 yum install gcc openssl-devel ...

  9. python 杂记-unittest

    介绍单元测试的好文:https://mp.weixin.qq.com/s/njxc8GXSlc3z_RibK70ROg setUpModule/tearDownModule:在整个模块的开始和结束时被 ...

  10. Selenium常用API的使用java语言之3-selenium3 浏览器驱动

    1.下载浏览器驱动 当selenium升级到3.0之后,对不同的浏览器驱动进行了规范.如果想使用selenium驱动不同的浏览器,必须单独下载并设置不同的浏览器驱动. 各浏览器下载地址: Firefo ...