关于百度地图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密钥时由于网络等原因,打不开或者连接超时,所以 ...
随机推荐
- C# Unity游戏开发——Excel中的数据是如何到游戏中的 (三)
本帖是延续的:C# Unity游戏开发——Excel中的数据是如何到游戏中的 (二) 前几天有点事情所以没有继续更新,今天我们接着说.上个帖子中我们看到已经把Excel数据生成了.bin的文件,不过其 ...
- spring mvc 与 jasper Report集成
http://blog.csdn.net/jia20003/article/details/8471169 注意其中的图片地址说明: 如果有子报表,也会到class文件夹中去寻找: 如果子报表有路径的 ...
- 微信小程序t填坑之旅一(接入)
一.小程序简介 小程序是什么? 首先"程序"这两个字我们不陌生.看看你手机上的各个软件,那就是程序.平时的程序是直接跑在我们原生的操作系统上面的.小程序是间接跑在原生系统上的.因为 ...
- java虚拟机启动参数整理
java启动参数 共分为三类其一是标准参数(-),所有的JVM实现都必须实现这些参数的功能,而且向后兼容:其二是非标准参数(-X),默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足,且不 ...
- 详解googe Chrome浏览器(理论篇)
开篇概述 1详解google Chrome浏览器,这个标题似乎抽象了一些,我想应该把它拆分成如下几个问题,也许会更加理解一些. 问题1:目前开发中,主选浏览器有Google Chrome,IE,Fir ...
- [CSS3] 学习笔记-HTML与CSS简单页面效果实例
一个简单的首页的设计: html文件: <!doctype html> <html> <head> <meta charset="UTF-8&quo ...
- 5种IE hasLayoutt的属性及其值
hasLayout 是Windows Internet Explore 渲染引擎的一个内部组成部分.在 Internet Explore 中,一个元素要么自己对自身内容进行计算大小和组织,要么依赖 ...
- salesforce 零基础学习(六十四)页面初始化时实现DML操作
有的时候我们往往会遇到此种类似的需求:用户在访问某个详细的记录时,需要记录一下什么时候哪个用户访问过此页面,也就是说进入此页面时,需要插入一条记录到表中,表有用户信息,record id,sObjec ...
- 5天2亿活跃用户,QQ“LBS+AR”天降红包活动后台揭密
作者:Dovejbwang,腾讯后台开发工程师,参与“LBS+AR”天降红包项目,其所在“2016春节红包联合项目团队”获得2016公司级业务突破奖. 商业转载请联系腾讯WeTest获得授权,非商业转 ...
- DLL 导出函数
DLL的链接方式分为两种:隐式链接和显式链接 DLL导出的函数 和 导出类在调用时,有些区别,这里暂时不讲,直说简单的导出函数: 隐式链接: #include "stdafx.h" ...