220  
查询码:00000398
关于百度地图api的getCurrentPosition定位不准确的解决方法
作者: 陈婉 于 2021年01月19日 发布在分类 / 人防组 / 人防前端 下,并于 2021年01月19日 编辑

百度地图官方获取当前位置


var geolocation = new BMap.Geolocation();
geolocation.getCurrentPosition(function(r) {
  if (this.getStatus() == BMAP_STATUS_SUCCESS) {
    //位置经纬度
    nowPointLng = r.point.lng;
    nowPointLat = r.point.lat;
    point = new BMap.Point(r.point.lng, r.point.lat);
      ......
  } else {
     alert('failed' + this.getStatus());
  }
}, {
  enableHighAccuracy: true
})        


解决方法

使用H5的api获取GPS坐标,把得到的结果用百度的转换坐标的api去转换一下

代码

getLocation();	
// H5获取当前位置
function getLocation(){ 
  if (navigator.geolocation){ 
    navigator.geolocation.getCurrentPosition(showPosition,showError); 
  }else{ 
    alert("浏览器不支持地理定位。"); 
  } 
}
// 获取用户经纬度
function showPosition(position){
  //GPS经纬度
  let x = position.coords.latitude;
  let y = position.coords.longitude;
  var gpsPoint = new BMap.Point(y, x);

  setTimeout(function(){
    var convertor = new BMap.Convertor();
    var pointArr = [];
    pointArr.push(gpsPoint);
    convertor.translate(pointArr, 1, 5, translateCallback)
  }, 1000); 
}
// 将GPD经纬度转为百度地图经纬度
function translateCallback(data){
  point = data.points[0];
  nowPointLng = data.points[0].lng;
  nowPointLat = data.points[0].lat;
  initMap();
}
// 报错信息
function showError(error){ 
  switch(error.code) { 
    case error.PERMISSION_DENIED: 
      alert("定位失败,用户拒绝请求地理定位"); 
      break; 
    case error.POSITION_UNAVAILABLE: 
      alert("定位失败,位置信息是不可用"); 
      break; 
    case error.TIMEOUT: 
      alert("定位失败,请求获取用户位置超时"); 
      break; 
    case error.UNKNOWN_ERROR: 
      alert("定位失败,定位系统失效"); 
      break; 
  } 
}
	

注意事项

转换的方法不能立即执行需延迟加载

 



 推荐知识

 历史版本

修改日期 修改人 备注
2021-01-19 11:41:10[当前版本] 陈婉 1.2
2021-01-19 11:40:34 陈婉 1.1
2021-01-19 11:39:47 陈婉 1.0

  目录
    知识分享平台 -V 4.8.7 -wcp