我们以android端为案例谈,最初时我直接调用百度地图第三方库,然后直接就定位,这样的话,只可以定位到城市一级,比较伤,无法精确定位,于是就要改变
之后尝试使用html5的地理定位,如此的话,发现只有在开启GPS时,才会获取到定位信息,这样获得的信息是精确的,这样做:
//初始化地图
mui.plusReady(function() {
getInfo();
map = new BMap.Map("allmap");
var point = new BMap.Point(116.331398, 39.897445);
map.centerAndZoom(point, 13);
getGeocode();
})
//进行定位
// 通过定位模块获取位置信息
function getGeocode() {
plus.nativeUI.showWaiting();
plus.geolocation.getCurrentPosition(showLocation, function(e) {
mui.toast("获取定位位置信息失败:" + e.message);
}, {
geocode: true
});
}
处理定位信息:
//处理定位后的信息
function showLocation(r) {
jingDu = r.coords.longitude;
weiDu = r.coords.latitude;
Address = r.addresses;
centerPointer = new BMap.Point(r.coords.longitude,r.coords.latitude);
exchange();
}
这有一点,地图我没有采用应用内置的地图,而是调用的第三方库,百度地图,这样就涉及到坐标转换的问题
可以在百度地图api的实例中可以找到转换的实例
//将GPS坐标转换成百度地图的坐标
function exchange(){
var convertor = new BMap.Convertor();
var pointArr = [];
pointArr.push(centerPointer);
convertor.translate(pointArr,1,5,translateCallback);
}
function translateCallback(data){
if(data.status==0){
var marker = new BMap.Marker(data.points[0]);
map.addOverlay(marker);
map.setCenter(data.points[0]);
plus.nativeUI.closeWaiting();
}
}
目前的坐标系有百度坐标(BD09)、国测局坐标(火星坐标,GCJ02)、和WGS84坐标系
百度地图的坐标是在火星坐标的基础上进行了二次加密