热门标签 | 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/

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

                           技术分享图片

 


推荐阅读
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • 本文内容为asp.net微信公众平台开发的目录汇总,包括数据库设计、多层架构框架搭建和入口实现、微信消息封装及反射赋值、关注事件、用户记录、回复文本消息、图文消息、服务搭建(接入)、自定义菜单等。同时提供了示例代码和相关的后台管理功能。内容涵盖了多个方面,适合综合运用。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文讲述了作者通过点火测试男友的性格和承受能力,以考验婚姻问题。作者故意不安慰男友并再次点火,观察他的反应。这个行为是善意的玩人,旨在了解男友的性格和避免婚姻问题。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
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社区 版权所有