html5定位-HTML5+百度地图,获得精准定位

昨天用HBuilder封装MUI做了一个混合开发APP。 遇到问题:真机测试可以获取设备位置,但是打包成APP后获取不到。 那么……(来自百度

首先介绍一下百度地图的两个socket文件。

 

定位html元素_html5定位_定位html标签

定位html标签_定位html元素_html5定位

其次html5定位,JS部分代码。 HTML5获取位置需要一定的时间,所以下面调用百度地图传入经纬度,并添加一个定时器,5秒后调用百度地图。

定位html元素_html5定位_定位html标签

var map = new BMap.Map("allmap");  
var longitude, latitude;  
navigator.geolocation.getCurrentPosition(function (position) {  
    //获取经纬度
    longitude = position.coords.longitude;  
    latitude = position.coords.latitude;  
});  
setTimeout(function () {  
    //调用百度接口
    var gpsPoint = new BMap.Point(longitude, latitude);  
    BMap.Convertor.translate(gpsPoint, 0, function (point) {  
	var geoc = new BMap.Geocoder();  
	geoc.getLocation(point, function (rs) {  
	    var addComp = rs.surroundingPois[0].address;  
            alert(addComp.province + ", " + addComp.city + ", " + addComp.district + ", " + addComp.street + ", " + addComp.streetNumber);  
	    alert(JSON.stringify(addComp));
            console.log(JSON.stringify(addComp));
	});  
    });  
}, 5000);

定位html标签_html5定位_定位html元素

补充:以上方法,华为/iphone测试没问题html5定位,定位准确。 不过,在用真机小米4测试时,出现了兼容性问题。 无法获取经纬度,返回undefined。 于是,两个前端朋友一起帮我解决了这个问题。 折腾了半夜,小米真是有毒啊~~

html5定位_定位html标签_定位html元素

解决办法如下(仍然需要上面介绍的两个JS文件):

//调用百度接口  
var geolocation = new BMap.Geolocation();
geolocation.getCurrentPosition(function(r) {
    if (this.getStatus() == BMAP_STATUS_SUCCESS) {
        var myGeo = new BMap.Geocoder();
    	myGeo.getLocation(new BMap.Point(r.point.lng, r.point.lat), function(rs) {
//  	    打印返回值
//  	    console.log(JSON.stringify(rs)); 
	    if(rs.surroundingPois.length >0){
//		我们只取了其中一个位置信息
		dwaddr = rs.address + rs.surroundingPois[0].title;
	    }else{
		dwaddr = rs.address;
	    }
    	});
    }
});	

最终,虽然解决了红米无法获取位置信息的问题,但是获取的位置并不准确。 例如:实际位置在杭州市滨江区,但小米位置返回结果却在江干区。 相差甚远~目前以我的能力还无法解决这个问题。