关于百度地图js api的getCurrentPosition定位不准确的解决方法
很久之前帮大叔解决了一个gps坐标转换为百度地图坐标的问题。今天大叔又给我讲百度地图定位不准。我查了一下api,用了官方给出的这样一组函数。
//创建查询对象
var geolocation = new BMap.Geolocation(); //调用getCurrentPosition函数
geolocation.getCurrentPosition(function (position) { //如果查询成功
if (this.getStatu() == 'BMAP_STATU_SUCCESS') { //根据point对象创建标记遮挡物,并添加到地图中
var marker = new BMap.Marker(position.point);
map.addOverlay(marker); //将地图中心设置为获得的当前位置
map.panTo(position.point)
}
})
我自己试的完全不行,和实际地址偏差很大,偏差有几公里,这肯定是不行的。所以我在网上查资料知道了百度地图的定位都是有偏移量的。
当然我最终的解决方案并非通过这个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并将地图中心放在这个经纬度上,也就是和前面代码一样的
注意,以下代码请勿直接使用,只是提供一个思路的代码,因为我没有去查那个函数的名字。
navigator.geolocation.getCurrentPosition(function (position) { //得到html5定位结果
var x = position.coords.longitude;
var y = position.coords.latitude; //由于html5定位的结果是国际标准gps,所以from=1,to=5
//下面的代码并非实际是这样,这里只是提供一个思路
BMap.convgps(x, y, 1, 5, function (convRst) {
var point = new BMap.Point(convRst.x, convRst.y); //这个部分和上面的代码是一样的
var marker = new BMap.Marker(point);
map.addOverlay(marker);
map.panTo(point);
}) })
关于百度地图js api的getCurrentPosition定位不准确的解决方法的更多相关文章
- 百度地图 JS API开发Demo01
百度地图DEMO <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http: ...
- 百度地图JS API不能使用position:fixed
用于放置百度地图的dom元素及其任何一级父元素设置position:fixed属性时,js会报如下错误: Uncaught TypeError: Cannot read property 'offse ...
- 百度地图 js api 实现 line 居中显示
项目中有个需求需要在百度地图的中心显示画的线,以前用过mapPanto这个方法,传入坐标就可以将地图平移到这个坐标,不过不知道如何获取线的中心点,看了别人的代码,有以下两个函数可以实现这个功能 get ...
- 高德地图 JS API - 根据地名实现标记定位
德地图 JS API 使用前的准备工作请参考官方网站说明: https://lbs.amap.com/api/javascript-api/guide/abc/prepare 根据地名实现地图标记定位 ...
- 百度地图js lite api 支持点聚合
百度地图lite api 是专门为h5 绘制海量点设计的,但是偏偏忽略掉了点聚合的需求,所以需要自己动手,做一次二次改造. 我们知道点聚合需要引入开源库: MarkerClusterer: http ...
- 【百度地图JavaScript API】手机端浏览器定位的实现
[百度地图JavaScript API]手机端浏览器定位的实现 https://blog.csdn.net/xiao190128/article/details/72579476
- 如何结合自己本地数据库,使用【百度地图】API
如何结合自己本地数据库,使用[百度地图]API百度地图使用越来越多,官网上的示例数据都是写死的,实际上我们的开发中的数据都是从数据库中取出来的,最近看了很多大神的文章,结合自己本地数据库使用百度地图A ...
- Android 系统api实现定位及使用百度提供的api来实现定位
目前在国内使用定位的方法主要是 1. Android系统提供的 LocationManager locationManager = (LocationManager) getSystemService ...
- 百度地图JavaScript API使用
最近在完成优达学城前端开发(入门)课程的P4项目中,要求调用google地图进行交互,项目已提供部分js代码和html代码.但在申请google地图API密钥时由于网络等原因,打不开或者连接超时,所以 ...
随机推荐
- Flex移动皮肤开发(二)
范例文件 mobile-skinning-part2.zip 在这个讨论创建 Flex 移动 skin 的系列的 第 1 部分 中,我讨论了 Flex 团队在 Mobile 主题中所做的性能优化的原理 ...
- 如何从本地把项目上传到github&&如何把github项目通过clone复制下来
一.第一步---注册一个Github账号 首先要在GitHub上创建一个帐号,可以去官方网站注册一个账号. 二.git安装 下载地址:http://msysgit.github.io/ 二.第二步-- ...
- JS可维护性代码
最近在看一本Js的书名叫“Javascript高级程序设计”在里面学到了很多东西,是一本不错的书,非常值得一看. 解耦css/javascript element.style.color=" ...
- ubuntu开机自动关闭独显,使用集成显卡
我的本子是联想y470p-ise,因为是有双显卡,而ubuntu在开机后,双显卡默认是同时工作,会产生巨大的发热,导致很不爽.而且在ubuntu下基本我也不用独显,所以有开机关闭独显的需求. ubun ...
- 实现一个类 Vue 的 MVVM 框架
Vue 一个 MVVM 框架.一个响应式的组件系统,通过把页面抽象成一个个组件来增加复用性.降低复杂性 主要特色就是数据操纵视图变化,一旦数据变化自动更新所有关联组件~ 所以它的一大特性就是一个数据响 ...
- Java偏向锁实现原理(Biased Locking)
http://kenwublog.com/theory-of-java-biased-locking 阅读本文的读者,需要对Java轻量级锁有一定的了解,知道lock record, mark wor ...
- 你不知道的getComputedStyle
你不知道的getComputedStyle jQuery的css()的底层实现就用到了getComputedStyle这个方法,也许我们用到的很少,但是不得不说这时一个非常强大的函数,下面让我们一探究 ...
- ubuntu下配置Apache
ubuntu下配置Apache Apache的默认文档根目录是在Ubuntu上的/var/www目录 配置文件是/ etc/apache2/apache2.conf配置存储在的子目录在/etc/apa ...
- Docker 1.13 管理命令
1.12 CLI 的问题 Docker1.12 命令行接口(CLI)有40多个顶级命令,这些命令存在以下问题: 没有归类组织,这让docker 新手很难学习: 有些命令没有提供足够的上下文环境,以至于 ...
- vue.js学习第一节
<div id="app" class="app"> <p>{{ message }}</p> <p>{{ in ...