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

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);
            }
        }
    }`

以上解决是我们自己的解决方案,可能欠妥,如果大家有更加好的解决办法,请指正!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值