轨迹线优化美化方案

0x00 影响轨迹的因素

坐标采集频率问题：轨迹线是由轨迹点连接组成，而轨迹点一定都是离散的，离散程度取决于坐标获取的频率。频率高，设备耗电，轨迹存储增大，但是轨迹特征明显；频率低，轨迹线特征容易丢失。如何能够比较智能的调整坐标上报频率？

坐标采集保活问题：移动设备普遍具有省电模式、息屏功能等，这些场景均容易导致 GPS 采集程序被系统清除，从而导致坐标在某段时间突然无法采集、信号中断。而互联网 APP 却往往早已被设备添加至白名单（与厂商有合作关系等），并不会有此问题。

轨迹坐标转换问题：GPS 是 WGS84 坐标，北斗是 CGCS2000 坐标，而轨迹展示依托的地图往往是各种不同坐标系的地图，两者直接需要进行坐标转换。而且不同于互联网应用只采用一种地图，只需解决一种坐标类型的转换，城市管理中需要解决的坐标转换具有地图类型多、地图精度不可控（如脱密地图）等问题。而坐标转换的准确度将直接影响轨迹展示的效果。

坐标准确度问题：卫星定位最少要求 4 颗星同时观测（由于其三球定位原理，再加上把时间作为变量，所以至少需要 4 颗星来观测），而在不少情况下，移动设备并不能满足同时接收到 4 颗以上卫星的信号（比如：室内、高层建筑遮挡等），这将导致此时的卫星定位误差很大。如何可以提高卫星定位的准确度？

轨迹坐标去噪问题：坐标准确度问题是一个不可避免的问题，在此情况下，需要一套可以对坐标异常点进行去除的方法，从而保证轨迹展示的效果不受异常点的影响。

轨迹线连接问题：轨迹线的逐点连接必然会导致线和线之间过渡不平滑，并且单纯的轨迹点直连，还容易出现轨迹线 “穿墙” 问题（A 点和 B 点分别在十字路口不同地方，AB 直连将导致线条穿越中间的非路面建筑）。

轨迹播放问题：轨迹天然是动态的，仅仅以轨迹线描述不能真实展现轨迹的时空特征。如何优美的展示轨迹动态，让用户具有看动画片一样的观感？

0x01 优化采集

坐标采集频率优化策略：

系统有设置的默认采集频率，针对人员和车辆是不同的。

当连续多个采集点为静止或相差不大时（在阈值范围内），此时可以将坐标采集频率适当调慢。

当连续多个采集点的距离大于阈值范围时，此时可以将坐标采集频率适当调快。

坐标采集程序保活优化:

保活机制为：常驻通知栏，双进程守护，广播锁屏，自定义锁屏

坐标准确度优化

坐标信号强度对定位准确度影响十分大，比如当设备在室内或者高楼下时，坐标信号是明显减弱的。可采用了如下优化策略：

记录信号强弱作为后续轨迹奇异点（问题点）的筛选条件之一。

当信号弱的超过一定阈值时，切换成百度定位方案。

0x02 拟合

从算法层面上对轨迹点进行优化的策略。依据实施条件不同，展示要求不同，这里从三个不同方向进行轨迹点拟合研究。

1. 基于道路线的路网匹配拟合

顾名思义，本方案必须有道路线数据，其原理为将各轨迹点匹配至与道路垂直距离最近的节点上，并且将前后两点沿道路顺势连接。
优点：轨迹全部在道路上，展示美观。
缺点：依赖于道路数据的完整性，并且展示有失真实。

2. 基于时空聚类的去噪算法

此算法的思路为在尽量不改变轨迹点的特征情况下，通过轨迹的时空聚类，将某些特征相似的点聚在一处，从而减小由于轨迹点打结导致的轨迹杂乱。但是本算法并不仅仅是常规的空间聚类算法，由于轨迹具有天然的时间属性，不考虑轨迹的时间属性进行聚类则会丢失轨迹的许多特征信息。例如，双行道道路，来回分别在不同的行道路上，如果不考虑时间维度，则会出现将双行道上的轨迹点聚类到一个行道上。
优点：解决了轨迹点打结展示问题。
缺点：对于轨迹点之间的连接并没有平滑处理。

3. 基于卡尔曼滤波的轨迹优化方案

卡尔曼滤波（Kalman filtering）一种利用线性系统状态方程，通过系统输入输出观测数据，对系统状态进行最优估计的算法。其在轨迹处理中，可以达到通过预测轨迹点与实际轨迹点之间的偏差来进行轨迹位置的调整，实现轨迹的平滑。
优点：轨迹线变的曲线平滑，更加美观。
缺点：平滑度很难控制，导致轨迹有失真实，轨迹特征变模糊，并且轨迹噪声点对整体平滑效果影响很大。

4. 最终拟合方案

以上方案各有优劣，但是如果能够进行有效的综合，并且再加上其他的数据处理流程，轨迹点的质量将会提升更多。具体描述如下：

通过坐标的准确度参数，去除一部分误差特别大的轨迹点。
通过计算轨迹点速率异常变化，去除一部分 “飞点”。
基于时空聚类算法，进行轨迹点聚合。
通过卡尔曼滤波进行轨迹平滑美化，且控制平滑度过大。
针对车辆轨迹，在存在完好的道路线数据时，采用路网匹配算法。

0x03 美化，动效

平滑动起来的人（车）

静止的人（车）图标无法表示真实的变化，随着位置坐标的获取而跳跃变化的人（车）图标又颇显突兀，如果能实时的、平滑的显示人（车）位置变化将会使用户具有更强的 “参与” 感。以人的展示为例，为实现该目标，设计 16 个方向的人员图标，根据坐标点之间的角度计算来选择不同的人员图标，并且通过计算两点距离和播放速度来计算人员前进时的图标变化，最终实现诸如前进时人手的左右摇摆效果等。

流动的轨迹箭头

轨迹箭头的流动除了可以增加整体轨迹展示的动效，更能够表示出轨迹的方向特征。但是轨迹箭头过于密集，也会影响轨迹的美观。综合设计，当地图缩放到一定级别后，此时出现轨迹箭头流动特效。

类 “滴滴” 的多轨迹展示效果

“滴滴” 这类互联网轨迹展示方案已经越来越被大众所接受，尤其是多车辆（人员）的实时轨迹展示上。通过在轨迹大数据存储、轨迹信息流、前端展示算法的不断研究下，目前展示上基本可与之靠齐，并且也先后得到了实际项目的验证，其中某扬尘项目为监控整个城市 1.6 万辆车 24 小时的实时轨迹。

二三维一体的轨迹展示特效

在三维场景中实现对轨迹的展示，将更加具有视觉的直观性、冲击力。并且借助游戏场景展示的思路，将会让用户有更好的互动感。