态势标绘软件跨平台设计与实现

2015-11-25 02:59吴亚非臧义华
计算机与现代化 2015年12期
关键词:标绘图形符号跨平台

吴亚非,臧义华

(华北计算技术研究所,北京 100083)

0 引言

态势标绘软件是在电子地图上以交互式标图方式为作战参谋人员展现首长决心、反映战场态势和拟制作战方案的可视化工具软件,在几乎所有的作战应用系统中都是不可或缺的组成部分[1]。近年来,态势标绘研究领域逐步扩展,技术水平日趋成熟。从二维平面标图、三维虚拟战场展现到二三维联动,从美观易用的手工标图,到海量实时的战场态势显示[2],从运用动画效果推演作战计划,如实反映作战过程到大幅面精准制图,这些研究成果的推广应用,正在助力作战人员谋划打赢信息化条件下的现代战争。

与此同时,作战空间的拓展要求态势标绘软件的应用领域向着多样化发展,其运行环境已经由传统的Windows 操作系统,推广至国产桌面Linux 系统、资源受限的嵌入式VxWorks 系统和手持终端的Android移动系统,甚至面向服务的网络化系统中都有相关的研制与实现。联合作战时必须保证不同参谋人员对战场信息理解的一致性,这就要求不同环境下绘制的态势图[3]显示必须一致。

在各种操作系统下基于统一标准研制态势标绘软件是理所当然的,但是一套功能完备的态势标绘软件必然意味着巨大的投入,不仅成本上难以控制,而且不同项目组之间很难做到全时全域对需求分析、设计实现保持完美的一致,这种情况下态势图的一致性就愈发困难了。态势标绘软件与常用的图形处理软件不同,不仅必须与地理信息系统结合使用,而且需要根据多个位置点实时生成多达几百个的图形符号[4],且生成算法复杂,要求各个平台态势图显示一致,而常用图形处理软件跨平台设计几乎不需要考虑这些方面的要求,因此借鉴意义不大。态势标绘软件研制中跨平台的设计主要探讨了二维态势标绘软件跨平台设计的解决方案,基本做到了框架共用、算法共享、成果一致的预期目的,从技术上和经济上都取得了良好的效果[5-6]。

1 态势标绘软件的一般设计方法

态势标绘软件的核心功能是标绘编辑态势图,图1 展示了新建一幅态势图的主要流程。

图1 标绘态势图的主要流程

背景地图除了能够显示作战区域外,还能为其上的图形符号提供精准地理坐标定位,其相关功能是由第三方软件-地理信息系统(GIS)实现的,态势标绘软件需要集成地理信息系统的相关功能;与Visio 选取不同的“样式(Shape)”绘图方式类似,态势图也是由多个不同种类、不同样式的图形符号组成的,而图形符号存储于符号库中,初次标绘的符号采用缺省属性显示,标图人员可根据需要调整颜色、大小、方向、位置等属性后形成作战方案,然后打印或保存成态势图文件。

图2 态势标绘软件的一般设计方法

图2 显示了上述过程的设计方法。符号库使用独立的工具软件制作,为了能够在不同的视图窗口显示使用,其中的图形符号应当矢量化存储各组成图元(视图窗口坐标系);标绘时,对其实施视图坐标系到世界坐标系的空间变换;编辑时,在世界坐标系中对其施加平移、旋转、缩放等二维矩阵变换;显示时,依靠操作系统定义的显示方式,输出到屏幕显示;存储时,按照约定好的标准化格式,以将图形符号逐一存储于文件之中。

2 跨平台的态势标绘软件设计方法

态势标绘系统功能包括图形数据管理、图层管理、属性管理、文件管理、图形编辑、显示控制等核心功能,还包括结合特定应用的轨迹目标处理和动画处理等标绘扩展功能[7],系统体系结构如图3 所示,可以看出态势标绘系统的功能较多且复杂,这就需要软件设计从不同层次解决跨平台问题[8]。

图3 态势标绘系统系统图

态势标绘软件可能运行的平台涵盖了多数常见的桌面类系统、嵌入式系统和手持终端系统,其与操作系统关联的部分主要集中在I/O 读取、显示器渲染输出、标绘编辑等部分[9]。针对这些问题,采用的方法如下:

1)选择跨平台开发语言;

2)设计图元绘制中间层屏蔽系统差异;

3)MVC 架构设计模式;

4)依赖系统接口标准化设计,通过设计一套标准的地理信息系统接口,实现与依赖系统的解耦。

2.1 开发语言的选择

态势标绘软件需要根据设置的属性将图形符号进行解析,这个过程需要大量复杂计算及反复的屏幕输出渲染,实验证明,这些都是Java 软件的弱点。而标准C++语言本身具备跨平台特性,利用其提供的模板类、I/O 接口等实现符号库解析等核心功能,屏蔽操作系统带来的差异。

使用JNI 技术解决Java 语言访问及接口封装问题[10]。Android 平台态势标绘软件研制时,运用系统自身的NDK 编译核心代码,通过JNI 访问态势标绘软件核心功能,向上提供Java 接口解决软件界面交互问题。

服务化设计时,同样采用JNI 方式实现对符号库解析等核心功能的访问,对HTTP 请求以JSON 或XML 格式的数据应答。

图4 说明了多种语言如何使用态势标绘软件内核。

图4 接口关系

2.2 图元绘制中间层设计

态势标绘系统需要绘制大量的图形符号,图形符号由多个图元组成,而操作系统已经封装了显卡驱动并提供高级语言的图形绘制函数库,但不同操作系统之间的绘图接口并不相同[11-12]。

设计一套与操作系统无关的图形绘制库,屏蔽操作系统差异对态势标绘软件的影响,能够最大化地共享符号绘制模块。图元绘制库应具备图形图像绘制和文字显示能力,能提供画笔、画刷、文本属性设置以满足特殊绘制效果,态势标绘的符号相对复杂,所以路径、区域和裁剪区能力也是必不可少的。图元绘制中间层抽取常用图形库的共性能力后作统一设计,向上提供平台无关的绘制接口,以解决图形绘制的跨平台需要,如图5 所示。

图5 跨平台的图形绘制库

图形符号显示模块采用操作系统无关接口后,能够有效屏蔽不同操作系统影响。而Web 服务设计时,态势标绘服务不应负责显示,而是服务的请求者依赖各自显示能力提供图形符号的显示功能。因此,在设计符号显示模块时,显示与模型必须分开设计,只有这样服务器端才可能有效利用桌面的设计成果。

2.3 MVC 架构的设计模式

显示模块的显示与数据分离,只是单纯为了代码共享,而MVC 架构设计模式是解决态势标绘软件跨平台设计要求的核心思想,它实现了模型与显示的分离,由于这种设计思想与具体系统无关,大大降低了操作系统对态势标绘软件的影响程度。

图6 MVC 架构设计模式

图6 演示了MVC 架构的基本理念,模型(Model)、视图(View)和控制器(Controller)3 个抽象模型控制着整个系统的运转,抽象的模型部分负责对象的逻辑描述[13],但与显示无关。需要显示时,模型通知控制器,由其更新视图上的显示。视图部分只负责显示并接受用户的输入,当有变化时也是通过控制器更新对象模型。MVC 的设计理念将模型与显示分离开来,模型与数据的关系可以是一对多的关系,允许同一套数据模型在多个不同的视图上显示。

采用MVC 架构模式,对态势图对象、态势图层对象和图形符号模型与显示分开设计,模型部分负责对象的物理组成、操作方法、响应逻辑,态势标绘软件所有的外部接口都由模型部分具体实现[14];显示部分负责对象在窗口视图下的绘制,设计时,实施图形符号制作窗口与视图窗口的矩阵变化决定图元的实际位置后,依靠跨平台的图形绘制库进行屏幕渲染[15]。

图7 观察者模式实现视图与模型的通信

控制器的实现方法有很多,其中消息响应机制是最简单,也是最容易实现的。本文推荐使用与操作系统无关的观察者模式实现视图与模型的通信。

观察者模式定义了对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。在态势标绘软件中,显示对象被关联(Attach)到模型对象上,当模型对象发生变化时,会自动通知(Update)所有与之粘结的显示对象,显示对象负责更新视图窗口。

2.4 依赖系统标准化设计

态势标绘软件可通过设计图元绘制中间层,采用MVC 架构设计模式等方法实现跨平台设计,但对系统外部的地理信息系统却无能为力,而地理信息系统(GIS)是态势标绘软件唯一必须依赖的支撑软件,态势标绘软件需要依赖地理信息系统提供世界坐标空间定位、背景地图显示功能。应用中态势标绘软件也需要适应不同的地理信息系统,因此应尽可能地减少与支撑软件的耦合性。

通过建立独立的虚拟地理信息系统,解耦地理信息系统与态势标绘软件的依赖管理,能够保证态势标绘在各种场景下都能显示。所谓虚拟地理信息系统,包括世界坐标与视图坐标的定义与相互转换,地图的缩放、漫游等基本功能,将态势标绘软件必需的功能接口进行标准化设计,满足该标准的地理信息系统都可以与态势标绘软件结合使用。同时,系统中缺省定义一个世界坐标系与视图坐标系,不同的地理信息系统可以实例化该系统,也可以不接入任何地理信息系统,直接在空白背景下显示,作为一个草稿系统使用。

3 结束语

笔者从事多年态势标绘软件的研制工作,组织并参与完成了基于桌面、嵌入式和面向服务的多个平台的态势标绘软件研制。未考虑跨平台设计时,实施跨平台移植、复用研制成果难度很大,投入的人力、研发周期甚至软件质量成本都很高。

基于本文提出的设计理念和方法,笔者带领团队首先在桌面Linux 系统进行了系统重构,并在不同平台进行了跨平台移植实践,最后对跨平台效果进行了评估。不同平台间代码共享率有较大幅度的提升。跨平台设计之前,由于平台相关性代码分布在各个文件,几乎所有文件都需要改造,代码共享率低于30%。跨平台设计后,视平台性质的不同,代码共享率提升到75%以上。服务化的态势标绘系统需要进行Web Service 改造,接口部分需要按照网络化机制进行封装,相对代码修改率较高;而同等性质的桌面系统,运行机制类似,代码共享率达到90%以上,个别甚至更高。态势图显示效果基本一致。

[1]杨咏建,祝胜强.态势标绘系统设计分析[J].无线电通信技术,2012,38(1):52-55.

[2]张云贵.面向移动设备的矢量绘图平台设计与实现[D].北京:北京理工大学,2013.

[3]聂颖.图形应用系统下Undo/Redo 操作的设计与实现[J].计算机应用究,2005,22(3):181-182.

[4]Jiang Hua-wen,Che Xiang-ju,Gao Zhan-heng,et al.Design and realization of 3D irregular military symbols base on B-Spline[C]// The 5th International Conference on Frontier of Computer Science and Technology.2010:515-517.

[5]邓广宏,蔡斌,池志强,等.一种实现应用软件跨平台特性的解决方案[J].计算机与数字工程,2008,36(8):157-161.

[6]章琦鸿.共用态势图应用的实现和集成技术[J].计算机工程与设计,2011,32(7):2557-2561.

[7]胡洪波,郭徽东.通用作战态势图的构成与实现方法[J].指挥控制与仿真,2006,28(5):28-32.

[8]林彩霞,仇建伟.基于REST 的图形标绘服务系统技术研究[J].计算机与现代化,2012(10):76-81.

[9]Sandeep Mulgund,Seth Landsman.User defined operational pictures for tailored situation awareness[C]// The 12th International Command and Control Research and Technology Symposium.2007.

[10]李亚东,夏雨佳,席裕庚.基于JNI 的跨平台软件设计[J].计算机工程,2000,26(9):87-88.

[11]肖习攀,阎小兵,贾迎乐,等.GUI 应用程序移植-在Linux 上模拟Windows API 的方法[M].北京:电子工业出版社,2007.

[12]宋伟宁.嵌入式跨平台软件底层库的设计[J].软件导刊,2008(11):120-121.

[13]张俐.MVC 模式在数据中间件中的应用[J].计算机工程,2010,36(9):70-72.

[14]于萧榕.标牌图形多对象修改的研究与应用[J].计算机应用与软件,2012,29(5):248-250.

[15]牛红光,汉荣李,陈超,等.基于MGS 的航标信息查询与显示系统设计与实现[C]// 第二十届海洋测绘综合性学术研讨会论文集,2008.

[16]程杰.大话设计模式[M].北京:清华大学出版社,2007.

猜你喜欢
标绘图形符号跨平台
一种松耦合的多模态标绘引擎设计
后装综合态势共享交换文件模型设计
GB/T《流体传动系统及元件 图形符号和回路图 第1部分:图形符号》征求意见
跨平台APEX接口组件的设计与实现
川鄂盐道白菜柱头图形符号意义分析
雷达标绘训练与自动评估系统设计
海量动态异构空间标绘信息实时接入技术
中国传统图形符号与现代标志设计的融合
手机界面中图形符号的发展趋向
基于QT的跨平台输电铁塔监控终端软件设计与实现