1.前言
最近在做公司一个办公流程的软件,由于公司办公都是在钉钉上,所以大部分功能都是基于小程序平台开发的。后面,有一个员工工作轨迹的需求,钉钉不小程序不支持连续定位功能。因此,公司决定用原生来解决,目前的难点就是轨迹点的纠偏和app进程的保活。
2.定位类型
首先的话是定位点的采集,由于定位类型的不统一,而且误差相差比较大,要想绘制一条准确清晰的轨迹的话就必须充分了解各种定位类型细节
gps
室外或窗边,初次定位需要若干秒锁定等待时间
一般情况下10M内,高楼边和高架下面100M内
芯片实现,系统API提供,开发者直接调用。基站(网络)(三大运营商)
可以打电话的地方
几百米
系统API提供基站ID获取接口,开发者自行维护基站数据库,自行查询推算位置。wifi
有WIFI覆盖的地方
几米到几十米均可能,取决于部署密度。
系统API提供周围WIFI的mac地址获取接口,开发者自行维护mac数据库,自行查询推算位置。
移动热点,公交车上的wifi会造成定位错误蓝牙定位
有iBeacon部署的区域
5-10M左右,取决于部署密度
系统API提供周围蓝牙信标的设备ID获取接口,开发者自行维护ibeacon数据库,自行查询推算位置。注:在基站、WIFI定位能力上,系统定位能力取决于系统自己在这方面投入数据收集推算的能力,这个是参差不齐的。举个简单的例子,百度和高德在中国采集了成百上千个公共场所的室内定位信息,使之能达到米级的室内定位。对于可以公开读取基站、WIFI信息的Android手机系统,国内的百度、高德等地图厂商自行实现了定位SDK,该定位SDK的作用就是通过系统接口读取到原始定位信息,然后借助于各家自行部署维护的数据库,查询到当前扫描到的基站、WIFI的位置,最终计算出更准确的定位结果,通过SDK的接口,返回给开发者。这么做的好处,在于能够让app的定位能力脱离对手机系统的依赖。
3.轨迹绘制
项目里面用的是高德API,我们定时采集轨迹点,然后将定位点和定位类型存储起来,仿照高德猎鹰api,设置采集周期为5s,位置上传周期为30s,由于部分功能的定制,我们并没有使用猎鹰api。绘制轨迹前还需要将轨迹点进行处理,主要包含纠偏和抽稀,这里面包含的涉及到算法就比较高深了,目前是由后端进行处理的。
采集到轨迹点后,我们需要将其绘制为平滑的轨迹,高德api提供PolylineOptions类进行轨迹的绘制