前段时间公司上马了一个Android项目,其中用到了百度地图的定位SDK(V 3.1),上线后有用户反馈来说定位的位置不准确(我们展示给用户的地址是具体的街道地址,原来是直接使用的百度地图 SDK,需要先获得坐标,然后调用相关接口反解到地址,现在有了单独的定位SDK就很方便,只需设置 LocationClientOption.setAddrType("all") 就可以一并返回地址信息),于是找了两部手机进行了一下测试(均是通过wifi接入网络,并且手机里面没有sim卡),结果发现确实和自己所在的位置有较大的出入(大概有2km左右的误差),本来以为是程序的问题,但奇怪的是使用Android 百度地图官方App居然也是定位到那个有偏差的位置,真是蛋疼。
后来无意中拿了同事的一部手机拿来测试,发现在这部手机上,我们的应用和百度地图的定位居然都是准确的(在合理的误差范围内),通过反复对比,发现唯一的区别就是这部手机里面是有sim卡的,所以就考虑到可能是基站定位的结果取代了wifi定位(因为我们公司是在大楼内,所以GPS定位起不了作用,如果GPS可用的话也不会出现这种定位偏差的问题,因为GPS的定位优先级最高),于是将这部手机中的sim卡取出,只是采用wifi定位,果然发现定位结果和其它两部一样的,都是定位到了那个有偏差的问题, 由此确定了问题的根源。
于是在程序里面进行了如下处理:对于通过wifi定位的用户提示可能会出现定位的偏差。
这里还有一点需要说明:并不是所有通过wifi接入的设备都存在定位偏差较大的问题,像苹果的IPod touch,本身是没有GPS模块的,只能通过wifi定位,但结果还是很准确的,这应该与wifi热点位置数据库有关(有可能是苹果自定通过匿名收集用户位置信息获取到的数据,所以比较精确,但百度可能就会有偏差),相关问题可以参考一下wifi的定位原理