關於百度地圖js api的getCurrentPosition定位不准確的解決方法


百度地圖官方獲取當前位置

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; 
  } 
}
	

注意事項

轉換的方法不能立即執行需延遲加載

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM