热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

(十五)一条优美的轨迹线的诞生日记

文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http:www.cnblogs.comnaaoveGIS此篇为跨度两年的轨迹系列文章总结之一。1.轨迹,为什么需要“装

文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处: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/

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

                           技术分享图片

 


推荐阅读
  • 本文介绍了多种Eclipse插件,包括XML Schema Infoset Model (XSD)、Graphical Editing Framework (GEF)、Eclipse Modeling Framework (EMF)等,涵盖了从Web开发到图形界面编辑的多个方面。 ... [详细]
  • BeautifulSoup4 是一个功能强大的HTML和XML解析库,它能够帮助开发者轻松地从网页中提取信息。本文将介绍BeautifulSoup4的基本功能、安装方法、与其他解析工具的对比以及简单的使用示例。 ... [详细]
  • 深入解析Android Activity生命周期
    本文详细探讨了Android中Activity的生命周期,通过实例代码和详细的步骤说明,帮助开发者更好地理解和掌握Activity各个阶段的行为。 ... [详细]
  • 本文探讨了 Boost 库中的 Program Options 组件,这是一个强大的工具,用于解析命令行参数和配置文件。文章介绍了如何正确设置和使用该组件,包括处理复杂选项和负数值的方法。 ... [详细]
  • 解决 Pytest 运行时出现 FileNotFoundError 的方法
    在使用 Pytest 进行测试时,可能会遇到 FileNotFoundError 错误,提示无法找到指定的文件或目录。本文将探讨该错误的原因及解决方案。 ... [详细]
  • 本视频详细介绍了如何利用J2EE、JBPM 3.x/4.3、Flex流程设计器、jQuery以及授权认证机制构建高效的企业普及版贝斯OA及工作流管理系统。 ... [详细]
  • 探讨并提供解决方案以应对 'view is not in the window hierarchy' 的错误提示。 ... [详细]
  • 本文深入探讨了HTML5中十五个重要的新特性,为开发者提供了详细的指南。 ... [详细]
  • 帝国cms各数据表有什么用
    CMS教程|帝国CMS帝国cmsCMS教程-帝国CMS精易编程助手源码,ubuntu桥接设置,500错误是tomcat吗,爬虫c原理,php会话包括什么,营销seo关键词优化一般多 ... [详细]
  • 本文介绍了如何使用Workman框架构建一个功能全面的即时通讯系统,该系统不仅支持一对一聊天、群组聊天,还集成了视频会议和实时音视频通话功能,同时提供了红包发送等附加功能。 ... [详细]
  • 本文详细介绍了一种实现PopupWindow全屏显示且能有效隐藏虚拟按键的技术方案,适用于Android开发。此方法经过实际测试,表现良好,兼容性优秀。 ... [详细]
  • 本文介绍了如何使用Maven命令对Spring Boot项目中的子模块进行独立打包,包括依赖树的查看、项目的运行和打包等基本操作。 ... [详细]
  • 深入理解异步多线程编程模型
    现代计算机系统中的CPU通过并行处理提高效率,但所谓的并发处理实际上是一种基于轮询的模拟并行。本文探讨了现代处理器如何通过虚拟化技术实现更高的并发性能,以及在.NET框架中如何有效利用线程和异步编程模式。 ... [详细]
  • HDU1085 捕获本·拉登!
    问题描述众所周知,本·拉登是一位臭名昭著的恐怖分子,他已失踪多年。但最近有报道称,他藏匿在中国杭州!虽然他躲在杭州的一个洞穴中不敢外出,但近年来他因无聊而沉迷于数学问题,并声称如果有人能解出他的题目,他就自首。 ... [详细]
  • SpringBoot新手入门指南
    本文旨在为初次接触SpringBoot的开发者提供一份详细的入门指导,包括如何快速搭建并运行一个简单的SpringBoot应用。通过本文,读者将了解Maven项目的构建、必要的配置文件设置以及基本的应用开发流程。 ... [详细]
author-avatar
137381372_e57647
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有