楊詠建,祝勝強
(河北遠東哈里斯通信有限公司,河北石家莊050035)
態(tài)勢標繪系統(tǒng)廣泛應用于電力、通信和應急等多個行業(yè)和領域。一般的地理信息系統(tǒng)中都含有態(tài)勢標繪功能,它可以用形象生動的矢量符號描述各種業(yè)務對象,表示各種資源,還可以動態(tài)渲染業(yè)務進度和流程。一個性能比較好的態(tài)勢標繪系統(tǒng)要求能支持大批量矢量符號的集中渲染重繪,不能延遲閃爍,圖像不能失真,同時還應繪制各種業(yè)務的態(tài)勢圖,支持流暢的態(tài)勢演播功能。目前一般的標繪系統(tǒng)都很少研究大批量矢量符號渲染性能,一般也沒有采用視頻方式來表現(xiàn)態(tài)勢演播功能,根據(jù)這2個主要的業(yè)務需求,重新設計了態(tài)勢標繪系統(tǒng)。
態(tài)勢標繪系統(tǒng)是以地理信息系統(tǒng)為平臺,使用點、線、面符號和其他一些矢量符號,標繪各種對象,動態(tài)描述各種資源信息。在基本態(tài)勢標繪系統(tǒng)之上優(yōu)化了海量矢量符號的顯示效果,并提出視頻形式的態(tài)勢演播系統(tǒng)。
系統(tǒng)大體分為2個部分,資源標繪子系統(tǒng)和態(tài)勢演播子系統(tǒng),資源標繪子系統(tǒng)主要實現(xiàn)矢量符號在地圖上的標繪,主要包含添加、刪除、修改、添加標注、修改大小以及顏色等顯示屬性,還要支持矢量符號的放大、縮小、旋轉(zhuǎn)以及拖動等效果。態(tài)勢演播子系統(tǒng)是為了滿足應急處置時的各種態(tài)勢圖的動態(tài)展現(xiàn)而設計的,主要功能包括態(tài)勢錄制、態(tài)勢播放、停止、暫停以及保存態(tài)勢文件、打開態(tài)勢文件、快進和快退等,其中還包括地圖的一系列操作,比如放大、縮小及漫游等操作,從而產(chǎn)生一種流暢的視頻播放效果。
資源標繪子系統(tǒng)綜合考慮了資源管理和標繪系統(tǒng)的內(nèi)在聯(lián)系,用矢量符號表示一類資源,以經(jīng)緯度為關聯(lián)點,采用數(shù)據(jù)庫技術存儲資源信息,以地圖上的單擊,移動等鼠標操作來同步實現(xiàn)資源的添加、修改及刪除等操作,同時合理規(guī)劃數(shù)據(jù)結構,使資源的維護支持動態(tài)添加,資源的屬性也可以自動添加,以矢量符號標繪技術直觀地在地圖上展示資源。
態(tài)勢演播吸取了傳統(tǒng)態(tài)勢圖的經(jīng)驗,將一張張態(tài)勢圖加上時間點連貫起來,使其變成和實際應急時間相關聯(lián)的動態(tài)態(tài)勢,這樣原來的態(tài)勢圖就變成態(tài)勢視頻了,更生動,更符合調(diào)度實際,更具有時效性。將傳統(tǒng)的態(tài)勢圖變?yōu)閼B(tài)勢視頻形式,需要在標繪過程中錄制一幀幀的態(tài)勢圖,冠以時間,錄制完畢后保存。然后在回放時,再從文件中讀取,按照時間播放每一幀,這樣就可以實現(xiàn)態(tài)勢演播效果了。
實際實現(xiàn)過程中必須解決好以下2個問題,標繪符號閃爍失真問題和態(tài)勢文件太大不易傳輸?shù)膯栴}。
在一般指揮調(diào)度系統(tǒng)中,態(tài)勢標繪作為基礎功能在應急指揮調(diào)度中起著重要作用,尤其是在資源管理標繪系統(tǒng)中,各種單位、物資、行動路線和集結區(qū)域,經(jīng)常布滿整個地圖,在漫游地圖或者放大、縮小地圖等操作時地圖上的矢量符號經(jīng)常會發(fā)生延遲、閃爍等現(xiàn)象,大大影響了界面美觀和使用效率。
真正的演練過程,勢必前期要準備詳盡的演練腳本,文字形式的腳本好編輯,但是地圖上的推演態(tài)勢想要動態(tài)貫穿整個演練過程,就比較復雜。比較傳統(tǒng)的方法是針對演練的不同階段繪制不同的演練態(tài)勢圖,當演練到達該步驟時將該態(tài)勢圖顯示到地圖上,這種方式比較原始,實際上類似于照片形式,它的弊端在于無法實時動態(tài)展現(xiàn),生硬直板不夠形象。
如果把這些照片連貫起來加以細化,多個幀連起來加上時間點就變?yōu)閼B(tài)勢演練視頻了,這樣在演練過程中直接播放,生動直觀又能突出態(tài)勢的演變過程,事實證明這種方式受到指揮領導一致好評。但是問題又出現(xiàn)了,隨著切片幀的增加,演練時間的增長,這種照片形式的演播產(chǎn)生的演播文件也越來越大,占用了巨大硬盤空間,給態(tài)勢文件的保存、傳輸帶來不便。
標繪系統(tǒng)主要是由矢量符號庫、繪制函數(shù)庫、繪制渲染邏輯和上層業(yè)務組成,這里以繪制渲染邏輯為研究重點,繪制邏輯基本包含符號的縮放、閃爍、旋轉(zhuǎn)和拖動等。常規(guī)的標繪流程設計如圖1所示,繪制邏輯根據(jù)選擇的符號調(diào)用矢量繪制函數(shù),間接調(diào)用系統(tǒng)API來繪制到地圖句柄上,這種常規(guī)設計常用在小型標繪系統(tǒng)中,標繪符號較少,在當前主流配置主機上這種設計不會造成特別明顯的延遲和閃爍,但是應急資源管理和調(diào)度過程中,需要展示的資源比如應急物資、重點目標、行進路徑、救援車輛以及救援專業(yè)隊等將會布滿整個屏幕,成千上萬個資源不斷地渲染在地圖上就凸現(xiàn)出許多問題,延遲、閃爍,甚至重疊、擦除和失真等等。
圖1 標繪基本流程圖
問題2.1主要是因為多次調(diào)用系統(tǒng)繪制函數(shù),資源耗費嚴重導致其中大量矢量符號的繪制需要復雜的算法來實現(xiàn),其中許多邏輯必須重復多次調(diào)用系統(tǒng)底層繪制接口,重復地申請系統(tǒng)資源,大量的計算對CPU也是巨大的考驗,再加上上層業(yè)務的頻繁調(diào)用,使得繪制渲染邏輯模塊成為渲染性能的瓶頸??紤]到矢量符號繪制函數(shù)比較多,整體改進的可行性比較小,所以考慮改變繪制渲染邏輯以求能有效提升整個標繪系統(tǒng)的性能。
為了消除閃爍和延遲現(xiàn)象,首先考慮到使用雙緩沖繪圖,所謂雙緩沖繪圖就是采用緩存實現(xiàn)的,傳統(tǒng)的繪圖方式實際上都是單緩沖,在Windows中每個設備都在內(nèi)存中有一個設備描述表與其對應,這個設備描述表實際上就是一個內(nèi)存緩沖區(qū),傳統(tǒng)的繪圖就是將圖形繪制到設備描述緩存區(qū)中,然后操作系統(tǒng)的圖形設備接口會自動將前端緩沖區(qū)數(shù)據(jù)拷貝到顯存中進行顯示。雙緩沖圖形刷新技術在內(nèi)存中有2塊緩存,除了設備描述緩存區(qū)外,還需要手動建立一個和設備描述緩沖區(qū)兼容的后備緩沖區(qū),在繪圖過程中先將圖形繪制到后備緩沖區(qū)中,然后再手動將后備緩沖區(qū)的圖像拷貝到前端緩沖區(qū)由系統(tǒng)自動繪制。這種雙緩沖技術能很好地避免閃爍現(xiàn)象[1]。
但是在GIS實際操作中,常常是多種行為并列執(zhí)行,比如,在閃爍某資源符號時,進行放大地圖或者隱藏某類資源。這個步驟看似很簡單,但是后臺需要處理的繪制邏輯相當復雜,在閃爍過程中,其實是由2個后備緩沖位圖交替拷貝到前端緩沖區(qū)實現(xiàn)的。但是在放大地圖或者隱藏顯示某類資源時,又會進行重繪操作,放大地圖,也采用一個后備緩沖位圖來實現(xiàn)。隱藏某類資源也是采用一個后備緩沖位圖,這種常見的操作,就要需要至少3個后備緩沖圖來實現(xiàn),如果單純使用雙緩沖,是無法完全滿足這種顯示需求的,因為上述操作會交替重繪從而可能產(chǎn)生大馬賽克,甚至整個圖形扭曲。
仔細研究后發(fā)現(xiàn),這里缺少一種鎖機制,多個后備緩沖圖在拷貝到前端緩沖圖時發(fā)生沖突導致,在手動拷貝到前端緩沖區(qū)時加上鎖,完了再解鎖,并禁止背景刷新,這樣就產(chǎn)生了多緩沖繪圖,圖2流程中就是使用多緩沖機制進行矢量符號渲染方式改進的流程圖。
圖2 矢量符號渲染方式改進流程
所謂多緩沖機制,就是在通常的雙緩沖繪圖[1,2]基礎上,根據(jù)渲染邏輯不同采用多于 2個的后備緩沖位圖來繪制圖數(shù)據(jù),按照渲染邏輯不同使用特定鎖機制來協(xié)調(diào)多個后備緩沖位圖依次拷貝到前端緩沖區(qū),然后通過系統(tǒng)圖形設備接口自動顯示。比如:大批量顯示和刪除、閃爍、放大縮小和旋轉(zhuǎn),這些顯示邏輯在重復使用時,所有的繪制邏輯先生成緩沖數(shù)據(jù),然后再繪制在各自相應的后備緩沖位圖上,最終的前端緩沖位圖是由這些后備位圖數(shù)據(jù)組合而成,就是在繪制源位圖按照鎖機制拷貝到前端緩沖區(qū)。
這樣做首先避免了不斷地重繪地圖造成的顯存資源損耗;其次所有的繪制邏輯不實際繪制到地圖句柄,而是使用內(nèi)存拷貝方法BitBit,它支持圖形塊的數(shù)據(jù)復制,大大減少處理時間,消除了系統(tǒng)延遲[3]。實驗證明這種多緩沖組合繪制方式能明顯提升海量符號渲染性能。
為了減少態(tài)勢文件[4]的大小,研究了矢量符號態(tài)勢的關鍵點序列化存儲方法[5,6]。該方法的基本原理是,考慮到矢量符號在繪制過程中是靠基礎點和關鍵點來渲染的,可以把那種圖片格式的態(tài)勢存儲轉(zhuǎn)化成符號對象的序列化存儲[7]。符號對象的序列化是指:符號對象由基礎點、關鍵點、控制點[8]和各種屬性組成,把這些點和屬性按照一定的數(shù)據(jù)格式序列化存儲起來,在顯示時再反序列化讀出來,再調(diào)用繪制邏輯重繪,幀序列化過程如圖3所示。
圖3 幀序列化和反序列化示意圖
具體實現(xiàn)流程如圖4所示。
圖4 態(tài)勢演播示意圖
TS文件中存放的是帶有時刻的一系列幀組合數(shù)據(jù),錄制時按照時間點序列化幀存儲到TS文件,回放時從TS文件中反序列化讀取幀。
TS文件的存儲采用二進制流直接存儲。符號對象按照特定的屬性信息順序依次存儲,而一定時間內(nèi)的標繪變化,是按照50 ms一幀存儲的。每一幀記錄的是當前時刻地圖上所有符號對象的屬性序列化數(shù)據(jù),其中還包含地圖的放大率、中心坐標以及一些即時操作。
經(jīng)過改進后的多緩沖符號渲染機制,通過實驗直觀地可以看到不再出現(xiàn)延遲和閃爍現(xiàn)象,同時使得后期的動畫渲染也成為可能,比如行進箭頭的動態(tài)增長,應急車的行進軌跡,疏散區(qū)域的顏色持續(xù)漸進變化等等一系列動畫效果實現(xiàn)起來更容易。如果沒有這種多緩沖機制,這種動畫效果會變得非???,并且閃爍現(xiàn)象很明顯。事實證明多緩沖機制能有效提升標繪系統(tǒng)的性能,因為效果比較直觀,這里不再過多贅述,著重分析下序列化存儲試驗結果。
序列化態(tài)勢文件存儲在一定程度上增加了時間復雜度,但是能極大程度地減少存儲空間,經(jīng)過實驗,圖片格式態(tài)勢文件和序列化態(tài)勢文件大小的比較數(shù)據(jù)如表1和表2所示。
表1 單幀大小對比結果
表2 十分鐘態(tài)勢文件大小對比結果
由表1和表2數(shù)據(jù)對比明顯得出:序列化存儲態(tài)勢演播文件可以極大程度降低文件所占存儲空間。以單幀表較數(shù)據(jù)為例,圖片和序列化格式大小對比為26:1,而以10 min態(tài)勢文件作對比,發(fā)現(xiàn)圖片和序列化格式大小對比為6 423:1,經(jīng)過分析得知,單幀情況下圖片格式和序列化格式差距不是特別大,是因為序列化格式單幀數(shù)據(jù)中地圖相關數(shù)據(jù)占大部分,其實符號序列化屬性數(shù)據(jù)在單幀中所占空間微乎其微。由此可以得出:矢量符號態(tài)勢的序列化存儲方法,能有效降低態(tài)勢文件的大小。
有了這種存儲機制,在態(tài)勢推演過程中的態(tài)勢錄制、態(tài)勢存儲、文件加密和文件傳輸過程中都極為方便,也不用擔心指揮系統(tǒng)服務器的硬盤空間不夠用。這種存儲方式一定程度上是增加了標繪系統(tǒng)的計算量,相當于是增加了部分時間復雜度來換取的低空間文件存儲,經(jīng)過實際演練效果檢驗,雙核1.8 GHz的CPU,2G內(nèi)存配置XP系統(tǒng)中運行標繪演練系統(tǒng),采用這種序列化機制存儲后,并沒有明顯地出現(xiàn)計算延遲,絲毫不影響顯示效果。綜上所述,這種存儲機制在這種態(tài)勢演練系統(tǒng)中是切實可行,方便有效的。
在研究態(tài)勢標繪系統(tǒng)過程中,解決了海量資源渲染和態(tài)勢文件存儲2個難題,目前該態(tài)勢標繪系統(tǒng)已交付用戶試用,用戶反映該系統(tǒng)性能良好,在資源管理系統(tǒng)中的資源符號展現(xiàn)效果良好,在聯(lián)合標繪和態(tài)勢文件存儲、傳輸過程中,矢量符號序列化存儲方法也起到了重要作用。
[1]張亮.基于雙緩沖技術的VC++圖形刷新技術的原理和實現(xiàn)[J].福建電腦,2010(6):110,137.
[2]劉同龍.動畫顯示中的雙緩沖技術[J].電腦開發(fā)與應,1991,5(3):53 -55.
[3]徐敬海,徐徐,聶高眾,等.基予GIS的地震應急態(tài)勢標繪技術研究[J].武漢大學學報.信息科學版,2011,36(1):66 -69.
[4]劉育新,王海清.通信對抗系統(tǒng)中態(tài)勢生成及分析方法的研究[J].無線電工程,1998(3):43 -46.
[5]史棟杰.五種快速序列化框架的性能比較[J].電腦知識與技術,2010,9(34):9710 -9711,9722.
[6]高立群,愈家文,丁俊松.NET Framework中序列化與反序列化方法的分析與應用[J].微計算機應用,2007,11:1178 -1182.
[7]胡晨光,嚴捷豐,高正東,等.一種類的序列化與反序列化框架[J].電腦知識與技術,2009,24:6739-6741.
[8]趙周.動態(tài)軍標符號的實現(xiàn)方法研究[J].計算機工程與設計,2007,12(28):3023 -3025.