APP下载

基于DeltaGUI的vxworks电子地图的实现

2018-05-31郝士林李方军朱永杰

火控雷达技术 2018年1期
关键词:电子地图图层矩形

郝士林 李方军 朱永杰

(西安电子工程研究所 西安 710100)

0 引言

vxworks系统具有高效的微内核、可裁剪性、高可靠性、高稳定性等优点,被广泛应用于农业、工业、医疗、军事、航空航天等领域。随着计算机硬件性能的提高,以前因硬件性能限制并不要求图形界面的vxworks应用软件也被越来越多的领域要求具备基本甚至复杂图形功能。鉴于基于vxworks开发的软件具备高实时性、高可靠性、支持图形显示、支持电子地图等特点,目前军品型号人机交互项目通常要求在vxworks操作系统进行设计实现。

vxworks操作系统在可靠性、实时性上满足软件设计要求。Windml作为风河公司的多媒体库虽能提供对基本的图元、视频、音频的支持,但自带的控件不足以支撑复杂图形界面的显示[1],如电子地图中的图形要素。为了实现复杂的图形界面,往往会借助于当今比较成熟的vxworks图形开发工具,DeltaGUI作为轻量级的嵌入式图形开发包具有可靠性强、占用资源少、易移植等优点,能很好的支持嵌入式图形界面的开发,被广泛应用于vxworks系统轻量级图形开发上。

现在主流电子地图都是在桌面地理信息系统工具Mapinfo中制作的完成,在嵌入式系统中并没有专门的软件或插件支持Mapinfo格式的电子地图[2],在Vxworks系统实现电子地图功能首先需开发Mapinfo电子地图文件读取工具,对读取的地图信息进行显示。

1 Mapinfo地图文件的读取

1.1 Mapinfo地图数据格式[3-6]

Tab文件和MIF文件是Mapinfo地图的主要存储格式, 其中,Mapinfo的Tab数据存储在属性表结构文件(.tab)与属性数据文件(.dat)中,空间数据保存在空间数据文件(.map)中,两者通过交叉索引文件(.id)联系。

Mapinfo公司并没有对外公布原始矢量形式存储的数据格式,但其提供的地图数据交换格式(MIF和MID)可以供开发人员做二次开发,该格式的空间数据以ASCII码存储,易生成且便于编译。

MIF文件的内容主要包括“头文件区”和“数据区”,在“头文件区”规定了地图的版本信息、字符集、投影坐标类型及表的结构;在“数据区”记录了图形的坐标和图形属性信息,包括点、文本、线、折线、区域、矩形、圆角矩形、椭圆、圆弧等;MID作为图形属性数据描述文件,对MIF文件中定义的图形要素的属性进行说明。

1.2 Mapinfo地图数据的读取

MapInfo软件不能在vxworks系统下读取MapInfo原始地图数据,在vxworks系统下开发电子地图,只能从mif和mid文件获取地图数据。地图数据被存放在多个mif和mid文件,每个mif文件为一个图层,图形信息以图元的形式存储在mif图层文件中,每个图元的描述信息存储在mid文件中,在程序设计时采用链表方式对文件信息进行存储,根据mif文件格式定义图元、图层的数据结构体,典型的图层结构体采用链表形式,内容包括点、线、折线、多边形、区域、弧线等的属性描述。

地图读取方法:打开第一个mif图层文件,开辟内存创建图层链表指针,将图层中的图形数据和mid文件中图形描述信息以链表的形式存放在图层结构体中,此图层的图元全部读取完毕后,读取下一个mif图层文件,再次开辟内存创建图层链表指针,将新的图层指针赋值给上一图层结构体中的下一图层指针后,进行本图层数据的读取和存储,以此类推完成所有文件的读取,并将所有图层的数据存在内存变量中,地图读取的过程是通过C++封装的地图读取类实现,图1为电子地图文件读取流程图。

图1 地图文件读取流程图

2 基于DeltaGUI地图信息的显示

2.1 DeltaGUI的显示技术[7]

DeltaGUI实现作图的原理是在系统内存中分配一个与实际物理显存相对应的虚拟显示存储空间,然后把虚拟显示存储空间的图像数据更新到物理显示存储空间上以实现图像的显示。画图是把虚拟显示存储空间的图像数据更新到物理显示存储空间的过程,实现图形的刷新,这种显示方式为脱屏缓冲,脱屏缓冲技术可最大限度的提高图形显示速度,减少图形显示时的闪烁。但出于效率和视觉考虑,在进行图形数据更新时,可只更新发生变化的那块区域的数据,这一区域被称作为失效(无效)区域,若整个屏幕都发生变化,失效区域为整个屏幕。

2.2 电子地图显示功能的实现

电子地图的显示及相关操作由PPI显示类实现,把内存中的地图数据通过图形工具包DeltaGUI以图层的方式进行画图。为了保证画图的高效性,只绘制虚拟显存中失效矩形区域内的图元,当第一次绘图时,失效区域为整个PPI屏幕,以后绘图的失效区域是地图或背景被覆盖而需要重绘的矩形区域。

地图缩放功能是响应雷达显示量程的切换操作,根据切换后的量程自动切换地图显示范围,当切换雷达显示量程时,使整个矩形区域失效,按照电子地图显示流程,重新绘制地图背景。

图2 脱屏缓冲原理

图3 电子地图显示流程图

区域放大功能是将关心的区域放大至全屏,在需要放大的矩形区域左上角单击鼠标左键不放,然后拖动鼠标至矩形区域右下角,释放鼠标左键,矩形区域会放大到整个PPI屏幕,单击鼠标右键恢复普通视图。内部处理过程:首先根据DeltaGUI反馈的鼠标左键按下、鼠标移动、鼠标左键抬起、鼠标右键抬起消息,判断是否执行了区域放大操作或恢复普通视图操作;若是区域放大操作,根据选择的矩形区域进行比例放大,并重新计算放大后的显示中心屏幕坐标,使整个矩形区域失效,按画图的流程完成画图;若是恢复图通视图操作,则将区域放大模式恢复至普通模式。

2.3 实例说明

应用程序运行在单核CPU主频1.1GHz,显卡为intel Extreme Graphics2的单板机上。应用程序除了进行网络任务、串口任务、图形控件的操作与响应、鼠标键盘的操作与响应外,每40ms还进行一次屏幕刷新,刷新的主要内容包括点迹、航迹、杂波、微表、地图。图4为电子地图显示效果图、图5为区域放大显示效果图,操作过程中,图形界面无卡顿,其他任务及操作响应及时,表明这种基于DeltaGUI的显示方法能实现地图及雷达信息的显示功能,经过用户长时间的使用,满足可靠性和实时性的要求,且采用通用的C++语言实现,具有较强的移植性,可以应用在有相同需求的其他项目中。

图4 电子地图显示效果图

图5 区域放大显示效果图

3 结束语

本文以某型雷达为背景,讲述了在vxworks操作系统下电子地图的实现方法,并在有限硬件平台上实现电子地图的显示,最后成功应用在某在研型号项目中,提升了嵌入式系统实时性、可靠性、支和人机交互能力。该技术成果可在嵌入式指挥控制系统、火力控制系统中推广,具有良好的应用前景。

参考文献:

[1] 栗明,栗科峰.嵌入式图形库Windml中窗口控件的实现[J].数字技术与应用,2011(4): 125-126.

[2] 翟艳磊,何祥宇,夏玉杰.嵌入式电子地图设计中Mapinfo文件的读取和显示[J].现代计算机,2010(2): 122-125.

[3] 李旭升.MiniGUI的研究及在嵌入式车载导航系统中的应用[D].成都:西华大学,2009.

[4] 汪亚雷,余春暄.基于嵌入式Linux的Mapinfo格式地图显示[J].嵌入式操作系统应用,2006,22(10-2):185-186.

[5] 赵从欣.基于Mapinfo平台的Mif/mid文件成图方法[J].四川测绘,2003:28-32.

[6] 李杰,付梦印,邓志红.Mapinfo格式的地图数据在嵌入式导航系统中的应用[J].计算机工程与应用,2003(13):214-217.

[7] 北京科银京成技术有限公司.DeltaGUI技术白皮书3.0[C].2002.

猜你喜欢

电子地图图层矩形
基于百度地图开放平台的导航电子地图课程实践教学研究
为《飞舞的空竹龙》加动感
矩形面积的特殊求法
电子地图在地理课堂教学中的运用
浅谈电子地图在高中地理教学中的应用
以假乱真窥探湿玻璃后的风景
与众不同“跳出”画面更个性
从矩形内一点说起
城市交通旅游电子地图的研究与应用分析
巧用矩形一性质,妙解一类题