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

时间:2021-06-03 10:55:11

大学毕业,到进入这个行业也已经有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,根本进不去任何的回调函数,害的我对代码产生了质疑。