吳亞非,臧義華
(華北計(jì)算技術(shù)研究所,北京 100083)
態(tài)勢(shì)標(biāo)繪軟件是在電子地圖上以交互式標(biāo)圖方式為作戰(zhàn)參謀人員展現(xiàn)首長(zhǎng)決心、反映戰(zhàn)場(chǎng)態(tài)勢(shì)和擬制作戰(zhàn)方案的可視化工具軟件,在幾乎所有的作戰(zhàn)應(yīng)用系統(tǒng)中都是不可或缺的組成部分[1]。近年來(lái),態(tài)勢(shì)標(biāo)繪研究領(lǐng)域逐步擴(kuò)展,技術(shù)水平日趨成熟。從二維平面標(biāo)圖、三維虛擬戰(zhàn)場(chǎng)展現(xiàn)到二三維聯(lián)動(dòng),從美觀易用的手工標(biāo)圖,到海量實(shí)時(shí)的戰(zhàn)場(chǎng)態(tài)勢(shì)顯示[2],從運(yùn)用動(dòng)畫(huà)效果推演作戰(zhàn)計(jì)劃,如實(shí)反映作戰(zhàn)過(guò)程到大幅面精準(zhǔn)制圖,這些研究成果的推廣應(yīng)用,正在助力作戰(zhàn)人員謀劃打贏信息化條件下的現(xiàn)代戰(zhàn)爭(zhēng)。
與此同時(shí),作戰(zhàn)空間的拓展要求態(tài)勢(shì)標(biāo)繪軟件的應(yīng)用領(lǐng)域向著多樣化發(fā)展,其運(yùn)行環(huán)境已經(jīng)由傳統(tǒng)的Windows 操作系統(tǒng),推廣至國(guó)產(chǎn)桌面Linux 系統(tǒng)、資源受限的嵌入式VxWorks 系統(tǒng)和手持終端的Android移動(dòng)系統(tǒng),甚至面向服務(wù)的網(wǎng)絡(luò)化系統(tǒng)中都有相關(guān)的研制與實(shí)現(xiàn)。聯(lián)合作戰(zhàn)時(shí)必須保證不同參謀人員對(duì)戰(zhàn)場(chǎng)信息理解的一致性,這就要求不同環(huán)境下繪制的態(tài)勢(shì)圖[3]顯示必須一致。
在各種操作系統(tǒng)下基于統(tǒng)一標(biāo)準(zhǔn)研制態(tài)勢(shì)標(biāo)繪軟件是理所當(dāng)然的,但是一套功能完備的態(tài)勢(shì)標(biāo)繪軟件必然意味著巨大的投入,不僅成本上難以控制,而且不同項(xiàng)目組之間很難做到全時(shí)全域?qū)π枨蠓治?、設(shè)計(jì)實(shí)現(xiàn)保持完美的一致,這種情況下態(tài)勢(shì)圖的一致性就愈發(fā)困難了。態(tài)勢(shì)標(biāo)繪軟件與常用的圖形處理軟件不同,不僅必須與地理信息系統(tǒng)結(jié)合使用,而且需要根據(jù)多個(gè)位置點(diǎn)實(shí)時(shí)生成多達(dá)幾百個(gè)的圖形符號(hào)[4],且生成算法復(fù)雜,要求各個(gè)平臺(tái)態(tài)勢(shì)圖顯示一致,而常用圖形處理軟件跨平臺(tái)設(shè)計(jì)幾乎不需要考慮這些方面的要求,因此借鑒意義不大。態(tài)勢(shì)標(biāo)繪軟件研制中跨平臺(tái)的設(shè)計(jì)主要探討了二維態(tài)勢(shì)標(biāo)繪軟件跨平臺(tái)設(shè)計(jì)的解決方案,基本做到了框架共用、算法共享、成果一致的預(yù)期目的,從技術(shù)上和經(jīng)濟(jì)上都取得了良好的效果[5-6]。
態(tài)勢(shì)標(biāo)繪軟件的核心功能是標(biāo)繪編輯態(tài)勢(shì)圖,圖1 展示了新建一幅態(tài)勢(shì)圖的主要流程。
圖1 標(biāo)繪態(tài)勢(shì)圖的主要流程
背景地圖除了能夠顯示作戰(zhàn)區(qū)域外,還能為其上的圖形符號(hào)提供精準(zhǔn)地理坐標(biāo)定位,其相關(guān)功能是由第三方軟件-地理信息系統(tǒng)(GIS)實(shí)現(xiàn)的,態(tài)勢(shì)標(biāo)繪軟件需要集成地理信息系統(tǒng)的相關(guān)功能;與Visio 選取不同的“樣式(Shape)”繪圖方式類(lèi)似,態(tài)勢(shì)圖也是由多個(gè)不同種類(lèi)、不同樣式的圖形符號(hào)組成的,而圖形符號(hào)存儲(chǔ)于符號(hào)庫(kù)中,初次標(biāo)繪的符號(hào)采用缺省屬性顯示,標(biāo)圖人員可根據(jù)需要調(diào)整顏色、大小、方向、位置等屬性后形成作戰(zhàn)方案,然后打印或保存成態(tài)勢(shì)圖文件。
圖2 態(tài)勢(shì)標(biāo)繪軟件的一般設(shè)計(jì)方法
圖2 顯示了上述過(guò)程的設(shè)計(jì)方法。符號(hào)庫(kù)使用獨(dú)立的工具軟件制作,為了能夠在不同的視圖窗口顯示使用,其中的圖形符號(hào)應(yīng)當(dāng)矢量化存儲(chǔ)各組成圖元(視圖窗口坐標(biāo)系);標(biāo)繪時(shí),對(duì)其實(shí)施視圖坐標(biāo)系到世界坐標(biāo)系的空間變換;編輯時(shí),在世界坐標(biāo)系中對(duì)其施加平移、旋轉(zhuǎn)、縮放等二維矩陣變換;顯示時(shí),依靠操作系統(tǒng)定義的顯示方式,輸出到屏幕顯示;存儲(chǔ)時(shí),按照約定好的標(biāo)準(zhǔn)化格式,以將圖形符號(hào)逐一存儲(chǔ)于文件之中。
態(tài)勢(shì)標(biāo)繪系統(tǒng)功能包括圖形數(shù)據(jù)管理、圖層管理、屬性管理、文件管理、圖形編輯、顯示控制等核心功能,還包括結(jié)合特定應(yīng)用的軌跡目標(biāo)處理和動(dòng)畫(huà)處理等標(biāo)繪擴(kuò)展功能[7],系統(tǒng)體系結(jié)構(gòu)如圖3 所示,可以看出態(tài)勢(shì)標(biāo)繪系統(tǒng)的功能較多且復(fù)雜,這就需要軟件設(shè)計(jì)從不同層次解決跨平臺(tái)問(wèn)題[8]。
圖3 態(tài)勢(shì)標(biāo)繪系統(tǒng)系統(tǒng)圖
態(tài)勢(shì)標(biāo)繪軟件可能運(yùn)行的平臺(tái)涵蓋了多數(shù)常見(jiàn)的桌面類(lèi)系統(tǒng)、嵌入式系統(tǒng)和手持終端系統(tǒng),其與操作系統(tǒng)關(guān)聯(lián)的部分主要集中在I/O 讀取、顯示器渲染輸出、標(biāo)繪編輯等部分[9]。針對(duì)這些問(wèn)題,采用的方法如下:
1)選擇跨平臺(tái)開(kāi)發(fā)語(yǔ)言;
2)設(shè)計(jì)圖元繪制中間層屏蔽系統(tǒng)差異;
3)MVC 架構(gòu)設(shè)計(jì)模式;
4)依賴(lài)系統(tǒng)接口標(biāo)準(zhǔn)化設(shè)計(jì),通過(guò)設(shè)計(jì)一套標(biāo)準(zhǔn)的地理信息系統(tǒng)接口,實(shí)現(xiàn)與依賴(lài)系統(tǒng)的解耦。
態(tài)勢(shì)標(biāo)繪軟件需要根據(jù)設(shè)置的屬性將圖形符號(hào)進(jìn)行解析,這個(gè)過(guò)程需要大量復(fù)雜計(jì)算及反復(fù)的屏幕輸出渲染,實(shí)驗(yàn)證明,這些都是Java 軟件的弱點(diǎn)。而標(biāo)準(zhǔn)C++語(yǔ)言本身具備跨平臺(tái)特性,利用其提供的模板類(lèi)、I/O 接口等實(shí)現(xiàn)符號(hào)庫(kù)解析等核心功能,屏蔽操作系統(tǒng)帶來(lái)的差異。
使用JNI 技術(shù)解決Java 語(yǔ)言訪問(wèn)及接口封裝問(wèn)題[10]。Android 平臺(tái)態(tài)勢(shì)標(biāo)繪軟件研制時(shí),運(yùn)用系統(tǒng)自身的NDK 編譯核心代碼,通過(guò)JNI 訪問(wèn)態(tài)勢(shì)標(biāo)繪軟件核心功能,向上提供Java 接口解決軟件界面交互問(wèn)題。
服務(wù)化設(shè)計(jì)時(shí),同樣采用JNI 方式實(shí)現(xiàn)對(duì)符號(hào)庫(kù)解析等核心功能的訪問(wèn),對(duì)HTTP 請(qǐng)求以JSON 或XML 格式的數(shù)據(jù)應(yīng)答。
圖4 說(shuō)明了多種語(yǔ)言如何使用態(tài)勢(shì)標(biāo)繪軟件內(nèi)核。
圖4 接口關(guān)系
態(tài)勢(shì)標(biāo)繪系統(tǒng)需要繪制大量的圖形符號(hào),圖形符號(hào)由多個(gè)圖元組成,而操作系統(tǒng)已經(jīng)封裝了顯卡驅(qū)動(dòng)并提供高級(jí)語(yǔ)言的圖形繪制函數(shù)庫(kù),但不同操作系統(tǒng)之間的繪圖接口并不相同[11-12]。
設(shè)計(jì)一套與操作系統(tǒng)無(wú)關(guān)的圖形繪制庫(kù),屏蔽操作系統(tǒng)差異對(duì)態(tài)勢(shì)標(biāo)繪軟件的影響,能夠最大化地共享符號(hào)繪制模塊。圖元繪制庫(kù)應(yīng)具備圖形圖像繪制和文字顯示能力,能提供畫(huà)筆、畫(huà)刷、文本屬性設(shè)置以滿(mǎn)足特殊繪制效果,態(tài)勢(shì)標(biāo)繪的符號(hào)相對(duì)復(fù)雜,所以路徑、區(qū)域和裁剪區(qū)能力也是必不可少的。圖元繪制中間層抽取常用圖形庫(kù)的共性能力后作統(tǒng)一設(shè)計(jì),向上提供平臺(tái)無(wú)關(guān)的繪制接口,以解決圖形繪制的跨平臺(tái)需要,如圖5 所示。
圖5 跨平臺(tái)的圖形繪制庫(kù)
圖形符號(hào)顯示模塊采用操作系統(tǒng)無(wú)關(guān)接口后,能夠有效屏蔽不同操作系統(tǒng)影響。而Web 服務(wù)設(shè)計(jì)時(shí),態(tài)勢(shì)標(biāo)繪服務(wù)不應(yīng)負(fù)責(zé)顯示,而是服務(wù)的請(qǐng)求者依賴(lài)各自顯示能力提供圖形符號(hào)的顯示功能。因此,在設(shè)計(jì)符號(hào)顯示模塊時(shí),顯示與模型必須分開(kāi)設(shè)計(jì),只有這樣服務(wù)器端才可能有效利用桌面的設(shè)計(jì)成果。
顯示模塊的顯示與數(shù)據(jù)分離,只是單純?yōu)榱舜a共享,而MVC 架構(gòu)設(shè)計(jì)模式是解決態(tài)勢(shì)標(biāo)繪軟件跨平臺(tái)設(shè)計(jì)要求的核心思想,它實(shí)現(xiàn)了模型與顯示的分離,由于這種設(shè)計(jì)思想與具體系統(tǒng)無(wú)關(guān),大大降低了操作系統(tǒng)對(duì)態(tài)勢(shì)標(biāo)繪軟件的影響程度。
圖6 MVC 架構(gòu)設(shè)計(jì)模式
圖6 演示了MVC 架構(gòu)的基本理念,模型(Model)、視圖(View)和控制器(Controller)3 個(gè)抽象模型控制著整個(gè)系統(tǒng)的運(yùn)轉(zhuǎn),抽象的模型部分負(fù)責(zé)對(duì)象的邏輯描述[13],但與顯示無(wú)關(guān)。需要顯示時(shí),模型通知控制器,由其更新視圖上的顯示。視圖部分只負(fù)責(zé)顯示并接受用戶(hù)的輸入,當(dāng)有變化時(shí)也是通過(guò)控制器更新對(duì)象模型。MVC 的設(shè)計(jì)理念將模型與顯示分離開(kāi)來(lái),模型與數(shù)據(jù)的關(guān)系可以是一對(duì)多的關(guān)系,允許同一套數(shù)據(jù)模型在多個(gè)不同的視圖上顯示。
采用MVC 架構(gòu)模式,對(duì)態(tài)勢(shì)圖對(duì)象、態(tài)勢(shì)圖層對(duì)象和圖形符號(hào)模型與顯示分開(kāi)設(shè)計(jì),模型部分負(fù)責(zé)對(duì)象的物理組成、操作方法、響應(yīng)邏輯,態(tài)勢(shì)標(biāo)繪軟件所有的外部接口都由模型部分具體實(shí)現(xiàn)[14];顯示部分負(fù)責(zé)對(duì)象在窗口視圖下的繪制,設(shè)計(jì)時(shí),實(shí)施圖形符號(hào)制作窗口與視圖窗口的矩陣變化決定圖元的實(shí)際位置后,依靠跨平臺(tái)的圖形繪制庫(kù)進(jìn)行屏幕渲染[15]。
圖7 觀察者模式實(shí)現(xiàn)視圖與模型的通信
控制器的實(shí)現(xiàn)方法有很多,其中消息響應(yīng)機(jī)制是最簡(jiǎn)單,也是最容易實(shí)現(xiàn)的。本文推薦使用與操作系統(tǒng)無(wú)關(guān)的觀察者模式實(shí)現(xiàn)視圖與模型的通信。
觀察者模式定義了對(duì)象間的一種一對(duì)多的依賴(lài)關(guān)系,當(dāng)一個(gè)對(duì)象的狀態(tài)發(fā)生改變時(shí),所有依賴(lài)于它的對(duì)象都得到通知并被自動(dòng)更新。在態(tài)勢(shì)標(biāo)繪軟件中,顯示對(duì)象被關(guān)聯(lián)(Attach)到模型對(duì)象上,當(dāng)模型對(duì)象發(fā)生變化時(shí),會(huì)自動(dòng)通知(Update)所有與之粘結(jié)的顯示對(duì)象,顯示對(duì)象負(fù)責(zé)更新視圖窗口。
態(tài)勢(shì)標(biāo)繪軟件可通過(guò)設(shè)計(jì)圖元繪制中間層,采用MVC 架構(gòu)設(shè)計(jì)模式等方法實(shí)現(xiàn)跨平臺(tái)設(shè)計(jì),但對(duì)系統(tǒng)外部的地理信息系統(tǒng)卻無(wú)能為力,而地理信息系統(tǒng)(GIS)是態(tài)勢(shì)標(biāo)繪軟件唯一必須依賴(lài)的支撐軟件,態(tài)勢(shì)標(biāo)繪軟件需要依賴(lài)地理信息系統(tǒng)提供世界坐標(biāo)空間定位、背景地圖顯示功能。應(yīng)用中態(tài)勢(shì)標(biāo)繪軟件也需要適應(yīng)不同的地理信息系統(tǒng),因此應(yīng)盡可能地減少與支撐軟件的耦合性。
通過(guò)建立獨(dú)立的虛擬地理信息系統(tǒng),解耦地理信息系統(tǒng)與態(tài)勢(shì)標(biāo)繪軟件的依賴(lài)管理,能夠保證態(tài)勢(shì)標(biāo)繪在各種場(chǎng)景下都能顯示。所謂虛擬地理信息系統(tǒng),包括世界坐標(biāo)與視圖坐標(biāo)的定義與相互轉(zhuǎn)換,地圖的縮放、漫游等基本功能,將態(tài)勢(shì)標(biāo)繪軟件必需的功能接口進(jìn)行標(biāo)準(zhǔn)化設(shè)計(jì),滿(mǎn)足該標(biāo)準(zhǔn)的地理信息系統(tǒng)都可以與態(tài)勢(shì)標(biāo)繪軟件結(jié)合使用。同時(shí),系統(tǒng)中缺省定義一個(gè)世界坐標(biāo)系與視圖坐標(biāo)系,不同的地理信息系統(tǒng)可以實(shí)例化該系統(tǒng),也可以不接入任何地理信息系統(tǒng),直接在空白背景下顯示,作為一個(gè)草稿系統(tǒng)使用。
筆者從事多年態(tài)勢(shì)標(biāo)繪軟件的研制工作,組織并參與完成了基于桌面、嵌入式和面向服務(wù)的多個(gè)平臺(tái)的態(tài)勢(shì)標(biāo)繪軟件研制。未考慮跨平臺(tái)設(shè)計(jì)時(shí),實(shí)施跨平臺(tái)移植、復(fù)用研制成果難度很大,投入的人力、研發(fā)周期甚至軟件質(zhì)量成本都很高。
基于本文提出的設(shè)計(jì)理念和方法,筆者帶領(lǐng)團(tuán)隊(duì)首先在桌面Linux 系統(tǒng)進(jìn)行了系統(tǒng)重構(gòu),并在不同平臺(tái)進(jìn)行了跨平臺(tái)移植實(shí)踐,最后對(duì)跨平臺(tái)效果進(jìn)行了評(píng)估。不同平臺(tái)間代碼共享率有較大幅度的提升??缙脚_(tái)設(shè)計(jì)之前,由于平臺(tái)相關(guān)性代碼分布在各個(gè)文件,幾乎所有文件都需要改造,代碼共享率低于30%??缙脚_(tái)設(shè)計(jì)后,視平臺(tái)性質(zhì)的不同,代碼共享率提升到75%以上。服務(wù)化的態(tài)勢(shì)標(biāo)繪系統(tǒng)需要進(jìn)行Web Service 改造,接口部分需要按照網(wǎng)絡(luò)化機(jī)制進(jìn)行封裝,相對(duì)代碼修改率較高;而同等性質(zhì)的桌面系統(tǒng),運(yùn)行機(jī)制類(lèi)似,代碼共享率達(dá)到90%以上,個(gè)別甚至更高。態(tài)勢(shì)圖顯示效果基本一致。
[1]楊詠建,祝勝?gòu)?qiáng).態(tài)勢(shì)標(biāo)繪系統(tǒng)設(shè)計(jì)分析[J].無(wú)線電通信技術(shù),2012,38(1):52-55.
[2]張?jiān)瀑F.面向移動(dòng)設(shè)備的矢量繪圖平臺(tái)設(shè)計(jì)與實(shí)現(xiàn)[D].北京:北京理工大學(xué),2013.
[3]聶穎.圖形應(yīng)用系統(tǒng)下Undo/Redo 操作的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用究,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]鄧廣宏,蔡斌,池志強(qiáng),等.一種實(shí)現(xiàn)應(yīng)用軟件跨平臺(tái)特性的解決方案[J].計(jì)算機(jī)與數(shù)字工程,2008,36(8):157-161.
[6]章琦鴻.共用態(tài)勢(shì)圖應(yīng)用的實(shí)現(xiàn)和集成技術(shù)[J].計(jì)算機(jī)工程與設(shè)計(jì),2011,32(7):2557-2561.
[7]胡洪波,郭徽東.通用作戰(zhàn)態(tài)勢(shì)圖的構(gòu)成與實(shí)現(xiàn)方法[J].指揮控制與仿真,2006,28(5):28-32.
[8]林彩霞,仇建偉.基于REST 的圖形標(biāo)繪服務(wù)系統(tǒng)技術(shù)研究[J].計(jì)算機(jī)與現(xiàn)代化,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]李亞?wèn)|,夏雨佳,席裕庚.基于JNI 的跨平臺(tái)軟件設(shè)計(jì)[J].計(jì)算機(jī)工程,2000,26(9):87-88.
[11]肖習(xí)攀,閻小兵,賈迎樂(lè),等.GUI 應(yīng)用程序移植-在Linux 上模擬Windows API 的方法[M].北京:電子工業(yè)出版社,2007.
[12]宋偉寧.嵌入式跨平臺(tái)軟件底層庫(kù)的設(shè)計(jì)[J].軟件導(dǎo)刊,2008(11):120-121.
[13]張俐.MVC 模式在數(shù)據(jù)中間件中的應(yīng)用[J].計(jì)算機(jī)工程,2010,36(9):70-72.
[14]于蕭榕.標(biāo)牌圖形多對(duì)象修改的研究與應(yīng)用[J].計(jì)算機(jī)應(yīng)用與軟件,2012,29(5):248-250.
[15]牛紅光,漢榮李,陳超,等.基于MGS 的航標(biāo)信息查詢(xún)與顯示系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[C]// 第二十屆海洋測(cè)繪綜合性學(xué)術(shù)研討會(huì)論文集,2008.
[16]程杰.大話設(shè)計(jì)模式[M].北京:清華大學(xué)出版社,2007.