09-iOS 模拟定位设计
一、背景:
iOS目前模拟导航依赖gpx文件,这个文件iOS操作系统只支持经纬度的协议,其他的速度、海拔、方向以及他们的精度信息无法支持,所以需要一个方案去祢补这个缺陷。
二、单点模拟方案:
- 设计如下:
原始模拟定位方式:
iOS系统可以识别gpx协议,但是gpx协议里只有时间戳和经纬度可以为iOS系统所识别,这样对于我们路测是有缺陷的,因为我们的匹配模块包括高德sdk偏航判断是否需要依赖速度、方向和水平精度等信息确定的,gpx这样的数据系统拿到后返回app的gps监听者都是-1或者0,不能满足我们自测目的,所以就在系统返回的gpx数据的基础之上增加一个中间件去拦截数据然后对匹配模块依赖的数据进行数据清洗;
中间件原理
App内需要作为系统CLLocationManager的委托者,才可以拿到对应的gps回馈;
利用这个切入口,我们让中间件在app运行时启动时候hook CLLocationManager 的 设置委托的 方法 ,这样中间件拿到所有关心gps变化的对象,同时把自己作为唯一的接受者,这样达到了数据清洗和分发的作用。
三、轨迹回放方案:
- 设计时序图
- UML类图
外部使用:
第一步:引入Source git@github.com:GE-GAO-ZHAO/GGZSpec.git 第二步:pod 'TrajectorySimulation'