1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 百度地图web API定位不准 定位偏移问题处理

百度地图web API定位不准 定位偏移问题处理

时间:2020-07-06 13:25:13

相关推荐

百度地图web API定位不准 定位偏移问题处理

百度地图浏览器API 获取GPS定位是根据调用浏览器核心获取GPS,部分手机型号定位不准,主要是因为部分手机采用的是GOOGLE GPS坐标格式、部分手机用的是原生坐标格式

这两种格式百度地图无法判断,默认是按照原生坐标格式,进行转换成百度地图的坐标格式,而后在进行展示。废话不多说了,贴代码。

解决问题:

根据代码navigator.geolocation.getCurrentPosition获取浏览器坐标地址,然后再判断坐标格式、再通过格式进行转换。

var type3 = [550, 30];//设定 google gps格式转换

var transTypesParam = "";

function getLocation(){

var options = {

enableHighAccuracy: true,

timeout: 5000,

maximumAge: 0

};

if (navigator.geolocation){ //用浏览器获取坐标地址

navigator.geolocation.getCurrentPosition(showPosition,showError,options);

}else{

alert("浏览器不支持地理定位。");

}

}

//获取浏览器GPS成功

function showPosition(position){

var x = position.coords.longitude; //经度

var y = position.coords.latitude;//纬度

transTypesParam = getTransType(position.coords.accuracy);//该方法很重要,用来判断手机定位格式,方法在下方

if($("#testInfo") != null && $("#testInfo").length >0) {

$("#testInfo").html("accuracy : " + position.coords.accuracy + "x : " + x + " y : " + y);

}

var ggPoint = new BMap.Point(x,y);

showMap(ggPoint, true);//显示地图坐标

}

//获取失败,失败后用百度地图自带的方法,但是定位会不准

function showError(error){

var geolocation = new BMap.Geolocation();

geolocation.getCurrentPosition(function(r){

if(this.getStatus() == BMAP_STATUS_SUCCESS){

showMap(r.point, false);

}

else {

alert('定位失败:'+this.getStatus());

}

},{enableHighAccuracy: true})

if($("#testInfo") != null && $("#testInfo").length >0) {

switch(error.code)

{

case error.PERMISSION_DENIED:

$("#testInfo").html(error.code + "User denied the request for Geolocation.");

break;

case error.POSITION_UNAVAILABLE:

$("#testInfo").html(error.code + "Location information is unavailable.");

break;

case error.TIMEOUT:

$("#testInfo").html(error.code + "The request to get user location timed out.");

break;

case error.UNKNOWN_ERROR:

$("#testInfo").html(error.code + "An unknown error occurred.");

break;

}

}

}

function getTransType(accuracy) {

if(window.localStorage){

var transType = localStorage.getItem("xdlcfwapp_transType");

if(transType != null && transType != "") {

return transType;

}

}

for(var i=0; i<type3.length ; i++) {

if(type3[i] == accuracy) {

localStorage.setItem("xdlcfwapp_transType", 3);

return 3;

}

}

localStorage.setItem("xdlcfwapp_transType", 1);

return 1;

};

var bm = null;

function showMap(ggPoint,isTrans) {

// 百度地图API功能

bm = new BMap.Map("container");

bm.centerAndZoom(ggPoint, 15);

bm.enableScrollWheelZoom(true);

if(isTrans) {

bm.addControl(new BMap.NavigationControl());

//坐标转换完之后的回调函数

translateCallback = function (data){

if(data.status === 0) {

showPositionIcon(data.points[0]);

queryMarkers();

}

}

setTimeout(function(){

var convertor = new BMap.Convertor();

var pointArr = [];

pointArr.push(ggPoint);

convertor.translate(pointArr, transTypesParam, 5, translateCallback)

}, 1000);

} else {

showPositionIcon(ggPoint);

queryMarkers();

}

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。