劉小林,華一新,葛 文,張江水
(信息工程大學測繪學院,河南鄭州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的研究與開發。