陳晨 李健 張濤
北京工業(yè)大學(xué)計算機(jī)學(xué)院 北京 100124
地理信息系統(tǒng)(Geographic Information System,GIS)是一種基于計算機(jī)的工具,它可以對在地球上存在的東西和發(fā)生的事件進(jìn)行成圖和分析。GIS是地理和計算機(jī)結(jié)合的產(chǎn)物,人們的生產(chǎn)和生活中80%以上的信息和地理空間位置有關(guān),GIS近年來得到了廣泛關(guān)注和迅猛發(fā)展。
近年來 GIS組件化發(fā)展趨勢迅速,組件式平臺包括:Microsoft的COM、ActiveX控件,ESRI和MapInfo也分別推出了MapObjects和MapX。但是用戶體驗方面相對薄弱,為此本課題研究選用.Net3.0的 WPF,開發(fā)人員和設(shè)計人員可以通過 WPF創(chuàng)建更好的視覺效果、不同的用戶體驗。同時為了以后適應(yīng)更多的基于WPF的GIS相關(guān)系統(tǒng),我們可以直接復(fù)用此課題研發(fā)的組件,提高開發(fā)效率,減少成本。
GDI/GDI+是當(dāng)今Windows桌面應(yīng)用程序的主流圖形庫,GDI/GDI+圖形系統(tǒng)已經(jīng)形成了很多年。它提供了2D圖形和文本功能,以及受限的圖像處理功能。
在WPF中,引入一種新的圖形合成引擎使2D/3D渲染效果以及動畫效果絢麗。高生產(chǎn)效率一直是微軟技術(shù)的一貫特點,WPF是對圖像編程更高層次的封裝,因此可以帶來更快的開發(fā)速度。使用 GDI/GDI+再加上復(fù)雜的幾何學(xué)知識,編寫大量代碼實現(xiàn)的效果,在 WPF下面只需要簡單的幾行XAML代碼。WPF也有弱點,由于是對 Direct3D的一層managed的封裝,在2D應(yīng)用中其繪制效率較之GDI/GDI+相對不高。
隨著人們對用戶體驗和視覺沖擊力追求不斷地提高,客戶對GIS應(yīng)用的展示效果要求也逐漸增多,他們的要求不僅限于傳統(tǒng)桌面風(fēng)格的操作菜單、GIS標(biāo)繪靜態(tài)展現(xiàn)的形式。
無論是實現(xiàn)GIS應(yīng)用還是GIS組件,對于地理數(shù)據(jù)的繪制都是實現(xiàn)GIS很重要的一步,能否到選擇合適的界面顯示技術(shù)會對GIS組件繪制部分的最終效果以及開發(fā)效率造成很大的影響,所以挑選合適的界面顯示技術(shù)尤為重要,經(jīng)過學(xué)習(xí)調(diào)研,對比介紹一下微軟的各種界面顯示技術(shù):
(1)GDI
GDI不僅提供了圖形圖像的繪制功能,同時還對硬件顯示進(jìn)行了更高層次的抽象。換句話說,它將硬件的復(fù)雜性封裝在了GDI API中,用戶使用起來更加方便。
(2)GDI+
顧名思義,GDI+是作為GDI的擴(kuò)展而被引入到Windows中的。它提供了很多GDI所沒有的擴(kuò)展功能,例如對JPG和PNG圖像格式支持,漸變陰影和抗鋸齒等。無論是 GDI還是 GDI+,它們最大的局限就是不支持硬件加速,同時無法展現(xiàn)動畫和3D圖像。
(3)DirectX
正如在前面所分析的那樣,GDI及其擴(kuò)展 GDI+的一個最大問題就是不支持硬件加速和動畫。這對于游戲開發(fā)者來說,是無法接受的。為了解決這個問題,微軟開發(fā)了DirectX。DirectX能夠很好的利用硬件加速,能夠支持3D,全彩圖像,流媒體等等,非常適合游戲工業(yè)等對圖形圖像處理要求比較高的領(lǐng)域。
(4)WPF
WPF是微軟新一代圖形系統(tǒng),運行在.NET Framework 3.0架構(gòu)下,為用戶界面、2D/3D 圖形、文檔和媒體提供了統(tǒng)一的描述和操作方法?;贒irectX技術(shù)的WPF不僅帶來了前所未有的3D界面,而且其圖形向量渲染引擎也大大改進(jìn)了傳統(tǒng)的2D界面。因為WPF是在DirectX的基礎(chǔ)上實現(xiàn)的,所以開發(fā)人員可以利用WPF創(chuàng)建簡單的UI元素,還可以更進(jìn)一步,開發(fā)自定義的UI元素,例如網(wǎng)格(Grid),流文檔(FlowDocument)和橢圓(Ellipse)等。還可以利用WPF創(chuàng)建輕量級動畫。
依據(jù)客戶的客觀要求即實現(xiàn)類似游戲界面風(fēng)格的GIS應(yīng)用展示系統(tǒng),以及上述界面顯示技術(shù)對比來分析:現(xiàn)在大部分流行的GIS應(yīng)用系統(tǒng)和GIS組件界面整體還是沒有改變傳統(tǒng)Windows的風(fēng)格,即便開發(fā)人員通過圖片資源進(jìn)行美化,用戶體驗方面也沒有改變傳統(tǒng)的對話框、菜單等操作方式,這樣的系統(tǒng)適合應(yīng)用,但是不適合絢麗的展示;開發(fā)人員也想到應(yīng)用DirectX進(jìn)行GIS應(yīng)用展示系統(tǒng)的界面顯示進(jìn)行實現(xiàn),憑借DirectX對硬件加速、動畫、3D方面的支持,DirectX絕對可以制作出絢麗的界面,但是我們所開發(fā)的GIS應(yīng)用展示系統(tǒng)很大一部分還在于功能,應(yīng)用DirectX開發(fā)界面需要編寫大量的代碼去實現(xiàn)預(yù)期的效果,這樣大量的工作量則被消耗在界面編寫上;在來看封裝了DirectX的WPF,WPF支持開發(fā)人員創(chuàng)建特殊的 UI元素,所以設(shè)計人員可以大膽的想象華麗的顯示界面和獨特的界面用戶體驗,還可以輕松創(chuàng)建輕量級的動畫展示流程、演練相關(guān)的需求。應(yīng)用 WPF開發(fā)適合于客戶對于界面的展示需求,而且應(yīng)用 WPF制作界面的開發(fā)效率要遠(yuǎn)高于DirectX,基于對界面展示效果和開發(fā)效率的考慮,所以選用WPF技術(shù)開發(fā)GIS應(yīng)用展示系統(tǒng)是一種趨勢。
本文通過研究、學(xué)習(xí)國內(nèi)外成功GIS組件范例的思想和方法,并且結(jié)合以前已有的相關(guān)開發(fā)經(jīng)驗,研究、設(shè)計GIS組件的總體結(jié)構(gòu)。主要的設(shè)計原則:要將各個功能系統(tǒng)劃分獨立,在保證良好性能的同時,兼顧可擴(kuò)展性。組件設(shè)計框架如圖1。
圖1 基于WPF的GIS組件體系結(jié)構(gòu)
應(yīng)用面向?qū)ο蟮臄?shù)據(jù)結(jié)構(gòu)存儲從GIS數(shù)據(jù)讀出的信息,線、面、文字等信息,然后通過 WPF底層繪制函數(shù)繪制幾何圖元,在此需要研究找到 WPF中比底層的繪制方案,經(jīng)過對WPF的學(xué)習(xí),并進(jìn)行性能方面的測試得到下述結(jié)論:
(1)應(yīng)用WPF中的System.Windows.Shapes.Polyline類對解析后的線進(jìn)行繪制。
(2)應(yīng)用WPF中的System.Windows.Shapes.Polygon類對解析后的區(qū)域進(jìn)行繪制。
(3)應(yīng)用WPF中的System.Windows.Controls.TextBlock類對解析后的文字進(jìn)行繪制。
應(yīng)用面向?qū)ο蟮臄?shù)據(jù)結(jié)構(gòu)存儲從GIS數(shù)據(jù)讀出的信息,線、面、文字等信息,然后通過 WPF底層繪制函數(shù)繪制幾何圖元,在此需要研究找到 WPF中比底層的繪制方案,經(jīng)過對WPF的學(xué)習(xí),并進(jìn)行性能方面的測試得到下述結(jié)論:
(1)應(yīng)用WPF中的System.Windows.Shapes.Polyline類對解析后的線進(jìn)行繪制。
(2)應(yīng)用WPF中的System.Windows.Shapes.Polygon類對解析后的區(qū)域進(jìn)行繪制。
(3)應(yīng)用WPF中的System.Windows.Controls.TextBlock類對解析后的文字進(jìn)行繪制。
實踐證明WPF的繪制效率不是很高,由于是對Direct3D的一層managed的封裝,性能成為我們關(guān)心的問題,尤其是在用戶交互的過程中,比如用戶對地圖進(jìn)行拖拽,實現(xiàn)拖拽比較簡單的方法是以用戶拖拽到位置的中心點進(jìn)行重新繪制,GIS數(shù)據(jù)相當(dāng)龐大,如果頻繁重新繪制,會使拖拽效果很不流暢,所以需要繪制部分有很強(qiáng)的調(diào)度能力,實現(xiàn)通過提前繪制屏幕面積4倍的區(qū)域,如圖2所示,使用戶在一定范圍內(nèi)拖拽流暢。通過二維矩陣變換的方式對原有屏幕上的圖元進(jìn)行平移變換。
圖2 預(yù)繪制區(qū)域
隨著人們對用戶體驗和視覺沖擊力追求不斷地提高,GIS組件將會被應(yīng)用到更炫的應(yīng)用程序中,然而,由于當(dāng)今的大部分GIS組件界面仍是基于Windows窗口創(chuàng)建通過GDI實現(xiàn),導(dǎo)致應(yīng)用程序中的視感官效果受到了很大限制。為了實現(xiàn) GIS組件效果的更廣泛使用,本文以如何開發(fā)基于.Net3.0的WPF技術(shù)的GIS基本組件功能為主要內(nèi)容,希望能對不同的用戶提供參考。
[1] 胡振文.地理信息系統(tǒng)原理與應(yīng)用.中國鐵道出版社.2006.
[2] Charles Petzold.A Guide to the Microsoft Window Presentation Foundation. Publishing House of Electronics Industry.2008.
[3] 李勝樂.Mapinfo地理信息系統(tǒng)二次開發(fā)實例.電子工業(yè)出版社.2004.
[4] 王占全.地理信息系統(tǒng)(GIS)開發(fā)工程案例精選.人民郵電出版社.2006.
[5] Charles Petzold著,蔡學(xué)鏞譯.Windows Presentation Foundation程序設(shè)計指南.2008.