定位及地理位置信息是LBS应用的核心,和定位功能有所不同的是地理位置信息更关注如何得到有意义的信息。(例如一条街道的地址)
     从这边文章里你会学到HTML5地理位置信息的各种功能。它能提供从用户具体的位置到路径导航的多种用途。
     通过IP地址、手机和基站间的无线通讯、 GPS定位,有很多种方式可以知道你在哪里。不过现在通过获取客户IP地址来定位的好日子已经一去不复返了。
     HTML5有一套API可以允许客户设备使用javascript有效的获取地理位置信息(需iphone3/android2.0以上,或者使用桌面浏览器)。
     地理位置API支持下面的浏览器及手机:
    • Google Chrome 5.0
    • Internet Explorer 9.0
    • Firefox 3.5
    • Safari 5.0
    • Opera 16.0
    • Iphone 3.0
    • Android 2.0
    • Opera Mobile 10
    • Blackberry OS 6.0
安全性和精度
       当需共享地理位置给远程服务器时,浏览器会通过弹出框或显示到浏览器顶端的提示信息来要求您的授权,智能手机会在安装相关APP时进行提示。
          

 
     上面的infobar弹出框为非模态,在选择其他浏览页面后会消失。没有方法可以绕过这种要求授权的infobar,infobar的这种特性保证了只有经过你的授权浏览器才可以共享位置信息。作为客户来说可以了解到,
  • 被告知哪个网站想获取你的地址位置
  • 可以选择共享或不共享
  • 可保存针对此选项的默认选择,该网站的类似提示不会再出现
     有多种技术可用于获取用户的位置,每种技术有不同的精确度。桌面浏览器可能会使用WIFI(精确度20米)或者IP来定位(只能精确到城市级别且可能会有误报)。移动设备倾向于使用三角定位技术例如GPS(精确
度10米仅限户外)、WIFI和GSM/CDMA(精确度1000米)。
     天气窗件
     下面这个例子使用了HTML地址位置API及OpenWeather API。该例子在页面展示部分比较简单,也没有充分使用到OpenWeather API的全部功能。现在是这个窗件的截图:

 
 
     从html部分开始。html引用了第三方的javascript和CSS,在页面初始化阶段调用了javascript方法getLocation如下:   

 
     使用了不同CSS style的table:
     

 
     在table里面使用了div,随后可以使用javascript覆写:

 
     随后使用免费的OpenWeather API获取Jason格式的天气信息并展示出来。下面定义了一些全局变量,包括获取获取当前天气、随后5天天气预测、及图片的静态URL。
     

 
     在getLocation方法里面需判断当前浏览器是否支持获取地理位置API,

 
     如浏览器不支持则会显示如下的信息,
     

 
     Geolocation API提供两种方法获取用户的地址位置信息,getCurrentPosition和watchPosition。随后会简短讨论一下两个方法的不同之处。两个方法都会立即返回,然后使用异步的方式尝试获取用户的位置。且两者都使用相同数量的参数:
 
  1. successCallback - 方法成功返回时调用,如下图的getCurrentWeatherData方法。
  2. errorCallback - 出现错误时调用,如下的displayError方法。
  3. 可选 - 一些可选参数,
     a. enableHighAccuracy - 默认值为false。该参数设置为true时响应时间会变慢。如果是在移动设备使用的话会使用GPS,同时导致耗电量增加。
     b. timeout - 默认为0,表示为无限制。用来指定等待响应的最大时间。这里我们设置timeout时间如下:
 

 
     c.maximumAge - 单位毫秒默认值为0。用来指定应用所能接受的缓存位置信息的最长时间。0表示获取立即获取新的位置信息。
 

 
     在errorCallback方法里,我们使用错误代码对应相应的错误信息:
 
     

 
     摘要描述一下以上步骤:
 
  • 判断是否支持获取地理位置信息API。
  • 如果支持的话,调用getCurrentPosition方法,否则调用errorcallback方法。
  • 如果getCurrentPosition方法调用成功,则返回结果被指定的方法进行处理。(getCurrentWeatherData)
  • getCurrentWeatherData方法对返回结果postion对象进行进一步处理。
     getCurrentPosition和watchPosition
     watchPosition方法在位置改变时会进行通知。这在一些位置驱动的Apps里面非常有用,可以用来跟踪用户的移动轨迹。而getCurrentPostion则为一次性返回。watchPosition方法会返回watchId,当不需要进行持续的位置更新时可调用clearWatch方法。
     
     Position
 
     上文提到的Position对象包含以下属性:
     

 
     调用OpenWeather API的URL使用Position对象的相关属性如下:
 

 
     我们使用XMLHttpRequest对象和OpenWeather服务器进行数据交换。当请求数据发送后,我们希望根据响应执行一些操作。onreadystatechange事件在XMLHttpRequest对象的readyState属性每次改变后都会被触发,定义在该事件上的方法会被自动调用。如下是readyState属性的值列表:
 
     0: request not initialized
     1: server connection established
     2: request received
     3: processing request
     4: request finished and response is ready
 
     state属性返回“200”表示OK,“404”表示页面没有找到。当readyState值为4且state的值为200时,表示响应正确返回。解析返回的responseText对象为Json对象,随后调用Parse方法解析Json对象转换成要显示的内容。
 

 
     现在可以使用XMLHttpRequest对象的open及send方法了:
     

 
     处理Json对象
 
     可使用Json.parse方法解析并通过“.”或“[]”访问Json对象。Json和XML相似的地方是它是自描述的、分层并通过使用XmlHttpRequest获取,可以使用多种语言进行解析。和XML不同的地方是,Json不需要使用Xml解析器进行解析,直接使用javascript即可。Json数据为名字/值对格式,通过逗号分隔。使用大括号分隔对象,并使用中括号来保存数组。下面是一个从OpenWeather API返回的Json对象的例子:
 

 
       如下展示了如何使用Json对象展示返回的天气信息:
 

 

天气窗件展示 -一个HTML5 地理位置应用的例子的更多相关文章

  1. 用Phaser来制作一个html5游戏——flappy bird (一)

    Phaser是一个简单易用且功能强大的html5游戏框架,利用它可以很轻松的开发出一个html5游戏.在这篇文章中我就教大家如何用Phaser来制作一个前段时间很火爆的游戏:Flappy Bird,希 ...

  2. iOS开发UI篇—使用picker View控件完成一个简单的选餐应用

    iOS开发UI篇—使用picker View控件完成一个简单的选餐应用 一.实现效果 说明:点击随机按钮,能够自动选取,下方数据自动刷新. 二.实现思路 1.picker view的有默认高度为162 ...

  3. Windows程序==>>使用ListView控件展示数据

    使用ListView控件展示数据 01.ImageList控件 1.了解了解         属性 说明 Images 储存在图像列表中的所有图像 ImageSize 图像列表中图像的大小 Trans ...

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

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

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

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

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

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

  7. 用Phaser来制作一个html5游戏——flappy bird (二)

    在上一篇教程中我们完成了boot.preload.menu这三个state的制作,下面我们就要进入本游戏最核心的一个state的制作了.play这个state的代码比较多,我不会一一进行说明,只会把一 ...

  8. 注意Android里TextView控件的一个小坑,用android:theme来设置样式时动态载入的layout会丢失该样式

    注意Android里TextView控件的一个小坑,用android:theme来设置样式时动态载入的layout会丢失该样式 这个坑,必须要注意呀, 比如在用ListView的时候,如果在List_ ...

  9. 一个html5开发工具

    今天推荐一个Html5开发工具 sublimetext3 找了一个注册码 可用 —– BEGIN LICENSE —– Michael Barnes Single User License EA7E- ...

随机推荐

  1. leetcode刷题笔记172 阶乘后的零

    题目描述: 给定一个整数 n,返回 n! 结果尾数中零的数量. 示例1: 输入: 输出: 解释: ! = , 尾数中没有零. 示例2: 输入: 输出: 解释: ! = , 尾数中有 个零. 说明: 你 ...

  2. PAT甲题题解-1052. Linked List Sorting (25)-排序

    三个注意点: 1.给出的n个节点并不一定都在链表中 2.最后一组样例首地址即为-1 3.输出地址的时候一直忘记前面要补0... #include <iostream> #include & ...

  3. Linux读书笔记第三、四章

    第三章 主要内容: 进程和线程 进程的生命周期 进程的创建 进程的终止 1. 进程和线程 进程和线程是程序运行时状态,是动态变化的,进程和线程的管理操作(比如,创建,销毁等)都是有内核来实现的. Li ...

  4. mysql 访问不是本地数据库,给用户刷新了权限没有作用

    1.grant all privileges on *.* to 'yangxin'@'%' identified by 'yangxin123456' with grant option; flus ...

  5. We are a 团队

    虽然在团队中只是拖后腿的存在,但是几个人一起摸索着前进也确实有着不一样的感觉. 我们队伍共有五个人:董强强.张振鑫.王鼎.高庆阳还有我(排名不分先后) 我们有自己的关于软件工程的QQ群,会在群里讨论一 ...

  6. spring整合redis(jedis)

    真是一步一个坑阿,学点新技术,这么难,这个异常: java.lang.IllegalStateException: Could not load TestContextBootstrapper [nu ...

  7. Java的4种保留4位小数的方法(转)

    上网查到的4种方法 其实刚学java……谁知道java里面的这么多方法啊……java里面重要的包本来就不少啊 ……跟我学粤语的小徒弟问我的东东…… 写两种方式……直接在main函数里面写的.还有就是利 ...

  8. beta 圆桌 6

    031602111 傅海涛 1.今天进展 接口微调修正 2.存在问题 文档转化太久 3.明天安排 完成全部接口的交互 4.心得体会 文档转化需要好好优化 031602115 黄家雄 1.界面优化 2. ...

  9. Linux下利用json-c从一个json数组中提取每一个元素中的部分字段组成一个新json数组

    先把代码贴上来,有时间整理一下 首先说一下要实现的功能: 假定现在有一个json格式的字符串,而且他是一个josn中的数组,比如: [ { "id": "NEW20170 ...

  10. [开源中国]Windows 10 全球市场份额正式超越 Windows 7

    Windows 10 全球市场份额正式超越 Windows 7 全球知名科技数据调查公司 Netmarketshare 昨天发布了2018年12月份最新的桌面操作系统份额报告.对于微软来说,这是历史一 ...