鹰击长空yuetao.org

8月 6

【原创】html5 navigator.geolocation 获取坐标经纬度对接百度地图不准确的问题 不指定

yuetao , 16:30 , javascript , 评论(0) , 引用(0) , 阅读(313) , Via 本站原创 | |

 使用 navigator.geolocation 拿到的坐标点经纬度时没法直接对接百度地图的,需要调用百度地图的坐标转换接口,生成百度对应的坐标,才能使用

JavaScript 代码复制内容到剪贴板
            
  1. function Location() {};  
  2.             
  3.    
  4.             
  5. Location.prototype.getLocation = function (callback) {  
  6.             
  7.     var options = {  
  8.             
  9.         enableHighAccuracy: true,  
  10.             
  11.         maximumAge: 1000  
  12.             
  13.     };  
  14.             
  15.     this.callback = Object.prototype.toString.call(callback) == "[object Function]" ?  
  16.             
  17.         callback :  
  18.             
  19.     function (address) {  
  20.             
  21.         alert(address.province + address.city);  
  22.             
  23.         console.log("getocation(callbackFunction) 可获得定位信息对象");  
  24.             
  25.     };  
  26.             
  27.     var self = this;  
  28.             
  29.     if (navigator.geolocation) {  
  30.             
  31.         //浏览器支持geolocation  
  32.             
  33.         navigator.geolocation.getCurrentPosition(function (position) {  
  34.             
  35.             //经度  
  36.             
  37.             var longitude = position.coords.longitude;  
  38.             
  39.             //纬度  
  40.             
  41.             var latitude = position.coords.latitude;  
  42.             
  43.             self.loadMapApi(longitude, latitude);  
  44.             
  45.         }, self.onError, options);  
  46.             
  47.     } else {  
  48.             
  49.         //浏览器不支持geolocation  
  50.             
  51.         console.log('浏览器不支持geolocation');  
  52.             
  53.     }  
  54.             
  55. };  
  56.             
  57.   
  58.             
  59. Location.prototype.loadMapApi = function (longitude, latitude) {  
  60.             
  61.     var self = this;  
  62.             
  63.     var point = new BMap.Point(longitude, latitude);  
  64.             
  65.     var gc = new BMap.Geocoder();  
  66.             
  67.     gc.getLocation(point, function (rs) {  
  68.             
  69.         var addComp = rs.addressComponents;  
  70.             
  71.         self.callback(longitude,latitude,addComp);  
  72.             
  73.     });  
  74.             
  75.       
  76.             
  77. };  
  78.             
  79.   
  80.             
  81. Location.prototype.onError = function (error) {  
  82.             
  83.     switch (error.code) {  
  84.             
  85.     case 1:  
  86.             
  87.         console.log("位置服务被拒绝");  
  88.             
  89.         break;  
  90.             
  91.     case 2:  
  92.             
  93.         console.log("暂时获取不到位置信息");  
  94.             
  95.         break;  
  96.             
  97.     case 3:  
  98.             
  99.         console.log("获取信息超时");  
  100.             
  101.         break;  
  102.             
  103.     case 4:  
  104.             
  105.         console.log("未知错误");  
  106.             
  107.         break;  
  108.             
  109.     }  
  110.             
  111. };  
  112.             
  113.   
  114.             
  115. //调用  
  116.             
  117. var local = new Location();  
  118.             
  119.   
  120.             
  121. window.setTimeout(function(){  
  122.             
  123.     //获取原始坐标点  
  124.             
  125.     local.getLocation(function (longitude,latitude,res) {  
  126.             
  127.         //此处就是返回的地理位置信息  
  128.             
  129.         console.log("longitude:"+longitude+" latitude:"+latitude);  
  130.             
  131.   
  132.             
  133.   
  134.             
  135.         var convertor = new BMap.Convertor();  
  136.             
  137.         var pointArr = [];  
  138.             
  139.         pointArr.push(new BMap.Point(longitude,latitude));  
  140.             
  141.   
  142.             
  143.         //原始坐标点经纬度,转化成百度的  
  144.             
  145.         convertor.translate(pointArr, 1, 5, function(data){  
  146.             
  147.             var lat = data.points[0].lat;  //获取到的百度坐标 经度  
  148.             
  149.             var lng = data.points[0].lng;  //获取到的百度坐标 纬度  
  150.             
  151.             console.log(data);  
  152.             
  153.         });  
  154.             
  155.           
  156.             
  157.     });  
  158.             
  159. },2000);  

 

发表评论

昵称

主页

邮箱

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]