刘小林,华一新,葛 文,张江水
(信息工程大学测绘学院,河南郑州450052)
嵌入式GIS图形中间件的设计与实现
刘小林,华一新,葛 文,张江水
(信息工程大学测绘学院,河南郑州450052)
导航仪、手机地图等嵌入式GIS已经深入人们日常生活,然而时下开发嵌入式GIS软件时需要针对不同的嵌入式软、硬件平台编写不同的代码。设计并实现了嵌入式GIS图形中间件,基于CG-GDI开发的嵌入式GIS可以在不同的嵌入式软、硬件平台上使用,达到“一套代码,随处运行”的目的。
嵌入式;GIS;中间件;图形
目前,嵌入式GIS已经深入人们的日常生活,车载导航仪、手机地图随处可见。但是嵌入式硬件与嵌入式操作系统的多样性,为开发嵌入式GIS带来了极大的不便,而其中不同嵌入式操作系统间关于图形设备接口的描述则是差异最大的部分,也是嵌入式GIS系统平台在不同操作系统间移植的最大障碍;另一方面,由于嵌入式应用的多样性,GIS人员不能开发出完全适合于实际应用需求的嵌入式应用系统,而各个应用领域的开发者往往又会因嵌入式GIS开发所涉及的专业性而放弃。
针对上述问题,笔者设计了嵌入式GIS图形中间件(common GIS-GDI,CG-GDI)。CG-GDI是基于中间件的思想专为嵌入式GIS设计的一个通用的图形绘制具体实现层,它的主旨是抽取各嵌入式系统图形绘制中硬件和操作系统上的共性问题,屏蔽它们的差别,向上层GIS应用程序提供简单统一的图形设备接口,从而减少开发人员在开发不同嵌入式GIS系统时的难度和工作量。
设计CG-GDI的目的是为了做到“一套代码,随处运行”。不同软、硬件平台上为GIS系统提供的基本图形绘制接口是不一样的,将这些图形绘制接口进行封装,向外提供一致的接口形成CG-GDI,这样,异构(操作系统和硬件不同)的嵌入式GIS应用程序就可以调用相同的图形绘制接口进行GIS的开发。如果基于CG-GDI开发的GIS系统使用纯C/C++编写代码,就可以达到“一套代码,随处运行”的目的。
目前国内外没有专门针对嵌入式GIS系统开发的图形系统,嵌入式图形中间件方面的产品只有几个图形GUI系统,国内的主要有Mini-GUI,国外比较成熟的嵌入式图形GUI系统是QT/Embedded。
Mini-GUI由原清华大学教师魏永明先生开发,遵循GPL条款。它是一个高效、可靠、可定制、小巧灵活的图形用户界面支持系统,具有跨硬件平台、跨操作系统的可移植性,主要运行于Linux控制台,实际可以运行在任何一种具有POSIX线程支持的POSIX兼容系统上。Mini-GUI最初是为了满足一个工业控制系统的需求而设计和开发的,它在设计之初就考虑到了小巧、高性能和高效率,因此比较适合于工控领域的简单应用。目前Mini-GUI已广泛应用于手持信息终端、机顶盒、工业控制系统及工业仪表等产品和领域。
QT/Embedded最初是由著名的 QT库开发商Trolltech开发的面向嵌入式系统的 QT版本,现在QT/Embedded QT可以用于Windows、Unix、Linux、嵌入式Linux和Macos X,它的主要特点是可移植性较好,许多基于QT的X Window程序可以非常方便地移植到嵌入式系统。它是一个多平台的C++图形用户界面应用程序框架,注重于能给用户提供精美的图形用户界面所需要的所有元素。QT/Embedded偏重于便携式和手持PC/Device的需求,缺点是代码不对外开放。
1.CG-GDI的作用
(1)CG-GDI在嵌入式GIS中的位置
CG-GDI在嵌入式GIS中的位置如图1所示。
图1 CG-GDI在嵌入式GIS中的位置图
从图1可以看出,CG-GDI的下层是嵌入式操作系统和嵌入式硬件平台,上层是嵌入式GIS应用程序和各嵌入式操作系统下的GUI系统。它是介于界面GUI和各嵌入式系统提供的底层绘制函数之间的一个图形绘制具体实现层,它对任何嵌入式系统下的GIS应用程序提供的接口都是一致的,这样开发嵌入式GIS应用程序时就不用再区分下层是何种操作系统和硬件平台。
(2)CG-GDI与GUI的联系和区别
CG-GDI主要包括的是点、线、面等的图形绘制技术,只不过它适用于不同的嵌入式软、硬件平台,它只为嵌入式GIS系统提供基本绘图功能的函数库。
而嵌入式图形界面GUI主要是指建立具有窗口元素及各种构建(包括菜单、按钮、对话框、滚动条等)的用户界面函数库,它不仅包括基本的图形绘制方法,而且还包括窗口、对话框等可视化界面资源,以及基于窗口等界面元素的消息传递机制等。
(3)CG-GDI的功能
CG-GDI是专为嵌入式GIS系统开发的图形设备接口,其作用主要是提供嵌入式GIS绘图方面的函数。为了满足嵌入式GIS的绘图需求,CG-GDI需要具备以下几个方面的功能:① 点、线以及多边形的绘制;② 椭圆和弧的绘制;③ 多边形的填充;④椭圆和饼的填充;⑤ 文字的绘制;⑥ 位图的绘制;⑦画笔的设置;⑧ 画刷的设置;⑨ 字体字大的设置;⑩绘制区域的设置。
2.CG-GDI的体系结构
嵌入式系统在硬件上的差别主要在于CPU的不同,有两个种类:PowerPC系列CPU和X86系列CPU。PowerPC是早期Motorola和IBM联合为Apple的MAC机开发的CPU芯片,X86是一个Intel通用计算机系列的标准编号缩写。两者的差别是读写字节序的不同,PowerPC系列CPU是大端字节序的,高字节数据存放在低地址处,低字节数据存放在高地址处;X86系列CPU是小端字节序的,低字节数据存放在内存低地址处,高字节数据存放在内存高地址处。
嵌入式系统在底层软件上的差别主要是操作系统的不同,现在流行的嵌入式操作系统有Vx-Works、Linux和WinCE等,不同的操作系统提供的底层图形函数是不一样的。
基于底层的嵌入式软硬件平台,设计的CG-GDI的体系结构如图2所示。
图2 嵌入式GIS图形中间件体系结构图
不同的图形API函数封装为统一的接口,为上层GIS应用提供服务。CG-GDI向下屏蔽了不同硬件平台和操作系统平台的差异,向上为用户提供了统一的嵌入式GIS图形服务,大大降低了开发嵌入式GIS应用系统的难度和复杂度。
1.CG-GDI的实现
整合软硬件的差异有两种方式:①文件库级别的整合,所有系统下的库文件都生成,上层在不同的系统下再调用相应的库;②代码级别的整合,不同的系统下调用不同的函数代码,上层只调用相应系统下的代码,编译时不生成其他的系统下的库文件。
CG-GDI实现的基本思路是:首先制定统一的嵌入式GIS图形设备接口,不同的系统下调用其自身的图形包实现这些图形设备接口,其中与硬件相关的图形设备接口(如位图的获取等)函数的实现时首先判断是何种CPU系列,再调用不同的方式实现;调用CD-GDI构建嵌入式GIS应用系统时只调用统一的图形设备接口,但要设置嵌入式系统硬件标识和操作系统标识,CD-GDI通过标识来判断是何种系列CPU和嵌入式操作系统,从而确定使用何种方式读写数据和调用何种系统下的图形包。
通过宏定义的方式来定义不同的嵌入式硬件和操作系统,定义相应的硬件宏参数和操作系统宏参数执行与该硬件和操作系统相关的代码。如配置文件中就可以通过#define_X86_CPU_或者#define_POWERPC_CPU_来标识不同的硬件。
通过参考不同的操作系统下的图形设备类,根据嵌入式系统的特点,设计出CG-GDI的类结构,主要由以下几个部分组成:设备环境类、画笔类、画刷类、字体类、图形区域类、位图类,如图3所示。
图3 CG-GDI总体类结构图
CG-GDI以设备环境类为中心,调用画笔类、画刷类、字体类、图形区域类、位图类等决定设备环境的状态,设备环境类再向GIS应用提供图形图像的绘制功能。而不同的系统下,设备环境类和位图类通过不同的方式来实现。
2.基于CG-GDI的GIS开发
基于CG-GDI开发嵌入式GIS的流程如图4所示。
图4 基于CG-GDI开发嵌入式GIS流程图
首先要确定嵌入式操作系统和CPU硬件类型,再将相关参数传进CG-GDI对其进行初始化,调用CG-GDI构建地图模块、分析查询模块和军标模块等GIS组件,并对各GIS组件进行初始化,而各个嵌入式系统在自己的界面系统中调用GIS模块和CGGDI构建GIS系统。当然,嵌入式GIS系统也可以不调用界面系统,直接调用CG-GDI绘制用户交互界面,再调用GIS模块组成嵌入式GIS系统。
下面各图是试验中基于CG-GDI构建的嵌入式GIS系统,图5所示是VxWorks下的GIS系统,调用了Zinc界面库;图6所示是Linux下没有调用GUI系统构建的GIS系统,使用键盘对地图进行操作;图7所示是WinCE下的GIS系统,调用了MFC库。
图5 VxWorks下的GIS系统
图6 Linux下的GIS系统
图7 WinCE下的GIS系统
图形是GIS的基础,作为通用GIS图形基础的CG-GDI适用于VxWorks、Linux和WinCE等系统,以及PowerPC和X86系列CPU,基于CG-GDI开发的GIS系统不需要修改代码就可以在这些软硬件平台上运行。
本文的CG-GDI是在参考各嵌入式操作系统图形设备接口的基础上设计的,并且在VxWorks、嵌入式Linux和WinCE系统下得到了具体的实现,具有以下几个方面的特点:
1)专为嵌入式GIS设计。嵌入式GIS与一般的界面程序有许多不一致的地方,虽然没有太复杂的图形绘制,但是每次绘制工作量都特别大,CGGDI是专为嵌入式GIS的这些特点设计的图形设备接口。
2)具有方便实用的特点。CG-GDI在不同的硬件和操作系统上使用无须进行复杂的移植,只需简单地设置几个参数,CG-GDI就可以在不同的嵌入式GIS系统中使用。
3)具有较好的执行效率。不同系统下CG-GDI都是基于底层系统函数实现的,没有使用第三方开发的编程包,所以CG-GDI具有较高的执行效率,这也能满足嵌入式高效的要求。
4)具有易扩展性的特点。虽然笔者已经实现了VxWorks、Linux和WinCE系统下的CG-GDI,但其实CG-GDI是针对所有的嵌入式GIS系统的,要在其他的嵌入式操作系统下实现CG-GDI,只需继承CG-GDI的相关虚类,具体实现其接口。
5)具有可裁剪的特点。用户在使用CG-GDI时,并不是在所有的操作系统下使用,可以针对特定的用户裁剪掉多余操作系统下CG-GDI的实现。
[1] 华一新,吴升,赵军喜.地理信息系统原理与技术[M].北京:解放军出版社,2001.
[2] 罗国庆.VxWorks与嵌入式软件开发[M].北京:机械工业出版社,2003.
[3] RIVER W.VxWorks程序员指南[M].王金刚,高伟,等译.北京:清华大学出版社,2003.
[4] 高俊.地理空间数据的可视化[J].测绘工程,2000,9(3):
1-7.
Design and Implementation of Common GIS-GDI
LIU Xiaolin,HUA Yixin,GE Wen,ZHANG Jiangshui
0494-0911(2010)11-0058-04
P208
B
2009-11-10
刘小林(1982—),男,湖南衡阳人,博士生,主要从事GIS的研究与开发。