请按照如下步骤排查你的代码:确保你的运行环境正常(直接使用百度地图看定位是否准确)以及代码没有基本逻辑错误
使用百度坐标拾取器拾取你的目标位置,同时输出你代码里获取的坐标,两相比较排查错误
考虑使用BMap.Convertor()进行坐标转换(参见下文第一种方式)
下面是关于这个问题的一些延伸
设备获取坐标转换到map后不准确的原因:首先由于国家的保密政策,真实地理坐标是无法获取的,你所能得到的坐标都是经过加密插件(国家要求)出来的,国内的这套加密后的坐标系统被称为火星坐标系
然后我们需要明白的是,这个火星坐标在调用第三方地图进行绘制的时候是需要进行坐标转换的,这是因为不同的地图服务提供方有着其自己的坐标解析方式甚至是自己的坐标系,所以通过GPS设备获取的坐标需要经过所使用地图服务的转换才能正确定位
如此我们就能得到解决思路:第一种方式为调用浏览器自身接口(NavigatorGeolocation.geolocation)后,再调用第三方map服务(百度地图等)提供的转换接口Convertor()转换坐标,最后进行绘制
第二种方式为使用第三方map服务提供的经过封装的定位API,一般都能做到获取位置后直接进行绘制(注意需要设置偏移量进行偏移校准,官网示例都有的)
相关案例关键代码:
我一般在项目里使用高德地图和百度地图,以此为例:第一种方式+百度地图:
//绘制
initBMap(BMap,position) {
let coords = position.coords;
let ggPoint = new BMap.Point(coords.longitude,coords.la