劉小林,華一新,葛 文,張江水
(信息工程大學(xué)測繪學(xué)院,河南鄭州450052)
嵌入式GIS圖形中間件的設(shè)計與實現(xiàn)
劉小林,華一新,葛 文,張江水
(信息工程大學(xué)測繪學(xué)院,河南鄭州450052)
導(dǎo)航儀、手機(jī)地圖等嵌入式GIS已經(jīng)深入人們?nèi)粘I?,然而時下開發(fā)嵌入式GIS軟件時需要針對不同的嵌入式軟、硬件平臺編寫不同的代碼。設(shè)計并實現(xiàn)了嵌入式GIS圖形中間件,基于CG-GDI開發(fā)的嵌入式GIS可以在不同的嵌入式軟、硬件平臺上使用,達(dá)到“一套代碼,隨處運(yùn)行”的目的。
嵌入式;GIS;中間件;圖形
目前,嵌入式GIS已經(jīng)深入人們的日常生活,車載導(dǎo)航儀、手機(jī)地圖隨處可見。但是嵌入式硬件與嵌入式操作系統(tǒng)的多樣性,為開發(fā)嵌入式GIS帶來了極大的不便,而其中不同嵌入式操作系統(tǒng)間關(guān)于圖形設(shè)備接口的描述則是差異最大的部分,也是嵌入式GIS系統(tǒng)平臺在不同操作系統(tǒng)間移植的最大障礙;另一方面,由于嵌入式應(yīng)用的多樣性,GIS人員不能開發(fā)出完全適合于實際應(yīng)用需求的嵌入式應(yīng)用系統(tǒng),而各個應(yīng)用領(lǐng)域的開發(fā)者往往又會因嵌入式GIS開發(fā)所涉及的專業(yè)性而放棄。
針對上述問題,筆者設(shè)計了嵌入式GIS圖形中間件(common GIS-GDI,CG-GDI)。CG-GDI是基于中間件的思想專為嵌入式GIS設(shè)計的一個通用的圖形繪制具體實現(xiàn)層,它的主旨是抽取各嵌入式系統(tǒng)圖形繪制中硬件和操作系統(tǒng)上的共性問題,屏蔽它們的差別,向上層GIS應(yīng)用程序提供簡單統(tǒng)一的圖形設(shè)備接口,從而減少開發(fā)人員在開發(fā)不同嵌入式GIS系統(tǒng)時的難度和工作量。
設(shè)計CG-GDI的目的是為了做到“一套代碼,隨處運(yùn)行”。不同軟、硬件平臺上為GIS系統(tǒng)提供的基本圖形繪制接口是不一樣的,將這些圖形繪制接口進(jìn)行封裝,向外提供一致的接口形成CG-GDI,這樣,異構(gòu)(操作系統(tǒng)和硬件不同)的嵌入式GIS應(yīng)用程序就可以調(diào)用相同的圖形繪制接口進(jìn)行GIS的開發(fā)。如果基于CG-GDI開發(fā)的GIS系統(tǒng)使用純C/C++編寫代碼,就可以達(dá)到“一套代碼,隨處運(yùn)行”的目的。
目前國內(nèi)外沒有專門針對嵌入式GIS系統(tǒng)開發(fā)的圖形系統(tǒng),嵌入式圖形中間件方面的產(chǎn)品只有幾個圖形GUI系統(tǒng),國內(nèi)的主要有Mini-GUI,國外比較成熟的嵌入式圖形GUI系統(tǒng)是QT/Embedded。
Mini-GUI由原清華大學(xué)教師魏永明先生開發(fā),遵循GPL條款。它是一個高效、可靠、可定制、小巧靈活的圖形用戶界面支持系統(tǒng),具有跨硬件平臺、跨操作系統(tǒng)的可移植性,主要運(yùn)行于Linux控制臺,實際可以運(yùn)行在任何一種具有POSIX線程支持的POSIX兼容系統(tǒng)上。Mini-GUI最初是為了滿足一個工業(yè)控制系統(tǒng)的需求而設(shè)計和開發(fā)的,它在設(shè)計之初就考慮到了小巧、高性能和高效率,因此比較適合于工控領(lǐng)域的簡單應(yīng)用。目前Mini-GUI已廣泛應(yīng)用于手持信息終端、機(jī)頂盒、工業(yè)控制系統(tǒng)及工業(yè)儀表等產(chǎn)品和領(lǐng)域。
QT/Embedded最初是由著名的 QT庫開發(fā)商Trolltech開發(fā)的面向嵌入式系統(tǒng)的 QT版本,現(xiàn)在QT/Embedded QT可以用于Windows、Unix、Linux、嵌入式Linux和Macos X,它的主要特點是可移植性較好,許多基于QT的X Window程序可以非常方便地移植到嵌入式系統(tǒng)。它是一個多平臺的C++圖形用戶界面應(yīng)用程序框架,注重于能給用戶提供精美的圖形用戶界面所需要的所有元素。QT/Embedded偏重于便攜式和手持PC/Device的需求,缺點是代碼不對外開放。
1.CG-GDI的作用
(1)CG-GDI在嵌入式GIS中的位置
CG-GDI在嵌入式GIS中的位置如圖1所示。
圖1 CG-GDI在嵌入式GIS中的位置圖
從圖1可以看出,CG-GDI的下層是嵌入式操作系統(tǒng)和嵌入式硬件平臺,上層是嵌入式GIS應(yīng)用程序和各嵌入式操作系統(tǒng)下的GUI系統(tǒng)。它是介于界面GUI和各嵌入式系統(tǒng)提供的底層繪制函數(shù)之間的一個圖形繪制具體實現(xiàn)層,它對任何嵌入式系統(tǒng)下的GIS應(yīng)用程序提供的接口都是一致的,這樣開發(fā)嵌入式GIS應(yīng)用程序時就不用再區(qū)分下層是何種操作系統(tǒng)和硬件平臺。
(2)CG-GDI與GUI的聯(lián)系和區(qū)別
CG-GDI主要包括的是點、線、面等的圖形繪制技術(shù),只不過它適用于不同的嵌入式軟、硬件平臺,它只為嵌入式GIS系統(tǒng)提供基本繪圖功能的函數(shù)庫。
而嵌入式圖形界面GUI主要是指建立具有窗口元素及各種構(gòu)建(包括菜單、按鈕、對話框、滾動條等)的用戶界面函數(shù)庫,它不僅包括基本的圖形繪制方法,而且還包括窗口、對話框等可視化界面資源,以及基于窗口等界面元素的消息傳遞機(jī)制等。
(3)CG-GDI的功能
CG-GDI是專為嵌入式GIS系統(tǒng)開發(fā)的圖形設(shè)備接口,其作用主要是提供嵌入式GIS繪圖方面的函數(shù)。為了滿足嵌入式GIS的繪圖需求,CG-GDI需要具備以下幾個方面的功能:① 點、線以及多邊形的繪制;② 橢圓和弧的繪制;③ 多邊形的填充;④橢圓和餅的填充;⑤ 文字的繪制;⑥ 位圖的繪制;⑦畫筆的設(shè)置;⑧ 畫刷的設(shè)置;⑨ 字體字大的設(shè)置;⑩繪制區(qū)域的設(shè)置。
2.CG-GDI的體系結(jié)構(gòu)
嵌入式系統(tǒng)在硬件上的差別主要在于CPU的不同,有兩個種類:PowerPC系列CPU和X86系列CPU。PowerPC是早期Motorola和IBM聯(lián)合為Apple的MAC機(jī)開發(fā)的CPU芯片,X86是一個Intel通用計算機(jī)系列的標(biāo)準(zhǔn)編號縮寫。兩者的差別是讀寫字節(jié)序的不同,PowerPC系列CPU是大端字節(jié)序的,高字節(jié)數(shù)據(jù)存放在低地址處,低字節(jié)數(shù)據(jù)存放在高地址處;X86系列CPU是小端字節(jié)序的,低字節(jié)數(shù)據(jù)存放在內(nèi)存低地址處,高字節(jié)數(shù)據(jù)存放在內(nèi)存高地址處。
嵌入式系統(tǒng)在底層軟件上的差別主要是操作系統(tǒng)的不同,現(xiàn)在流行的嵌入式操作系統(tǒng)有Vx-Works、Linux和WinCE等,不同的操作系統(tǒng)提供的底層圖形函數(shù)是不一樣的。
基于底層的嵌入式軟硬件平臺,設(shè)計的CG-GDI的體系結(jié)構(gòu)如圖2所示。
圖2 嵌入式GIS圖形中間件體系結(jié)構(gòu)圖
不同的圖形API函數(shù)封裝為統(tǒng)一的接口,為上層GIS應(yīng)用提供服務(wù)。CG-GDI向下屏蔽了不同硬件平臺和操作系統(tǒng)平臺的差異,向上為用戶提供了統(tǒng)一的嵌入式GIS圖形服務(wù),大大降低了開發(fā)嵌入式GIS應(yīng)用系統(tǒng)的難度和復(fù)雜度。
1.CG-GDI的實現(xiàn)
整合軟硬件的差異有兩種方式:①文件庫級別的整合,所有系統(tǒng)下的庫文件都生成,上層在不同的系統(tǒng)下再調(diào)用相應(yīng)的庫;②代碼級別的整合,不同的系統(tǒng)下調(diào)用不同的函數(shù)代碼,上層只調(diào)用相應(yīng)系統(tǒng)下的代碼,編譯時不生成其他的系統(tǒng)下的庫文件。
CG-GDI實現(xiàn)的基本思路是:首先制定統(tǒng)一的嵌入式GIS圖形設(shè)備接口,不同的系統(tǒng)下調(diào)用其自身的圖形包實現(xiàn)這些圖形設(shè)備接口,其中與硬件相關(guān)的圖形設(shè)備接口(如位圖的獲取等)函數(shù)的實現(xiàn)時首先判斷是何種CPU系列,再調(diào)用不同的方式實現(xiàn);調(diào)用CD-GDI構(gòu)建嵌入式GIS應(yīng)用系統(tǒng)時只調(diào)用統(tǒng)一的圖形設(shè)備接口,但要設(shè)置嵌入式系統(tǒng)硬件標(biāo)識和操作系統(tǒng)標(biāo)識,CD-GDI通過標(biāo)識來判斷是何種系列CPU和嵌入式操作系統(tǒng),從而確定使用何種方式讀寫數(shù)據(jù)和調(diào)用何種系統(tǒng)下的圖形包。
通過宏定義的方式來定義不同的嵌入式硬件和操作系統(tǒng),定義相應(yīng)的硬件宏參數(shù)和操作系統(tǒng)宏參數(shù)執(zhí)行與該硬件和操作系統(tǒng)相關(guān)的代碼。如配置文件中就可以通過#define_X86_CPU_或者#define_POWERPC_CPU_來標(biāo)識不同的硬件。
通過參考不同的操作系統(tǒng)下的圖形設(shè)備類,根據(jù)嵌入式系統(tǒng)的特點,設(shè)計出CG-GDI的類結(jié)構(gòu),主要由以下幾個部分組成:設(shè)備環(huán)境類、畫筆類、畫刷類、字體類、圖形區(qū)域類、位圖類,如圖3所示。
圖3 CG-GDI總體類結(jié)構(gòu)圖
CG-GDI以設(shè)備環(huán)境類為中心,調(diào)用畫筆類、畫刷類、字體類、圖形區(qū)域類、位圖類等決定設(shè)備環(huán)境的狀態(tài),設(shè)備環(huán)境類再向GIS應(yīng)用提供圖形圖像的繪制功能。而不同的系統(tǒng)下,設(shè)備環(huán)境類和位圖類通過不同的方式來實現(xiàn)。
2.基于CG-GDI的GIS開發(fā)
基于CG-GDI開發(fā)嵌入式GIS的流程如圖4所示。
圖4 基于CG-GDI開發(fā)嵌入式GIS流程圖
首先要確定嵌入式操作系統(tǒng)和CPU硬件類型,再將相關(guān)參數(shù)傳進(jìn)CG-GDI對其進(jìn)行初始化,調(diào)用CG-GDI構(gòu)建地圖模塊、分析查詢模塊和軍標(biāo)模塊等GIS組件,并對各GIS組件進(jìn)行初始化,而各個嵌入式系統(tǒng)在自己的界面系統(tǒng)中調(diào)用GIS模塊和CGGDI構(gòu)建GIS系統(tǒng)。當(dāng)然,嵌入式GIS系統(tǒng)也可以不調(diào)用界面系統(tǒng),直接調(diào)用CG-GDI繪制用戶交互界面,再調(diào)用GIS模塊組成嵌入式GIS系統(tǒng)。
下面各圖是試驗中基于CG-GDI構(gòu)建的嵌入式GIS系統(tǒng),圖5所示是VxWorks下的GIS系統(tǒng),調(diào)用了Zinc界面庫;圖6所示是Linux下沒有調(diào)用GUI系統(tǒng)構(gòu)建的GIS系統(tǒng),使用鍵盤對地圖進(jìn)行操作;圖7所示是WinCE下的GIS系統(tǒng),調(diào)用了MFC庫。
圖5 VxWorks下的GIS系統(tǒng)
圖6 Linux下的GIS系統(tǒng)
圖7 WinCE下的GIS系統(tǒng)
圖形是GIS的基礎(chǔ),作為通用GIS圖形基礎(chǔ)的CG-GDI適用于VxWorks、Linux和WinCE等系統(tǒng),以及PowerPC和X86系列CPU,基于CG-GDI開發(fā)的GIS系統(tǒng)不需要修改代碼就可以在這些軟硬件平臺上運(yùn)行。
本文的CG-GDI是在參考各嵌入式操作系統(tǒng)圖形設(shè)備接口的基礎(chǔ)上設(shè)計的,并且在VxWorks、嵌入式Linux和WinCE系統(tǒng)下得到了具體的實現(xiàn),具有以下幾個方面的特點:
1)專為嵌入式GIS設(shè)計。嵌入式GIS與一般的界面程序有許多不一致的地方,雖然沒有太復(fù)雜的圖形繪制,但是每次繪制工作量都特別大,CGGDI是專為嵌入式GIS的這些特點設(shè)計的圖形設(shè)備接口。
2)具有方便實用的特點。CG-GDI在不同的硬件和操作系統(tǒng)上使用無須進(jìn)行復(fù)雜的移植,只需簡單地設(shè)置幾個參數(shù),CG-GDI就可以在不同的嵌入式GIS系統(tǒng)中使用。
3)具有較好的執(zhí)行效率。不同系統(tǒng)下CG-GDI都是基于底層系統(tǒng)函數(shù)實現(xiàn)的,沒有使用第三方開發(fā)的編程包,所以CG-GDI具有較高的執(zhí)行效率,這也能滿足嵌入式高效的要求。
4)具有易擴(kuò)展性的特點。雖然筆者已經(jīng)實現(xiàn)了VxWorks、Linux和WinCE系統(tǒng)下的CG-GDI,但其實CG-GDI是針對所有的嵌入式GIS系統(tǒng)的,要在其他的嵌入式操作系統(tǒng)下實現(xiàn)CG-GDI,只需繼承CG-GDI的相關(guān)虛類,具體實現(xiàn)其接口。
5)具有可裁剪的特點。用戶在使用CG-GDI時,并不是在所有的操作系統(tǒng)下使用,可以針對特定的用戶裁剪掉多余操作系統(tǒng)下CG-GDI的實現(xiàn)。
[1] 華一新,吳升,趙軍喜.地理信息系統(tǒng)原理與技術(shù)[M].北京:解放軍出版社,2001.
[2] 羅國慶.VxWorks與嵌入式軟件開發(fā)[M].北京:機(jī)械工業(yè)出版社,2003.
[3] RIVER W.VxWorks程序員指南[M].王金剛,高偉,等譯.北京:清華大學(xué)出版社,2003.
[4] 高俊.地理空間數(shù)據(jù)的可視化[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的研究與開發(fā)。