您的位置:首页 > 移动开发 > Android开发

百度地图定位,高德地图定位

2016-04-12 20:38 267 查看

Android之百度地图定位,高德地图定位

问题

最近几天我们的客户给我们反应说,app中的百度地图定位有误差,不能准确的定位到实时位置,而用微信里面的定位就能准确的定位到具体门牌号,然后就说是我们的问题,需要处理(因为我们的app对定位精度要求比较高,必须准确到号牌)

思路

[1].刚开始听到这个问题觉得不应该,百度地图不可能有问题,一种分析是SDK版本太老了,核对之后发现是较新的jar

[2].之后同事让我集成一个高德地图的demo,看一看高德地图定位效果如何,集成之后发现高德地图有的时候也会出现位置偏差,偏差还蛮大,于是排除了这种可能

[3].后来在两台手机上定位效果也是不同的,一台有SIM卡,一台没有,发现有卡的手机很多时候都能定位到比较精确的位置(误差范围内),然后调到飞行模式连接wifi,发现也有问题,就想到可能是基站定位取代了GPS定位导致误差

[4].之后就随意看以一下博客,逐渐的查到了误差较大的原因,原因就是在不同的定位条件下,精确度是不同的

查资料

之前集成百度地图,对一些定位知识没有太去关注,原来定位有4中方式:

[1].GPS定位

[2].WIFI定位

[3].基站定位

[4].AGPS定位

定位具体有什么特点我就不做介绍了,相关的博客有很多,有一点强调的就是GPS定位通常要比其他定位要精确,同时GPS定位在室内信号很微弱,几乎不能定位室内

解决

有了上面的了解之后,我们知道GPS不能定位室内,因此在室内走的是其他定位,精确度会差一些(那哥们测试一直是在室内,定位不到门牌号就正常了);找到原因后就和同事商量解决办法,经过一番讨论后,采取了保存最近一次GPS定位的地址,当位置更新时,在回调里面判断这次位置更新是GPS还是其他,如果是GPS,更新地址,否则使用保存的地址(如果用户一直在室内的话,这个误差也解决不了),具体代码如下:

`public void onReceiveLocation(BDLocation location) {

if (latitude != 0 || longitude != 0) {

if (location.getLatitude() - latitude == 0 || location.getLongitude() -longitude == 0) {

// 经纬度没有改变
return;
}
}
StringBuffer sb = new StringBuffer(256);

sb.append("\nlatitude : ");
sb.append(location.getLatitude());// 获得纬度
sb.append("\nlontitude : ");
sb.append(location.getLongitude());// 获得经度
sb.append("\nradius : ");
sb.append(location.getRadius());
latitude = location.getLatitude();
longitude = location.getLongitude();

if (location.getLocType() == BDLocation.TypeGpsLocation) {

// 通过GPS定位
sb.append(location.getAddrStr());// 获得当前地址
sb.append(location.getDirection());// 获得方位
// 记录GPS地址
mGpsAddress = location.getAddrStr();
resultLocationInfo(latitude, longitude, mGpsAddress);

} else if (location.getLocType() == BDLocation.TypeNetWorkLocation) {

// 通过网络连接定位

sb.append(location.getAddrStr());// 获得当前地址
if (mGpsAddress == null) {

// 非GPS
resultLocationInfo(latitude, longitude, location.getAddrStr());
} else {
// GPS传最近一次GPS更新的地址
resultLocationInfo(latitude, longitude, mGpsAddress);
}
}
}`


以上解决是我们自己的解决方案,可能欠妥,如果大家有更加好的解决办法,请指正!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 高德地图 sdk