行者app定位不准的问题分析
逝者如斯夫,来到印尼首都4个月了,疫情期间,骑行算是一项相对安全的运动。行者上的数据显示,探索雅加达将近1200公里,YouTube拍了些小短片(搜索zhonghaijing2017@gmail.com可见)。6月份总结了篇博客《行者app适配国外环境解决》,但实际上还遗留一个问题:app实时定位不准,虽然对骑行老鸟影响不大,但体验还是不太友好。有始有终,研究了一下定位不准的问题,分享如下,
如上图,实际的终点和地图上的定位是有偏移的,而在骑行过程中,定位与实际位置,也是一直存在偏差。
1、什么原因会导致定位偏差?
首先查到的是知乎上的一篇文章《app定位和地图的那些坑》,链接https://zhuanlan.zhihu.com/p/22057348,提到了坐标系和精度的问题。百度地图在国内和国外使用不同的坐标系,而不同的定位方法,定位的精度也是不同。
于是对app开始了一系列测试,
a、使用GPS定位,行者APP定位的偏差位置总是固定的;
b、关闭GPS,用手机网络定位,行者APP定位准确;
c、关闭GPS,用手机网络定位,离开约400米,一段时间再次回到住处,位置出现200米以上偏差;
2、百度地图SDK对国内外的坐标使用有什么要求?
参考于百度地图开放平台指南https://lbsyun.baidu.com/index.php?title=androidsdk/guide/coordtran
到这里,问题的定位开始有了方向。
3、寻找验证工具
a、从google map中https://www.google.com.hk/maps/获取实际点和定位点的经纬度
b、利用在线工具https://tool.lu/coordinate/对坐标系经纬度进行转化
c、数据比较
通过前两步的数据得到的web中定位实际点位置,与行者app中的的实际定位位置一致。
4、结论(推测)
如上篇blog提到的,行者app目前只支持国内环境,没有海外版,国外使用需适配。
a、从验证的数据来看,行者调用GPS定位服务时,是先将坐标系GCJ02转换为BD09,再访问百度地图数据,在国内是符合百度地图开放平台规范的;到了国外后,应该不需要再作坐标系转换,直接使用即可;
b、行者优先使用GPS进行高精度定位,当GPS关闭时,或行者没赋予调用GPS权限时,会使用网络进行粗略定位;
b、关闭GPS的情况下,用手机网络进行定位,为什么两次定位到的位置不同,应该是根据手机接入的基站的经纬度来判断位置,接入的基站不同,定位就不同。