• HTML5 Geolocation API


    HTML5 geolocation API技术(地理定位技术),应用请求用户共享位置,提供位置相关的信息;或者是构建计算步行(跑步)路程的应用程序,在运动中启动记录功能;还有就是基于GPS导航的社交网络应用。目前Geolocation API中有两种类型的定位请求函数:单次定位请求和重复性的位置更新请求。

     在访问位置信息前,浏览器都会询问用户是否共享其位置信息,以 Chrome 浏览器为例,如果您允许 Chrome 浏览器与网站共享您的位置,Chrome 浏览器会向 Google 位置服务发送本地网络信息,估计您所在的位置。然后,浏览器会与请求使用您位置的网站共享您的位置。

    返回的位置信息,是通过支持HTML5地理定位功能的底层设备(笔记本电脑或手机)提供给浏览器的。位置信息由经纬度和一些其他元数据组成(取决于浏览器所在的硬件设备,包括还把、行驶方向和速度等),利用这些信息,可以构建位置感知类应用程序。

    经纬度坐标可以使用十进制(39.1722)或者是DMS(角度,39°10′20″)格式。

    位置信息从何而来

    Geolocation API不能保证设备返回数据的准确性,设备可以使用下列数据源:

    IP地址和三维坐标(GPS全球定位系统,WiFi的MAC地址,GSM或CDMA手机的ID和用户自定义数据)

    IP地址,如果用户的IP地址是由ISP提供的,其位置往往就是由服务供应商的物理地址决定,不精确,而且在服务器端运算代价大。

    GPS地理定位数据,通过手机运行在地球周围多个GPS卫星的信号提供,提供非常准确的定位结果,但是定位时间长,不适宜需要快速响应的应用程序。

    WIFI地理定位数据,是通过三角计算得出的,用户当前位置到已知的多个WIFI接入点的距离,可在室内使用,简单快捷。

    手机地理定位数据,通过用户到一些基站的三角距离确定,通常基于WIFI和GPS的地理定位信息结合使用。

    重要提示,应用程序不能直接访问设备,它只能请求浏览器来代表他访问设备。

    浏览器支持检查

    当浏览器不支持时,可以提供一些替代文本,以提示用户升级浏览器或安装插件来增强现有浏览器功能:

        (function loadDemo(){
            if(navigator.geolocation){
                document.getElementById("support").innerHTML = "geolocation support";
            }else{
                document.getElementById("support").innerHTML = "geolocation not supporet";
            }
        })();

     坐标还有一些特性,不能保证浏览器都为其提供支持,但如果不支持就会返回null(例如如果使用笔记本电脑,就无法访问用户位置还把高度altitude、行进方向heading、地面速度speed)

    demo

    window.onload=function(){
        var options={
                enableHighAccuracy:true,
                maximunAge:1000,
                timeout:45000
        };
        if(window.navigator.geolocation){
            navigator.geolocation.getCurrentPosition(successCallback,errorCallback,options);
        }else{
            alert("你的浏览器不支持定位!");
        }
    }
    function successCallback(position){
        var output="";
        output +="Your position has bean located . 
    ";
        output+=" Latitude:"+position.coords.latitude+" ";
        output+=" Longitude:"+position.coords.longitude+" ";
        output+=" Accuracy :"+position.coords.accuracy +" meters";
        if(position.coords.latitude){
            output+=" Accuracy :"+position.coords.altitudeAccuracy +" meters";
        }
        if(position.coords.heading){
            output+=" Heading :"+position.coords.Heading +" meters";
        }
        if(position.coords.speed){
            output+=" Speed :"+position.coords.Speed +" m/s";
        }
        output+=" Time of Position "+position.timestamp +" m/s";
        alert(output);
    }

    function errorCallback(error){ switch(error.code){ case error.PERMISSION_DENIED: alert("you have denied access to your position ."); break; case error.POSITION_UNAVAILABLE: alert("there was a problem getting yout position ."); break; case error.TIMEOUT: alert("The application has timed out attempting to get your location ."); break; } }

    Geolocation API存在于navigator对象中,只包含3个方法:
    1、getCurrentPosition
    2、watchPosition
    3、clearWatch

    核心函数的调用

    navigator.geolocation.getCurrentPosition(successCallback,errorCallback,options);
    successCallback指明位置数据可用时应调用的函数,因为像获取位置数据这样的操作可能需要比较长的时间才能完成。没有用户希望在检索位置时浏览器所锁定,也没有开发人员希望它们的程序无限期暂停。successCallback是收到实际位置信息并进行处理的地方。
    errorCallback位置信息请求很可能因为一些不可控因素失败,参数是可选的,不过建议选用。提供一个用于跟用户解释或者提示其重试的函数。

    options对象可以调整html5 geolocation服务的数据收集方式。

    option

     enableHighAccuracy:通知浏览器启用html5服务高精确度模式
     maximunAge:表示浏览器重新计算位置的时间间隔,以ms为单位的值,默认为ns为单位的值,每次请求必须立即计算位置。
     timeout:告诉浏览器计算当前位置所允许的最长时间,如果超过这个时间没有完成计算,就会调用错误处理程序,默认为infinity无限大。

    对于错误编号

    PERMISSION_DENIED:用户选择拒绝浏览器获取其位置信息
    POSITION_UNAVAILABLE:尝试获取用户位置数据,但失败
    TIMEOUT:设置可选的timeout值,会尝试确定用户位置的过程超时。

    coords属性有7个值,包含上面用到的纬度、经度

    1、accuracy 准确角
    2、altitude 海拔高度
    3、altitudeAcuracy 海拔高度的精确度
    4、heading 行进方向
    5、speed 地面的速度

    百度地图结合HTML5 Geolocation API 

     1 <!DOCTYPE HTML>
     2 <html>
     3 <head>
     4 <meta charset='utf-8'>
     5 <title>百度地图</title>
     6 <script type='text/javascript' src='http://api.map.baidu.com/api?v=1.3'></script>
     7 <script type='text/javascript'>
     8 
     9 function getLocation(){
    10   if(navigator.geolocation){
    11     navigator.geolocation.getCurrentPosition(showMap, handleError, {enableHighAccuracy:true, maximumAge:1000});
    12   }else{
    13     alert('您的浏览器不支持使用HTML 5来获取地理位置服务');
    14   }
    15 }
    16 
    17 function showMap(value){
    18   var longitude = value.coords.longitude;
    19   var latitude = value.coords.latitude;
    20   var map = new BMap.Map('map');
    21   var point = new BMap.Point(longitude, latitude);    // 创建点坐标
    22   map.centerAndZoom(point, 15);
    23   var marker = new BMap.Marker(new BMap.Point(longitude, latitude));  // 创建标注
    24   map.addOverlay(marker);              // 将标注添加到地图中
    25 }
    26 
    27 function handleError(value){
    28   switch(value.code){
    29     case 1:
    30       alert('位置服务被拒绝');
    31       break;
    32     case 2:
    33       alert('暂时获取不到位置信息');
    34       break;
    35     case 3:
    36       alert('获取信息超时');
    37       break;
    38     case 4:
    39       alert('未知错误');
    40     break;
    41   }
    42 }
    43 
    44 function init(){
    45   getLocation();
    46 }
    47 
    48 window.onload = init;
    49 
    50 </script>
    51 </head>
    52 
    53 <body>
    54 <div id='map' style='600px;height:600px;'></div>
    55 </body>
    56 </html>
     
  • 相关阅读:
    如何安装配置ulipad
    python链接mysql的代码
    python 模块
    python 查找关键词在百度的排名
    python 类和对象
    python beautifulsoup多线程分析抓取网页
    python 函数关键参数
    python 批量下载文件
    python 语言有哪些特点
    python 类和对象的特点
  • 原文地址:https://www.cnblogs.com/0603ljx/p/4436388.html
Copyright © 2020-2023  润新知