烦烦烦,难难难,一通乱干,回头看,怎生合欢啊~
所以在此劝大家,别一颗树上吊死,多试试旁边那些颗。。。。
进入主题:
应用百度地图javascript API本质还是调用的浏览器自身的geolocation进行封装实现的,也就是说如果原本不能wifi+基站定位,用百度、高德的javascript api的效果是一样的。
所以,只能求助咱们伟大的H5api 了。果然,泱泱H5没令我失望,话不多说,呈上代码…
// 扩展API加载完毕后调用onPlusReady回调函数
document.addEventListener('plusready', onPlusReady, false);
// 扩展API加载完毕,现在可以正常调用扩展API
function onPlusReady() {
plus.navigator.setStatusBarStyle('dark');
mui.init();
var positions = {
lat: 0,
lng: 0
}
plus.geolocation.getCurrentPosition(function(p) {
positions.lat = p.coords.latitude
positions.lng = p.coords.longitude
localStorage.setItem("current_position", JSON.stringify(positions))
localStorage.setItem("current_address", p.addresses)
localStorage.setItem("current_city", p.address.city)
}, function(e) {
alert('Geolocation error: ' + e.message);
});
这样就获取到了当前位置的所有信息了(省,市,纬度…)
因为此处需配合百度地图,所有此处获取的定位标记点在百度地图中是存在些许偏差的,所有我们需要用它的地址解析百度地图的定位:
// 开启SDK辅助定位
setTimeout(function(){
let crpt = JSON.parse(localStorage.getItem("current_position"))
point = new BMap.Point(crpt.lng, crpt.lat);
var myGeo = new BMap.Geocoder();
// 将地址解析结果显示在地图上,并调整地图视野
myGeo.getPoint(localStorage.getItem("current_address"), function(point) {
if(point) {
var mk = new BMap.Marker(point);
map.addOverlay(mk);
localStorage.setItem("current_position", JSON.stringify(point))
map.panTo(point);
//点击回到当前位置
mui('.mui-content').on('tap', '.dingwei', function() {
map.panTo(point);
})
} else {
alert("获取定位失败")
}
}, localStorage.getItem("current_city"));
},5000)
因为百度地图加载存在异步,所以让其加载慢一点,慢一点…
这样的话,我们伟大的H5就解决我的所需了啊!!!!
题外话:各位还在mui阶段的孩子,我建议尽早专uniapp,因为这货真的坑!!!!