关于百度地图js api的getCurrentPosition定位不准确的解决方法
2016-12-23 22:53
471 查看
很久之前帮大叔解决了一个gps坐标转换为百度地图坐标的问题。今天大叔又给我讲百度地图定位不准。我查了一下api,用了官方给出的这样一组函数。
我自己试的完全不行,和实际地址偏差很大,偏差有几公里,这肯定是不行的。所以我在网上查资料知道了百度地图的定位都是有偏移量的。
当然我最终的解决方案并非通过这个api然后去掉偏移量,我是用另一种方法。
也就是用html5自带的定位。之前我给大叔解决的问题就是把gps坐标转换为百度地图坐标,所以我就想html5的定位获取的是不是gps坐标。
事实证明这是可以的。
也就是说,不使用百度自身提供的api,而使用html5的api,并把得到的结果去用百度的转换坐标的api去转换一下。这话说着听绕口的。
1、调用navigator.geolocation.getCurrentPosition(callback); 函数
2、注册回调函数,在回调函数中调用百度的坐标转换的api,这个api大叔知道,我没有细查,只知道能通过url去请求并注册一个回调,但是BMap提供了一个这样的函数,我这里先假设是convgps(x,y,from,to,callback);
这几个参数是什么意思呢
x:经度
y:纬度
from:要转换的坐标类型,百度官网有1为国际gps坐标,2为国际gps米度坐标,这个可以去官网看,取值范围是1-7
to:要转换成的坐标类型,只能是5或者6,5为百度地图坐标,6为百度地图米度坐标(别问我什么是米度坐标,我不知道...)
callback:回调
当然这里只是假设是这样的。
3、在convgps的回调中注册,使用转换好的经纬度创建一个marker并将地图中心放在这个经纬度上,也就是和前面代码一样的
注意,以下代码请勿直接使用,只是提供一个思路的代码,因为我没有去查那个函数的名字。
1 //创建查询对象 2 var geolocation = new BMap.Geolocation(); 3 4 //调用getCurrentPosition函数 5 geolocation.getCurrentPosition(function (position) { 6 7 //如果查询成功 8 if (this.getStatu() == 'BMAP_STATU_SUCCESS') { 9 10 //根据point对象创建标记遮挡物,并添加到地图中 11 var marker = new BMap.Marker(position.point); 12 map.addOverlay(marker); 13 14 //将地图中心设置为获得的当前位置 15 map.panTo(position.point) 16 } 17 })
我自己试的完全不行,和实际地址偏差很大,偏差有几公里,这肯定是不行的。所以我在网上查资料知道了百度地图的定位都是有偏移量的。
当然我最终的解决方案并非通过这个api然后去掉偏移量,我是用另一种方法。
也就是用html5自带的定位。之前我给大叔解决的问题就是把gps坐标转换为百度地图坐标,所以我就想html5的定位获取的是不是gps坐标。
事实证明这是可以的。
也就是说,不使用百度自身提供的api,而使用html5的api,并把得到的结果去用百度的转换坐标的api去转换一下。这话说着听绕口的。
1、调用navigator.geolocation.getCurrentPosition(callback); 函数
2、注册回调函数,在回调函数中调用百度的坐标转换的api,这个api大叔知道,我没有细查,只知道能通过url去请求并注册一个回调,但是BMap提供了一个这样的函数,我这里先假设是convgps(x,y,from,to,callback);
这几个参数是什么意思呢
x:经度
y:纬度
from:要转换的坐标类型,百度官网有1为国际gps坐标,2为国际gps米度坐标,这个可以去官网看,取值范围是1-7
to:要转换成的坐标类型,只能是5或者6,5为百度地图坐标,6为百度地图米度坐标(别问我什么是米度坐标,我不知道...)
callback:回调
当然这里只是假设是这样的。
3、在convgps的回调中注册,使用转换好的经纬度创建一个marker并将地图中心放在这个经纬度上,也就是和前面代码一样的
注意,以下代码请勿直接使用,只是提供一个思路的代码,因为我没有去查那个函数的名字。
1 navigator.geolocation.getCurrentPosition(function (position) { 2 3 //得到html5定位结果 4 var x = position.coords.longitude; 5 var y = position.coords.latitude; 6 7 //由于html5定位的结果是国际标准gps,所以from=1,to=5 8 //下面的代码并非实际是这样,这里只是提供一个思路 9 BMap.convgps(x, y, 1, 5, function (convRst) { 10 var point = new BMap.Point(convRst.x, convRst.y); 11 12 //这个部分和上面的代码是一样的 13 var marker = new BMap.Marker(point); 14 map.addOverlay(marker); 15 map.panTo(point); 16 }) 17 18 })
相关文章推荐
- 完美解决window.navigator.geolocation.getCurrentPosition,在IOS10系统中无法定位问题
- 完美解决window.navigator.geolocation.getCurrentPosition,在IOS10系统中无法定位问题
- 完美解决window.navigator.geolocation.getCurrentPosition,在IOS10系统中无法定位问题
- 完美解决window.navigator.geolocation.getCurrentPosition,在IOS10系统中无法定位问题
- 解决window.navigator.geolocation.getCurrentPosition在IOS10系统中无法进行地理定位问题 【原创】
- IE6下position:absolute定位错误的bug和解决方法
- 关于HTML页以Get方法向asp.net页面传值乱码的解决
- 【总结】关于MediaPlayer中的getCurrentPosition()和seekTo(int)的总结
- 关于使用super.getHibernateTemplate()中的方法报java.lang.NullPointerException的解决办法
- 关于google maps显示不准确的问题(产生偏移量)解决方法
- 关于"无法定位程序输入点 RtlUnhandledExceptionFilter 于动态链接库"解决方法
- 【总结】关于MediaPlayer中的getCurrentPosition()和seekTo(int)的总结
- Fedore 9 安装vm tools后鼠标定位不准确的解决方法
- 关于解决apt-get 产生404问题的解决方法
- 关于phpcms v9的get标签里面的sql 语句limit无效问题的解决方法
- 关于there is no cource code available for the current的解决方法
- 关于IE中getElementsByClassName不能用的问题解决方法
- 关于相对定位与绝对定位无法冲破的等级的解决方法
- 关于Servlet报错:405 HTTP method GET is not supported by this URL问题解决方法
- 解决关于jquery中$.get()方法总是报“HierarchyRequestError: Node cannot be inserted at the specified point in the hierarchy”错的方法