zoukankan      html  css  js  c++  java
  • 轨迹系列14——一条优美的轨迹线的诞生日记

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/

    此篇为跨度两年的轨迹系列文章总结之一。

    1.轨迹,为什么需要“装扮”

           得益于移动设备的普及性,在缺少其他监管手段的情况下,城市管理中基于移动设备实现对人员、车辆的管理是十分行之有效的方法。其中轨迹的管理方案囊括了轨迹里程统计、工作状态监管、实时位置查看、历史轨迹回溯等等,而这一切方案能够真正的行之有效则必须依赖于一条足够“优美”的轨迹线。只有轨迹线“优美”,统计才会更精确、展示才会更直观。

          

           但是想把一条轨迹线处理到足够优美,并不是一件容易的事情,它受到太多太多的外部影响。这里,我直接列出影响轨迹展示效果的主要因子,希望大家能够带着这些问题一起探讨解决思路,了解原来一条优美的轨迹线后面有这么多的故事:

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

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

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

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

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

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

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

       

    2.优化,从坐标采集开始

             在上述的各种轨迹展示影响因子中,GPS采集频率、GPS采集保活、GPS准确度优化均属于GPS获取环节需解决的问题,并且是影响权重最大的问题,以下对此三点的解决做一个简单的描述。

    2.1坐标采集频率优化

            

           如前文所述,坐标采集频率直接关系到轨迹点的密度,理论上轨迹点是越密越好,但是实际中要考虑设备的耗电量、存储的大小和有效值。举如下几个例子,可以更好的理解轨迹采集频率的调整策略:

           a.某监督员在一条笔直的道路上缓行,此时轨迹每隔20秒采一个轨迹点和每隔60秒采一个轨迹点的效果是一样的,并不会对轨迹的展示有很大的影响。

           b.某监督员进入室内办公,此时的场景与笔直路上缓行是一样的。

           c.某监督员缓行时,突然开始跑步,此时轨迹点每隔20秒与每隔60秒采集将有很大区别,因为此时间段内的直线距离会有较大区别,容易出现特征点遗漏。

           基于以上三种情形,坐标采集频率的自动调整方案便可以做一个简单的归纳:

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

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

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

    2.2坐标采集程序保活优化

           我们首先以研究“咕咚运动”的保活机制作为例子来说明:

           (1)当"咕咚"处于停止状态时,一键清理和黑屏状态会被杀死,说明在没有进入运动界面之前,其保活机制没有被启动(即没有使运动界面切换到后台等)。

           (2)当“咕咚”处于运动状态时,一键清理和黑屏状态没有被杀死(滑动清理除外),说明已经启动保活机制:

           a."咕咚"禁止了返回键,以保证运动Activity不被销毁;

           b.不断更新通知栏计时,以保证APP始终在前台,防止被系统回收;

           c."咕咚"被清理后能够自动重启,通知被删除后自动弹出,说明可能有另外一个东西(进程或Service)监听器运动Service(或进程)存活状态,当Service被销毁时,立马将其拉起来;

           d.“咕咚”被强制停止或清理杀死后,再次进入会直接显示运动界面且能够保持杀死之前的运动状态,说明其可能利用配置文件记录了相关状态;

           e.锁屏/解锁后,"咕咚"运动界面会自动弹出,说明其利用了广播机制对锁屏广播进行监听,弹出Activity以保证进程始终在前台;
           总结“咕咚运动”的保活机制为:常驻通知栏,双进程守护,广播锁屏,自定义锁屏。

           同样,我们也分别研究了“悦动力”、“悦动圈”这类运动APP,其保活机制大同小异,所以最终我们将坐标采集程序保活策略以如上分析进行了相关优化。

    2.3坐标准确度优化

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

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

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

    3.拟合,让轨迹点更有质量

           说完坐标采集的系列优化方案,我们接下来一起探讨从算法层面上对轨迹点进行优化的策略。依据实施条件不同,展示要求不同,这里我们先后从三个不同方向进行轨迹点拟合研究。

    3.1 基于道路线的路网匹配拟合

             顾名思义,本方案必须有道路线数据,其原理为将各轨迹点匹配至与道路垂直距离最近的节点上,并且将前后两点沿道路顺势连接。

     

           优点:轨迹全部在道路上,展示美观。

           缺点:依赖于道路数据的完整性,并且展示有失真实。

    3.2 基于时空聚类的去噪算法

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

           优点:解决了轨迹点打结展示问题。

           缺点:对于轨迹点之间的连接并没有平滑处理。

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

           卡尔曼滤波(Kalman filtering)一种利用线性系统状态方程,通过系统输入输出观测数据,对系统状态进行最优估计的算法。其在轨迹处理中,可以达到通过预测轨迹点与实际轨迹点之间的偏差来进行轨迹位置的调整,实现轨迹的平滑。

     

           优点:轨迹线变的曲线平滑,更加美观。

           缺点:平滑度很难控制,导致轨迹有失真实,轨迹特征变模糊,并且轨迹噪声点对整体平滑效果影响很大。

    3.4 最终拟合方案

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

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

     

    4.动效,让轨迹展示具有“观影”感受

    4.1 平滑动起来的人(车)

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

                       

    4.2 流动的轨迹箭头

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

     

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

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

     

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

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

     

                         -----欢迎转载,但保留版权,请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/

                                                                               如果您觉得本文确实帮助了您,可以微信扫一扫,进行小额的打赏和鼓励,谢谢 ^_^

                               

  • 相关阅读:
    网站建设怎样添加设为首页和加入收藏代码
    在WEB项目中调用QQ通讯组件打开QQ聊天界面
    网页引用Font Awesome图标
    jQuery鼠标划入划出
    django框架
    python连接数据库:
    数据库:
    TCP:
    数据库:
    Excel在任务栏中只显示一个窗口的解决办法
  • 原文地址:https://www.cnblogs.com/naaoveGIS/p/11154198.html
Copyright © 2011-2022 走看看