关于百度地图js api的getCurrentPosition定位不准确的解决方法

很久之前帮大叔解决了一个gps坐标转换为百度地图坐标的问题。今天大叔又给我讲百度地图定位不准。我查了一下api,用了官方给出的这样一组函数。

 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 })
时间: 2024-12-05 06:13:18

关于百度地图js api的getCurrentPosition定位不准确的解决方法的相关文章

百度地图JS API移动端,phonegap 自定义覆盖物Click事件无法执行 的 bug 解决方法

当你为自定义覆盖物添加了click事件后,你会发现在移动端是无论如何也触发不了的,这算是一个BUG. 最近我在为我的地图APP开发第二版,在为一个覆盖物添加行为事被困扰到了,自定义覆盖物的click事件竟然无法在iPhone端触发,以及百度地图JS API里面的开源库涉及到自定义覆盖物click事件的均无效. 我为这个BUG烦恼了很久,直到今天,在QQ群里网友(在此要先感谢这位网友mooring)告诉了我解决方法:iPhone上的自定义覆盖物事件默认会触发map的click事件,如果map定义了

百度地图JS API

1.百度地图api的使用 1)申请百度账号和ak 2)引用百度地图API文件 <script src="http://api.map.baidu.com/api?v=2.0&ak=您的密钥"></script> 3)获取当前位置的经纬度 //获取当前位置的经纬度 getCurrentPosition:function(context,params){ //navigator.geolocation部分手机有权限问题 Vue.prototype.$comm

百度地图生成器添加标注后图标不显示的解决方法

作为传统企业网站的联系我们页面里,一般都会加个地图,如果只有文字描述,会显得很LOW. 百度地图生成器(http://api.map.baidu.com/lbsapi/creatmap/)就很好的满足了这一部分用户的诉求,快速简单的给自己网页添加一个加标注的地图,但是美中不足的,现在这个百度地图生成器添加标注后,标注图标不显示,如下图: 解决方法也很简单,只要找到生成的代码中的icon地址: http://app.baidu.com/map/images/us_mk_icon.png 替换成这个

百度地图 JavaScript API极速版 开发体会

前段时间百度地图API推出了 JavaScript API 极速版 1.0 简单看了一下,从产品定位来说真是挺好. 把开发者细分成普通web开发者和移动web开发者.正好用到了手机地图这块决定尝试一下.先看一下百度地图官方对它的定义.     本套百度地图API是专为手机浏览器提供的API,您可使用该套API,在手机页面中展示地图.标注位置.检索poi.查询线路等. 特点: 较同时兼容PC和手机浏览器的JavaScript API大众版而言,该版更适配移动设备,体积更小,加载地图速度更快,更省流

百度地图之地址解析和浏览器定位以及添加可拖拽标注

这里的百度地图demo包括了常见的:地址解析.浏览器定位.IP定位.可拖拽标注 <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <meta name="viewport" content="initial-scale=1.0, user-scalable=no"/> <script type="tex

百度地图的API接口----多地址查询和经纬度

最近看了百度地图的API的接口,正想自己做点小东西,主要是多地址查询和经纬度坐标跟踪, 下面的代码直接另存为html就可以了. <!DOCTYPE html> <html> <head> <meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> <meta http-equiv="Content-Type" c

百度地图JavaScript API使用

最近在完成优达学城前端开发(入门)课程的P4项目中,要求调用google地图进行交互,项目已提供部分js代码和html代码.但在申请google地图API密钥时由于网络等原因,打不开或者连接超时,所以想着地图应该是相似的,百度地图可能也能实现这样的功能,于是就开始了百度地图JavaScript API使用的学习探究了. 简单介绍:百度地图JavaScript API是一套由JavaScript语言编写的应用程序接口,它能够帮助您在网站中构建功能丰富.交互性强的地图应用,包含了构建地图基本功能的各

百度地图JS

若要转载请注明出处 本文为原创 作者:injuer 严禁用于商业用途,仅供学习交流 </pre><pre code_snippet_id="368934" snippet_file_name="blog_20140529_1_6382235" name="code" class="html"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Tra

[Baidu Map]百度地图 JAVASCRIPT API V2.0 大众版 工具类

关键代码: /* *@description 百度地图 JAVASCRIPT API V2.0 大众版 工具类 *@author YanZhiwei *@see http://developer.baidu.com/map/reference/index.php *@email [email protected] */ (function () { map = {}; infoWindow = {}; BmapUtils = { CONSTANT: { DYNAMIC_CITY: "上海&quo