zoukankan      html  css  js  c++  java
  • HTML5-新API-geolocation-实例-距离跟踪器

      1 <body onLoad="loadDemo()">
      2     <header>
      3         <h1>oldmeter演示</h1>
      4         <h4>距离跟踪器</h4>
      5     </header>
      6     <section>
      7          <article>
      8              <header>
      9                 <h1>你的位置</h1>
     10                 <p class="info" id="status">地理位置是不是在你的浏览器支持。</p>
     11                 <div class="geostatus">
     12                     <p id="latitude">纬度:</p>
     13                     <p id="longitude">经度:</p>
     14                     <p id="accuracy">精度:</p>
     15                     <p id="altitude">海拔:</p>
     16                     <p id="altitudeAccuracy">海拔精度:</p>
     17                     <p id="heading">行进方向、相对于正北:</p>
     18                     <p id="speed">速度(m/s):</p>
     19                     <p id="timestamp">时间戳:</p>                    
     20                     <p id="currDist">目前距离旅行:</p>                    
     21                     <p id="totalDist">总距离:</p>                    
     22                  </div>
     23             </header>
     24          </article>
     25     </section>
     26     <footer>
     27         <h2>使用HTML5,和你的脚!</h2>
     28     </footer>
     29     <script type="text/javascript">
     30         var totalDistance=0.0;
     31         var lastLat;
     32         var lastLong;
     33         
     34         Number.prototype.toRadians=function(){
     35             return this * Math.PI/180;
     36             }
     37             
     38         function distance(latitude1,longitude1,latitude2,longitude2){
     39             var R=6371;//R是地球半径,单位是km
     40             var deltalatitude=(latitude2-latitude1).toRadians();
     41             var deltaLongitude=(longitude2-longitude1).toRadians();
     42             latitude1=latitude1.toRadians();
     43             latitude2=latitude2.toRadians();
     44             
     45             var a=Math.sin(deltalatitude/2) *
     46                   Math.sin(deltalatitude/2) +
     47                   Math.cos(latitude1) *
     48                   Math.cos(latitude2) *
     49                   Math.sin(deltaLongitude/2) *
     50                   Math.sin(deltaLongitude/2);
     51             var c=2*Math.atan2(Math.sqrt(a),Math.sqrt(1-a));
     52             var d=R*c;
     53             return d;
     54                   
     55         }
     56         
     57         function updateErrorStatus(message){
     58             document.getElementById("status").style.background="papayaWhip";
     59             document.getElementById("status").innerHTML="<strong>Error</strong>:"+message;
     60             
     61         }
     62         
     63         function updateStatus(message){
     64             document.getElementById("status").style.background="paleGreen";
     65             document.getElementById("status").innerHTML=message;
     66             
     67         }
     68         
     69         
     70         function loadDemo(){
     71             //检查浏览器是否支持geolocation
     72             if(navigator.geolocation){
     73                 document.getElementById("status").innerHTML="在你的浏览器支持HTML5 Geolocation";
     74                 navigator.geolocation.watchPosition(updateLocation,handleLocationError,{timeout:10000});
     75             }
     76         }
     77         
     78         
     79         function updateLocation(position){
     80             
     81             var latitude=position.coords.latitude;//纬度
     82             var longitude=position.coords.longitude;//经度
     83             var accuracy=position.coords.accuracy;//精度(准确度)单位米
     84             var altitude=position.coords.altitude;//海拔
     85             var altitudeAccuracy=position.coords.altitudeAccuracy;//海拔精度 单位米
     86             var heading=position.coords.heading;//行进方向、相对于正北
     87             var speed=position.coords.speed;//速度m/s
     88             var timestamp=position.timestamp;//时间戳
     89             
     90             document.getElementById("latitude").innerHTML="北纬度:"+latitude;
     91             document.getElementById("longitude").innerHTML="东经度:"+longitude;
     92             document.getElementById("accuracy").innerHTML="精度:"+accuracy+"";
     93             document.getElementById("altitude").innerHTML="海拔:"+altitude+"";
     94             document.getElementById("altitudeAccuracy").innerHTML="海拔精度:"+altitudeAccuracy;
     95             document.getElementById("heading").innerHTML="行进方向:"+heading;
     96             document.getElementById("speed").innerHTML="速度:"+speed+"";
     97             document.getElementById("timestamp").innerHTML="时间戳:"+timestamp;
     98             
     99             //合理性检查...如果accuracy的值太大就不要计算距离了
    100             if(accuracy>=30000){
    101                 
    102                 updateStatus("需要更精确的值来计算距离");
    103                 return;
    104             }
    105             
    106 
    107             if((lastLat !=null)&&(lastLong !=null)){
    108                 var currentDistance =distance(latitude,longitude,lastLat,lastLong);
    109                 
    110                 document.getElementById("currDist").innerHTML="目前距离旅行"+currentDistance.toFixed(2)+"km";
    111                 totalDistance +=currentDistance;
    112                 document.getElementById("totalDist").innerHTML="总距离"+currentDistance.toFixed(2)+"km";
    113                 
    114                 updateStatus("位置成功更新。");
    115                 lastLong=longitude;
    116             }
    117         }
    118         
    119         //错误处理
    120         function handleLocationError(error){
    121             switch(error.code){
    122                 case 0:
    123                     updateErrorStatus("有一个错误在获取你的位置:错误信息"+error.message);
    124                 break;
    125                 case 1:
    126                     updateErrorStatus("用户选择不分享他或她的位置。");
    127                 break;
    128                 case 2:
    129                     updateErrorStatus("浏览器无法确定自己的位置,错误信息"+error.message);
    130                 break;
    131                 case 3:
    132                     updateErrorStatus("在检索位置之前,浏览器超时。");
    133                 break;
    134             }
    135         }
    136     </script>
    137 </body>
  • 相关阅读:
    [并发编程] 进程、线程
    100. 相同的树
    Python 问题集
    this关键字在函数中的应用
    去除列表右边框
    JS——作用域
    javascript——值传递!!
    null和undefined的区别?
    浏览器内核——四大主流
    http常用状态码
  • 原文地址:https://www.cnblogs.com/wujindong/p/5225781.html
Copyright © 2011-2022 走看看