态势标绘系统设计分析

2012-07-31 10:28杨咏建祝胜强
无线电通信技术 2012年1期
关键词:演播序列化态势

杨咏建,祝胜强

(河北远东哈里斯通信有限公司,河北石家庄050035)

0 引言

态势标绘系统广泛应用于电力、通信和应急等多个行业和领域。一般的地理信息系统中都含有态势标绘功能,它可以用形象生动的矢量符号描述各种业务对象,表示各种资源,还可以动态渲染业务进度和流程。一个性能比较好的态势标绘系统要求能支持大批量矢量符号的集中渲染重绘,不能延迟闪烁,图像不能失真,同时还应绘制各种业务的态势图,支持流畅的态势演播功能。目前一般的标绘系统都很少研究大批量矢量符号渲染性能,一般也没有采用视频方式来表现态势演播功能,根据这2个主要的业务需求,重新设计了态势标绘系统。

1 标绘系统总体设计

态势标绘系统是以地理信息系统为平台,使用点、线、面符号和其他一些矢量符号,标绘各种对象,动态描述各种资源信息。在基本态势标绘系统之上优化了海量矢量符号的显示效果,并提出视频形式的态势演播系统。

1.1 总体需求

系统大体分为2个部分,资源标绘子系统和态势演播子系统,资源标绘子系统主要实现矢量符号在地图上的标绘,主要包含添加、删除、修改、添加标注、修改大小以及颜色等显示属性,还要支持矢量符号的放大、缩小、旋转以及拖动等效果。态势演播子系统是为了满足应急处置时的各种态势图的动态展现而设计的,主要功能包括态势录制、态势播放、停止、暂停以及保存态势文件、打开态势文件、快进和快退等,其中还包括地图的一系列操作,比如放大、缩小及漫游等操作,从而产生一种流畅的视频播放效果。

1.2 总体设计

资源标绘子系统综合考虑了资源管理和标绘系统的内在联系,用矢量符号表示一类资源,以经纬度为关联点,采用数据库技术存储资源信息,以地图上的单击,移动等鼠标操作来同步实现资源的添加、修改及删除等操作,同时合理规划数据结构,使资源的维护支持动态添加,资源的属性也可以自动添加,以矢量符号标绘技术直观地在地图上展示资源。

态势演播吸取了传统态势图的经验,将一张张态势图加上时间点连贯起来,使其变成和实际应急时间相关联的动态态势,这样原来的态势图就变成态势视频了,更生动,更符合调度实际,更具有时效性。将传统的态势图变为态势视频形式,需要在标绘过程中录制一帧帧的态势图,冠以时间,录制完毕后保存。然后在回放时,再从文件中读取,按照时间播放每一帧,这样就可以实现态势演播效果了。

2 需要解决的问题

实际实现过程中必须解决好以下2个问题,标绘符号闪烁失真问题和态势文件太大不易传输的问题。

2.1 常规矢量标绘的延迟、闪烁问题

在一般指挥调度系统中,态势标绘作为基础功能在应急指挥调度中起着重要作用,尤其是在资源管理标绘系统中,各种单位、物资、行动路线和集结区域,经常布满整个地图,在漫游地图或者放大、缩小地图等操作时地图上的矢量符号经常会发生延迟、闪烁等现象,大大影响了界面美观和使用效率。

2.2 演练过程的态势文件存储问题

真正的演练过程,势必前期要准备详尽的演练脚本,文字形式的脚本好编辑,但是地图上的推演态势想要动态贯穿整个演练过程,就比较复杂。比较传统的方法是针对演练的不同阶段绘制不同的演练态势图,当演练到达该步骤时将该态势图显示到地图上,这种方式比较原始,实际上类似于照片形式,它的弊端在于无法实时动态展现,生硬直板不够形象。

如果把这些照片连贯起来加以细化,多个帧连起来加上时间点就变为态势演练视频了,这样在演练过程中直接播放,生动直观又能突出态势的演变过程,事实证明这种方式受到指挥领导一致好评。但是问题又出现了,随着切片帧的增加,演练时间的增长,这种照片形式的演播产生的演播文件也越来越大,占用了巨大硬盘空间,给态势文件的保存、传输带来不便。

3 关键技术

3.1 矢量符号渲染方式改进

标绘系统主要是由矢量符号库、绘制函数库、绘制渲染逻辑和上层业务组成,这里以绘制渲染逻辑为研究重点,绘制逻辑基本包含符号的缩放、闪烁、旋转和拖动等。常规的标绘流程设计如图1所示,绘制逻辑根据选择的符号调用矢量绘制函数,间接调用系统API来绘制到地图句柄上,这种常规设计常用在小型标绘系统中,标绘符号较少,在当前主流配置主机上这种设计不会造成特别明显的延迟和闪烁,但是应急资源管理和调度过程中,需要展示的资源比如应急物资、重点目标、行进路径、救援车辆以及救援专业队等将会布满整个屏幕,成千上万个资源不断地渲染在地图上就凸现出许多问题,延迟、闪烁,甚至重叠、擦除和失真等等。

图1 标绘基本流程图

问题2.1主要是因为多次调用系统绘制函数,资源耗费严重导致其中大量矢量符号的绘制需要复杂的算法来实现,其中许多逻辑必须重复多次调用系统底层绘制接口,重复地申请系统资源,大量的计算对CPU也是巨大的考验,再加上上层业务的频繁调用,使得绘制渲染逻辑模块成为渲染性能的瓶颈。考虑到矢量符号绘制函数比较多,整体改进的可行性比较小,所以考虑改变绘制渲染逻辑以求能有效提升整个标绘系统的性能。

为了消除闪烁和延迟现象,首先考虑到使用双缓冲绘图,所谓双缓冲绘图就是采用缓存实现的,传统的绘图方式实际上都是单缓冲,在Windows中每个设备都在内存中有一个设备描述表与其对应,这个设备描述表实际上就是一个内存缓冲区,传统的绘图就是将图形绘制到设备描述缓存区中,然后操作系统的图形设备接口会自动将前端缓冲区数据拷贝到显存中进行显示。双缓冲图形刷新技术在内存中有2块缓存,除了设备描述缓存区外,还需要手动建立一个和设备描述缓冲区兼容的后备缓冲区,在绘图过程中先将图形绘制到后备缓冲区中,然后再手动将后备缓冲区的图像拷贝到前端缓冲区由系统自动绘制。这种双缓冲技术能很好地避免闪烁现象[1]。

但是在GIS实际操作中,常常是多种行为并列执行,比如,在闪烁某资源符号时,进行放大地图或者隐藏某类资源。这个步骤看似很简单,但是后台需要处理的绘制逻辑相当复杂,在闪烁过程中,其实是由2个后备缓冲位图交替拷贝到前端缓冲区实现的。但是在放大地图或者隐藏显示某类资源时,又会进行重绘操作,放大地图,也采用一个后备缓冲位图来实现。隐藏某类资源也是采用一个后备缓冲位图,这种常见的操作,就要需要至少3个后备缓冲图来实现,如果单纯使用双缓冲,是无法完全满足这种显示需求的,因为上述操作会交替重绘从而可能产生大马赛克,甚至整个图形扭曲。

仔细研究后发现,这里缺少一种锁机制,多个后备缓冲图在拷贝到前端缓冲图时发生冲突导致,在手动拷贝到前端缓冲区时加上锁,完了再解锁,并禁止背景刷新,这样就产生了多缓冲绘图,图2流程中就是使用多缓冲机制进行矢量符号渲染方式改进的流程图。

图2 矢量符号渲染方式改进流程

所谓多缓冲机制,就是在通常的双缓冲绘图[1,2]基础上,根据渲染逻辑不同采用多于 2个的后备缓冲位图来绘制图数据,按照渲染逻辑不同使用特定锁机制来协调多个后备缓冲位图依次拷贝到前端缓冲区,然后通过系统图形设备接口自动显示。比如:大批量显示和删除、闪烁、放大缩小和旋转,这些显示逻辑在重复使用时,所有的绘制逻辑先生成缓冲数据,然后再绘制在各自相应的后备缓冲位图上,最终的前端缓冲位图是由这些后备位图数据组合而成,就是在绘制源位图按照锁机制拷贝到前端缓冲区。

这样做首先避免了不断地重绘地图造成的显存资源损耗;其次所有的绘制逻辑不实际绘制到地图句柄,而是使用内存拷贝方法BitBit,它支持图形块的数据复制,大大减少处理时间,消除了系统延迟[3]。实验证明这种多缓冲组合绘制方式能明显提升海量符号渲染性能。

3.2 序列化存储减少态势文件大小

为了减少态势文件[4]的大小,研究了矢量符号态势的关键点序列化存储方法[5,6]。该方法的基本原理是,考虑到矢量符号在绘制过程中是靠基础点和关键点来渲染的,可以把那种图片格式的态势存储转化成符号对象的序列化存储[7]。符号对象的序列化是指:符号对象由基础点、关键点、控制点[8]和各种属性组成,把这些点和属性按照一定的数据格式序列化存储起来,在显示时再反序列化读出来,再调用绘制逻辑重绘,帧序列化过程如图3所示。

图3 帧序列化和反序列化示意图

具体实现流程如图4所示。

图4 态势演播示意图

TS文件中存放的是带有时刻的一系列帧组合数据,录制时按照时间点序列化帧存储到TS文件,回放时从TS文件中反序列化读取帧。

TS文件的存储采用二进制流直接存储。符号对象按照特定的属性信息顺序依次存储,而一定时间内的标绘变化,是按照50 ms一帧存储的。每一帧记录的是当前时刻地图上所有符号对象的属性序列化数据,其中还包含地图的放大率、中心坐标以及一些即时操作。

4 测试结果分析

经过改进后的多缓冲符号渲染机制,通过实验直观地可以看到不再出现延迟和闪烁现象,同时使得后期的动画渲染也成为可能,比如行进箭头的动态增长,应急车的行进轨迹,疏散区域的颜色持续渐进变化等等一系列动画效果实现起来更容易。如果没有这种多缓冲机制,这种动画效果会变得非常卡,并且闪烁现象很明显。事实证明多缓冲机制能有效提升标绘系统的性能,因为效果比较直观,这里不再过多赘述,着重分析下序列化存储试验结果。

序列化态势文件存储在一定程度上增加了时间复杂度,但是能极大程度地减少存储空间,经过实验,图片格式态势文件和序列化态势文件大小的比较数据如表1和表2所示。

表1 单帧大小对比结果

表2 十分钟态势文件大小对比结果

由表1和表2数据对比明显得出:序列化存储态势演播文件可以极大程度降低文件所占存储空间。以单帧表较数据为例,图片和序列化格式大小对比为26:1,而以10 min态势文件作对比,发现图片和序列化格式大小对比为6 423:1,经过分析得知,单帧情况下图片格式和序列化格式差距不是特别大,是因为序列化格式单帧数据中地图相关数据占大部分,其实符号序列化属性数据在单帧中所占空间微乎其微。由此可以得出:矢量符号态势的序列化存储方法,能有效降低态势文件的大小。

有了这种存储机制,在态势推演过程中的态势录制、态势存储、文件加密和文件传输过程中都极为方便,也不用担心指挥系统服务器的硬盘空间不够用。这种存储方式一定程度上是增加了标绘系统的计算量,相当于是增加了部分时间复杂度来换取的低空间文件存储,经过实际演练效果检验,双核1.8 GHz的CPU,2G内存配置XP系统中运行标绘演练系统,采用这种序列化机制存储后,并没有明显地出现计算延迟,丝毫不影响显示效果。综上所述,这种存储机制在这种态势演练系统中是切实可行,方便有效的。

5 结束语

在研究态势标绘系统过程中,解决了海量资源渲染和态势文件存储2个难题,目前该态势标绘系统已交付用户试用,用户反映该系统性能良好,在资源管理系统中的资源符号展现效果良好,在联合标绘和态势文件存储、传输过程中,矢量符号序列化存储方法也起到了重要作用。

[1]张亮.基于双缓冲技术的VC++图形刷新技术的原理和实现[J].福建电脑,2010(6):110,137.

[2]刘同龙.动画显示中的双缓冲技术[J].电脑开发与应,1991,5(3):53 -55.

[3]徐敬海,徐徐,聂高众,等.基予GIS的地震应急态势标绘技术研究[J].武汉大学学报.信息科学版,2011,36(1):66 -69.

[4]刘育新,王海清.通信对抗系统中态势生成及分析方法的研究[J].无线电工程,1998(3):43 -46.

[5]史栋杰.五种快速序列化框架的性能比较[J].电脑知识与技术,2010,9(34):9710 -9711,9722.

[6]高立群,愈家文,丁俊松.NET Framework中序列化与反序列化方法的分析与应用[J].微计算机应用,2007,11:1178 -1182.

[7]胡晨光,严捷丰,高正东,等.一种类的序列化与反序列化框架[J].电脑知识与技术,2009,24:6739-6741.

[8]赵周.动态军标符号的实现方法研究[J].计算机工程与设计,2007,12(28):3023 -3025.

猜你喜欢
演播序列化态势
探析小说演播如何更好地“化为人物”
有声小说《白鹿原》演播艺术分析
——以李野墨演播版本为例
新时代有声演播者应该如何掌握情气声的关系
如何建构序列化阅读教学
2019年12月与11月相比汽车产销延续了增长态势
汇市延续小幅震荡态势
浅谈小说演播中的角色塑造
我国天然气供需呈现紧平衡态势
Java反序列化漏洞探析及其修复方法研究
Java 反序列化漏洞研究