• h5地理位置API


      h5地理位置API

           地理API允许javascript程序向浏览器询问用户的真实地理位置,支持地理位置API的浏览器在访问前总是会询问用户是否允许。

           获取用户地理的途径有:      

            1、ip地址 书上说不准确,很多时候获取的是ISP机房的位置,但是获取非常方便,没有什么限制。但是实际上我觉得在中国,ip地址还是比较准确的,基本上上能精确到小区或大楼的标准。
            2、GPS   非常准确,但是需要在户外,且需要很长时间搜索卫星。最主要的很多设备比如笔记本电脑基本都是不带GPS的,新的智能手机倒是都有。
            3、WiFi基站mac地址。(猜测是连接位置已知的公共WiFi的时候,通过Mac地址识别WiFi接入点,从而定位)这种定位的精度还是很不错的,而且还可以在室内定位。不过由于这种位置公开的wifi比较少,此种方法的适用范围比较少。
            4、 GSM或CDMA基站通过基站定位,精度随基站密度变化,精度一般,还是只有手机能用。看来地理位置API还是手机上比较有实用性。
            5、用户指定位置  这个就不是HTML5的范畴了。
         使用getCurrentPosition获取用户的位置
        
     1        if(navigator.geolocation){
     2            navigator.geolocation.getCurrentPosition(showPosition,showError);
     3         }else{
     4            alert('该浏览器不支持地理位置!');
     5         }
     6 
     7         function showPosition(position){
     8            var lat=position.coords.latitude;
     9            var lng=position.coords.longitude;
    alert('纬度'+lat+","+"经度"+lng);
    11 } 12 function showError(error){ 13 switch(error.code) 14 { 15 case error.PERMISSION_DENIED: 16 alert("用户拒绝对获取地理位置的请求。") 17 break; 18 case error.POSITION_UNAVAILABLE: 19 alert("位置信息是不可用的。")
    20 break; 21 case error.TIMEOUT: 22 alert("请求用户地理位置超时。")
    23 break; 24 case error.UNKNOWN_ERROR: 25 alert("未知错误。")
    26 break; 27 }
    }

       支持地理位置的API的浏览器会定义navigator.geolocation。此属性拥有三个方法的对象:

             navigator.geolocation.getCurrentPosition()  获取用户当前位置

             navigator.geolocation.watchPosition()  获取并不断监视当前位置,一当有更改就会触发指定函数

             navigator.geolocation.clearWatch()      停止监听用户位置

        上面的代码可以知道,如果用户设备支持地理定位,则运行 getCurrentPosition() 方法。如果getCurrentPosition()运行成功,则向参数showPosition中规定的函数返回一个coordinates对象,getCurrentPosition() 方法的第二个参数showError用于处理错误,它规定当获取用户位置失败时运行的函数。其实,除了前两个参数之外getCurrentPosition()还接受第三个参数,该参数为一个配置对象。该对象的属性指定是否需要高精度的位置信息,该位置的过期时间,以及系统在多长范围内获取位置信息。

        

     1            opts={
     2  2              enableHightAccuracy:false,//获取高精度位置
     3  3              maximumAge:30000,  //过期时间
     4  4              timeout:15000   //15s的等待时间   
     5  5         }
     6  6             if(navigator.geolocation){         navigator.geolocation.getCurrentPosition(showPosition,showError,opts);
     7  7         }else{
     8  8            alert('该浏览器不支持地理位置!');
     9  9         }
    10 10 
    11 11         function showPosition(position){
    12 12         }
    13 13         function showError(error){
    14 14         
    15 15         }

               接着就是在地图上显示坐标位置(百度地图):

               在使用百度地图前,你必须先获取一下秘钥,点击这里  

     1       <!DOCTYPE html>
     2       <html>  
     3       <head>  
     4       <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />  
     5       <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
     6       <title>Hello, World</title> 
    <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=vjxRk3m3YYQ4uglexlrOxEVwGc2Nw6kF"> 7 <style type="text/css"> 8 html{height:100%} 9 body{height:100%;margin:0px;padding:0px} 10 #container{height:100%} 11 </style>
    </head> 12 <body>
    <div id='container'></div> 13 <script> 14 var lat,lng; 15 if(navigator.geolocation){ 16 navigator.geolocation.getCurrentPosition(showPosition); 17 }else{ 18 document.getElementById("container").innerHTML="该浏览器不支持地理位置!"; 19 } 20 function showPosition(position){ 21 lat=position.coords.latitude; 22 lng=position.coords.longitude; 23 alert("纬度"+latlonX+"<br/>经度"+latlonY); 24 } 25 var map = new BMap.Map("container"); // 创建地图实例 26 var point = new BMap.Point(lat,lng); // 创建点坐标 27 map.centerAndZoom(point, 15); // 初始化地图,设置中心点坐标和地图级别 28 </script> 29 </body> 30 </html>

        其中,位于BMap命名空间下的Map类表示地图,通过new操作符可以创建一个地图实例。其参数可以是元素id也可以是元素对象(这里是container)。

        地图添加到container容器里,所以要确保container容器在页面有宽和高,所以设置了style,如上,ak是你申请的秘钥。

  • 相关阅读:
    使用window.postMessage实现跨域通信
    关于angularJS绑定数据时自动转义html标签
    细小知识点
    理解Java多态
    Java自定义类加载器与双亲委派模型详解
    python之5种数据类型7种运算符
    Innodb中的事务隔离级别实现原理
    Redis分布式锁
    leetcode series:Two Sum
    设计模式六大原则(转)
  • 原文地址:https://www.cnblogs.com/panhe-xue/p/5902108.html
Copyright © 2020-2023  润新知