一 地理定位

  HTML5 Geolocation(地理定位)用于定位用户的位置。

1 地理定位

地理位置
  经度  :   南北极的连接线
  纬度  :   东西连接的线

位置信息从何而来:

  • IP地址
  • GPS全球定位系统
  • Wi-Fi无线网络
  • 手机地理定位

1)IP地址

  1. IP地址的地理定位方法,其返回的地理信息通常并不靠谱,基于IP地理的地理定位的实现方式是:自动查找用户的IP地址,然后检索其注册的物理地址,因此如果用户的IP地址是ISP提供的,器位置往往就是服务供应商的物理地址决定,改地址可能距离用户数千米。(误差大,不准确)

2) GPS全球定位系统

  1. 只要可以看到天空的地方,GPS就可以提供非常准确的定位结果.GPS定位是通过手机运行在地球周围多个GPS微信实现实现的,但是它的定位事件较长。因此它不是和需要快速响应的应用程序。

3) WI-FI地理定位

  1. 基于WI-FI的地理定位信息是通过三角距离计算得出的,这个三角距离指的是用户当前位置到已知的多个Wi-Fi接入点,它在室内也非常准确,在乡村这些无线接入点较少的地区效果不好。

4)手机地理定位

  1. 基于手机的地理定位信息是通过用户到一些基站的三角距离确定的,这中方法通常基于WiFi和基于GPS的地理定位信息结合使用。

2 geolocation api

navigator.geolocation
  单次定位请求  :getCurrentPosition(请求成功,请求失败,数据收集方式)
  请求成功函数

  • 经度 :  coords.longitude
  • 纬度 :  coords.latitude
  • 准确度 :  coords.accuracy
  • 海拔 :  coords.altitude
  • 海拔准确度 :  coords.altitudeAcuracy
  • 行进方向 :  coords.heading
  • 地面速度 :  coords.speed
  • 请求的时间: new Date(position.timestamp)

3 请求失败函数

失败编号  :code

  • 0  :  不包括其他错误编号中的错误
  • 1  :  用户拒绝浏览器获取位置信息
  • 2  :  尝试获取用户信息,但失败了
  • 3  :   设置了timeout值,获取位置超时了

数据收集 :  json的形式

  • enableHighAcuracy  :  更精确的查找,默认false
  • timeout  :  获取位置允许最长时间,默认infinity
  • maximumAge :  位置可以缓存的最大时间,默认0

4 多次定位请求  :  watchPosition

移动设备有用,位置改变才会触发
配置参数:frequency 更新的频率
关闭更新请求  :  clearWatch

5 浏览器打开允许共享地理位置权限

1) FireFox

参考资料:

https://support.mozilla.org/zh-CN/kb/%E9%A1%B5%E9%9D%A2%E4%BF%A1%E6%81%AF%E7%AA%97%E5%8F%A3

https://www.mozilla.org/zh-CN/firefox/geolocation/

2) Chrome

6 例子

1)获取一次地理位置

  1. <!doctype html>
    <html >
        <head>   
            <meta charset="UTF-8">          
            <title>Document</title>
            <style>         
                #div {
                    width: 400px;
                    height: 400px;
                    border: 1px solid red;
                }
            </style>
        </head>
  2.  
  3.     <body>      
            <input type="button" value="请求" id="btn"  style="width: 200px;height: 100px;" >
            <div id="div"></div>
            <script>
                var btn = document.getElementById("btn");
  4.  
  5.             var div = document.getElementById("div");
                btn.onclick = function() {
                    div.innerHTML ="";
                    //alert(1);
                    navigator.geolocation.getCurrentPosition(function(position) {
                        console.log(position.coords.longitude);
  6.  
  7.                     div.innerHTML += "经度:" + position.coords.longitude + "<br/>";
                        div.innerHTML += "纬度:" + position.coords.latitude + "<br/>";
                        div.innerHTML += "准确度:" + position.coords.accuracy + "<br/>";
                        div.innerHTML += "海拔准确度 :" + position.coords.altitudeAcuracy + "<br/>";
                        div.innerHTML += "行进方向:" + position.coords.heading + "<br/>";
                        div.innerHTML += "地面速度:" + position.coords.speed + "<br/>";
                        div.innerHTML += "请求的时间:" + new Date(position.timestamp);
  8.  
  9.                 }, function(error) {
                        switch(error.code) {
                            case 1:
                                alert("位置服务被拒绝。");
                                break;
                            case 2:
                                alert("暂时获取不到位置信息。");
                                break;
                            case 3:
                                alert("获取信息超时.");
                                break;
                            default:
                                alert("未知错误。");
                            break;
                        }
                    }, {
                        enableHighAcuracy: true,
                        timeout: 99999999,
                        maximumAge: 9999999999
                    });
  10.  
  11.             }
            </script>
        </body>
  12.  
  13. </html>

注意:timeout,maximumAge设置长一点,太短容易报错,响应慢。

2) 连续获得多次地理位置

  1. <!doctype html>
    <html >
        <head>
            <meta charset="UTF-8">
            <title>Document</title>
            <style>          
                #div {
                    width: 400px;
                    //height: 400px;
                    border: 1px solid red;
                }
            </style>
        </head>
  2.  
  3.     <body>       
            <input type="button" value="请求" id="btn"  style="width: 200px;height: 100px;">
            <div id="div"></div>
            <script>
                var btn = document.getElementById("btn");
  4.  
  5.             var div = document.getElementById("div");
                btn.onclick = function() {
                    alert(1);
                    
                    navigator.geolocation.watchPosition(function(position) {
                        console.log(position.coords.longitude);
  6.  
  7.                     div.innerHTML += "<br/>------------------------<br/>";
                        div.innerHTML += "经度:" + position.coords.longitude + "<br/>";
                        div.innerHTML += "纬度:" + position.coords.latitude + "<br/>";
                        div.innerHTML += "准确度:" + position.coords.accuracy + "<br/>";
                        div.innerHTML += "海拔准确度 :" + position.coords.altitudeAcuracy + "<br/>";
                        div.innerHTML += "行进方向:" + position.coords.heading + "<br/>";
                        div.innerHTML += "地面速度:" + position.coords.speed + "<br/>";
                        div.innerHTML += "请求的时间:" + new Date(position.timestamp);
  8.  
  9.                 }, function(error) {
                        switch(error.code) {
                            case 1:
                                alert("位置服务被拒绝。");
                                break;
                            case 2:
                                alert("暂时获取不到位置信息。");
                                break;
                            case 3:
                                alert("获取信息超时.");
                                break;
                            default:
                                alert("未知错误。");
                            break;
                        }
                navigator.geolocation.clearWatch();
                    }, {
                        enableHighAcuracy: true,
                        timeout: 99999999,
                        maximumAge: 9999999999
                    });
  10.  
  11.             }
            </script>
        </body>
  12.  
  13. </html>

二 百度地图

百度秘钥

应用ID 应用名称 访问应用(ak) 应用类别 备注信息(双击更改) 应用配置
3357282 cloudyWeb 44R7nksmLBjTE1fkdlXGd0VU 浏览器端   设置删除

百度 Map Api

  1. 百度地图-开发者中心
  2. http://developer.baidu.com/map/index.html
  3.  
  4. 百度地图-坐标拾取
  5. http://api.map.baidu.com/lbsapi/getpoint/index.html
  6.  
  7. 百度地图-覆盖物
  8. http://developer.baidu.com/map/jsdemo.htm
  9.  
  10. 百度地图-GPS
  11. http://developer.baidu.com/map/jsdemo.htm#c2_5
  12.  
  13. 百度地图-IP 定位
  14. http://developer.baidu.com/map/ip-location-api.htm

  百度地图例子。

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
  6. <style type="text/css">
  7. body, html,#allmap {width: %;height: %;overflow: hidden;margin:;font-family:"微软雅黑";}
  8. </style>
  9. <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=44R7nksmLBjTE1fkdlXGd0VU"></script>
  10. <title>地图展示</title>
  11. </head>
  12. <body>
  13. <div id="allmap"></div>
  14. </body>
  15. </html>
  16. <script type="text/javascript">
  17. // 百度地图API功能
  18. var map = new BMap.Map("allmap"); // 创建Map实例
  19. map.centerAndZoom(new BMap.Point(116.404, 39.915), ); // 初始化地图,设置中心点坐标和地图级别
  20. map.addControl(new BMap.MapTypeControl()); //添加地图类型控件
  21. map.setCurrentCity("北京"); // 设置地图显示的城市 此项是必须设置的
  22. map.enableScrollWheelZoom(true); //开启鼠标滚轮缩放
  23. </script>

  地理应用结合百度地图例子。

参考资料: http://developer.baidu.com/map/jsdemo.htm#a1_2

例子:

  1. <!DOCTYPE html>
  2. <html>
  3.  
  4. <head>
  5. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  6. <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
  7. <style type="text/css">
  8. body,
  9. html,
  10. #allmap {
  11. width: %;
  12. height: %;
  13. overflow: hidden;
  14. margin: ;
  15. font-family: "微软雅黑";
  16. }
  17. </style>
  18.  
  19. <style>
  20. #div {
  21. width: 400px;
  22. height: 400px;
  23. border: 1px solid red;
  24. }
  25. </style>
  26.  
  27. <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=44R7nksmLBjTE1fkdlXGd0VU"></script>
  28. <title>地图展示</title>
  29. </head>
  30.  
  31. <body>
  32. <input type="button" value="请求" id="btn" style="width: 100%;height: 100px;">
  33. <div id="allmap"></div>
  34. </body>
  35.  
  36. </html>
  37. <script type="text/javascript">
  38. //地理位置请求
  39. var btn = document.getElementById("btn");
  40.  
  41. var div = document.getElementById("div");
  42. btn.onclick = function() {
  43. //alert(1);
  44. navigator.geolocation.getCurrentPosition(function(position) {
  45. alert("经度" + position.coords.longitude + "\n" + "纬度:" + position.coords.latitude);
  46. var longitude = position.coords.longitude;
  47. var latitude = position.coords.latitude;
  48.  
  49. // 百度地图API功能
  50. var map = new BMap.Map("allmap"); // 创建Map实例
  51. map.centerAndZoom(new BMap.Point(longitude, latitude), ); // 初始化地图,设置中心点坐标和地图级别
  52. map.addControl(new BMap.MapTypeControl()); //添加地图类型控件
  53. //map.setCurrentCity("北京"); // 设置地图显示的城市 此项是必须设置的
  54. map.enableScrollWheelZoom(true); //开启鼠标滚轮缩放
  55.  
  56. }, function(error) {
  57. switch(error.code) {
  58. case :
  59. alert("位置服务被拒绝。");
  60. break;
  61. case :
  62. alert("暂时获取不到位置信息。");
  63. break;
  64. case :
  65. alert("获取信息超时.");
  66. break;
  67. default:
  68. alert("未知错误。");
  69. break;
  70. }
  71. }, {
  72. enableHighAcuracy: true,
  73. timeout: ,
  74. maximumAge:
  75. });
  76.  
  77. }
  78. </script>

HTML5学习总结-03 地理定位的更多相关文章

  1. HTML5 学习06——Geolocation(地理定位)

    HTML5 Geolocation(地理定位) HTML5 Geolocation API 用于获得用户的地理位置. 鉴于该特性可能侵犯用户的隐私,除非用户同意,否则用户位置信息是不可用的. HTML ...

  2. HTML5学习笔记 Geolocation(地理定位)

    HTML5 Geolocation(地理定位)用于定位用户的位置. 定位用户的位置 html5 Geolocation API用于获得用户的地理位置 鉴于该特性可能低侵犯用户的隐私,除非用户同意,否则 ...

  3. 从零开始学 Web 之 HTML5(三)网络监听,全屏,文件读取,地理定位接口,应用程序缓存

    大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...

  4. 基于浏览器的HTML5地理定位

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

  5. HTML5地理定位,百度地图API,知识点熟悉

    推断浏览器的兼容问题: IE9+支持地理定位,FF Chrome新版支持地理定位  if (navigator.geolocation) {        alert('支持地理定位');   } e ...

  6. HTML5 总结-地理定位-6

    HTML5 地理定位 定位用户的位置 HTML5 Geolocation API 用于获得用户的地理位置. 鉴于该特性可能侵犯用户的隐私,除非用户同意,否则用户位置信息是不可用的. 浏览器支持 Int ...

  7. HTML5 02. 多媒体控件、拖拽事件、历史记录、web存储、应用程序缓存、地理定位、网络状态

    多媒体 video:是行内块(text-align: center; 对行内块适用) <figure></figure>: 多媒体标签 : <figcaption> ...

  8. 小强的HTML5移动开发之路(18)——HTML5地理定位

    来自:http://blog.csdn.net/dawanganban/article/details/18192091 在前面的<小强的HTML5移动开发之路(2)--HTML5的新特性> ...

  9. HTML5 — 地理定位

    Geolocation:地理定位,获取当前浏览器所在的地理坐标信息(包括经度.纬度.海拔高度.移动速度),实现LBS应用(Location Based Service)——基于定位的服务,如订   餐 ...

随机推荐

  1. JAVA_集合框架虐我千百遍,虐也是一种进步

    1.Collection和Collections区别: Collection是java的一个集合接口,集合类的顶级接口 Collections是一个包装类(工具类),不能被实例化(由于其构造函数设为私 ...

  2. Android音频播放之SoundPool

    SoundPool 一.基本概念 在Android应用程序的开发过程中,经常需要播放多媒体文件,也许最先想到的会是MediaPlayer类了,该类提供了播放.暂停.停止及重复播放等功能性方法(该类位于 ...

  3. 【技术】JavaSE环境下JPA实体类自动注册

    在没有容器支持的环境下,JPA的实体类(Entity)一般要在persistence.xml中逐个注册,类似下面这样: <?xml version="1.0" encodin ...

  4. PHP配置详解

    [PHP] ;;;;;;;;;;;;;;;;;;; ; About php.ini ; ;;;;;;;;;;;;;;;;;;; ; This file controls many aspects of ...

  5. 1025WHERE执行顺序以及MySQL查询优化器

    转自http://blog.csdn.net/zhanyan_x/article/details/25294539 -- WHERE执行顺序-- 过滤比较多的放在前面,然后更加容易匹配,从左到右进行执 ...

  6. Maven的pom.xml标签详解

    <!--父项目的坐标.如果项目中没有规定某个元素的值,那么父项目中的对应值即为项目的默认值. 坐标包括group ID,artifact ID和 version.--> <paren ...

  7. wsdl中含ref="s:schema"时处理的

    dos窗口,在生成客户端代码的时候,出现了下图所示的错误: java是通过JAXB解析wsdl文件的,出现这种错误的原因是: 是JAXB目前还不支持ref 这种元素的解析 s:schema是types ...

  8. 任意文件夹下打开cmd功能的设置(win10)

    win10中打开cmd的方法: 1."运行"中输入CMD打开,也可以按住win+R 2.选择命令行工具中"开始-->>所有应用-->>Window ...

  9. 作业4.5-2用for循环打印菱形

    package lx; public class lx { public static void main(String[] args) { for(int i = 1;i <= 10 ;i++ ...

  10. react.js 之 批量添加与删除功能

    最近做的CMS需要用到批量添加图片的功能:在添加文件的容器盒子内,有两个内容,分别是:添加按钮与被添加的选择文件组件. 结构分析: 被添加的组件,我们称为:UploadQiNiuFiles(七牛文件上 ...