您的位置:首页 > Web前端 > HTML5

关于HTML5 地理位置geolocation API 的一些事

2016-01-01 12:39 495 查看
大学毕业,到进入这个行业也已经有5个多月了,接触HTML5 Webapp开发也有5个多月了,趁着周末写一些关于在开发过程中使用HTML5 Geolocation API的一些心得。

一、浏览器支持

  Internet Explorer 9+, Firefox, Chrome, Safari 和 Opera 支持Geolocation(地理定位).

   移动端:Android 2.0+,iPhone 3.0+,Opera Mobile 10.1+,Symbian,Blackberry OS 6,Maemo

  这是我入行大半年感觉最为头疼的,各个不同版本浏览器的兼容性。

二、getCurrentPosition(获取当前位置的GPS信息)

  语法:window.navigator.getCurrentPosition(successfulCallback,failCallback,options)

     successfulCallback : 成功获取到GPS定位信息之后的回调函数;

               返回一个对象position,包含coords.latitude(纬度),coords.longitude(经度),以及accuracy 属性

failCallback : 获取GPS失败之后的回调函数;

           返回一个对象:PERMISSION_DENIED(用户拒绝对获取地理位置的请求);

                   POSITION_UNAVAILABLE(位置信息是不可用的)

                   TIMEOUT(请求用户地理位置超时);

                   UNKNOWN_ERROR(未知错误)

     options : 这是一个可选参数;

          enableHighAccuracy: 是否要求高精度的地理位置信息

          timeout:对地理位置信息的获取操作做一个超时限制(单位为毫秒),如果在该时间内未获取到地理位置信息,则返回错误

         maximumAge: 对地理位置进行缓存的有效时间(单位为毫秒) ;例如缓存事件为2min 那么在9点中获取的GPS信息,在9:01再次获取时会返回9点获取的GPS信息;

  Demo代码如下:

    function getPosition(){

       //判断浏览器是否支持HTML5 定位

      if(window.navigator.geolocation){

        navigator.geolocation.getCurrentPosition(successfulCallback,failCallback,options)

      }else{

         alert("你的浏览器不能使用HTML5定位")

       }

     }

    function successfulCallback(position){

      var latitude = position.coords.latitude;

      var longitude = position.coords.longitude;

    }

    function failCallback(error){

      var text ;

      switch(error.code){

        case error.PERMISSION_DENIED:

        text ="用户拒绝对获取地理位置的请求。";

         break;
       case error.POSITION_UNAVAILABLE:

         text ="位置信息是不可用的。";

        break;

       case error.TIMEOUT:

        text ="请求用户地理位置超时。";

         break;

       case error.UNKNOWN_ERROR:

         text ="未知错误。";

        break;
       }

      }

    }

三、watchPosition (跟踪用户不断的获取GPS),clearWatch(解除跟踪)

  语法:var watchID = window.navigator.watchPosition(successfulCallback);

     window.navigator.geolocation.clearWatch(watchID);

    

四、小结

  使用HTML5 geolocation API 并且结合了百度地图 \Google地图\高德地图也做了不少的开发,其中遇到了一个最坑爹的问题,就是一台测试手机的GPS获取超级慢,有的时候还能获取失败,但是

  在使用getCurrentPosition方法的时候一开始并没有在options中指定timeout ,然后导致了手机一直在获取GPS,根本进不去任何的回调函数,害的我对代码产生了质疑。

  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: