陳晨 李健 張濤
北京工業大學計算機學院 北京 100124
地理信息系統(Geographic Information System,GIS)是一種基于計算機的工具,它可以對在地球上存在的東西和發生的事件進行成圖和分析。GIS是地理和計算機結合的產物,人們的生產和生活中80%以上的信息和地理空間位置有關,GIS近年來得到了廣泛關注和迅猛發展。
近年來 GIS組件化發展趨勢迅速,組件式平臺包括:Microsoft的COM、ActiveX控件,ESRI和MapInfo也分別推出了MapObjects和MapX。但是用戶體驗方面相對薄弱,為此本課題研究選用.Net3.0的 WPF,開發人員和設計人員可以通過 WPF創建更好的視覺效果、不同的用戶體驗。同時為了以后適應更多的基于WPF的GIS相關系統,我們可以直接復用此課題研發的組件,提高開發效率,減少成本。
GDI/GDI+是當今Windows桌面應用程序的主流圖形庫,GDI/GDI+圖形系統已經形成了很多年。它提供了2D圖形和文本功能,以及受限的圖像處理功能。
在WPF中,引入一種新的圖形合成引擎使2D/3D渲染效果以及動畫效果絢麗。高生產效率一直是微軟技術的一貫特點,WPF是對圖像編程更高層次的封裝,因此可以帶來更快的開發速度。使用 GDI/GDI+再加上復雜的幾何學知識,編寫大量代碼實現的效果,在 WPF下面只需要簡單的幾行XAML代碼。WPF也有弱點,由于是對 Direct3D的一層managed的封裝,在2D應用中其繪制效率較之GDI/GDI+相對不高。
隨著人們對用戶體驗和視覺沖擊力追求不斷地提高,客戶對GIS應用的展示效果要求也逐漸增多,他們的要求不僅限于傳統桌面風格的操作菜單、GIS標繪靜態展現的形式。
無論是實現GIS應用還是GIS組件,對于地理數據的繪制都是實現GIS很重要的一步,能否到選擇合適的界面顯示技術會對GIS組件繪制部分的最終效果以及開發效率造成很大的影響,所以挑選合適的界面顯示技術尤為重要,經過學習調研,對比介紹一下微軟的各種界面顯示技術:
(1)GDI
GDI不僅提供了圖形圖像的繪制功能,同時還對硬件顯示進行了更高層次的抽象。換句話說,它將硬件的復雜性封裝在了GDI API中,用戶使用起來更加方便。
(2)GDI+
顧名思義,GDI+是作為GDI的擴展而被引入到Windows中的。它提供了很多GDI所沒有的擴展功能,例如對JPG和PNG圖像格式支持,漸變陰影和抗鋸齒等。無論是 GDI還是 GDI+,它們最大的局限就是不支持硬件加速,同時無法展現動畫和3D圖像。
(3)DirectX
正如在前面所分析的那樣,GDI及其擴展 GDI+的一個最大問題就是不支持硬件加速和動畫。這對于游戲開發者來說,是無法接受的。為了解決這個問題,微軟開發了DirectX。DirectX能夠很好的利用硬件加速,能夠支持3D,全彩圖像,流媒體等等,非常適合游戲工業等對圖形圖像處理要求比較高的領域。
(4)WPF
WPF是微軟新一代圖形系統,運行在.NET Framework 3.0架構下,為用戶界面、2D/3D 圖形、文檔和媒體提供了統一的描述和操作方法。基于DirectX技術的WPF不僅帶來了前所未有的3D界面,而且其圖形向量渲染引擎也大大改進了傳統的2D界面。因為WPF是在DirectX的基礎上實現的,所以開發人員可以利用WPF創建簡單的UI元素,還可以更進一步,開發自定義的UI元素,例如網格(Grid),流文檔(FlowDocument)和橢圓(Ellipse)等。還可以利用WPF創建輕量級動畫。
依據客戶的客觀要求即實現類似游戲界面風格的GIS應用展示系統,以及上述界面顯示技術對比來分析:現在大部分流行的GIS應用系統和GIS組件界面整體還是沒有改變傳統Windows的風格,即便開發人員通過圖片資源進行美化,用戶體驗方面也沒有改變傳統的對話框、菜單等操作方式,這樣的系統適合應用,但是不適合絢麗的展示;開發人員也想到應用DirectX進行GIS應用展示系統的界面顯示進行實現,憑借DirectX對硬件加速、動畫、3D方面的支持,DirectX絕對可以制作出絢麗的界面,但是我們所開發的GIS應用展示系統很大一部分還在于功能,應用DirectX開發界面需要編寫大量的代碼去實現預期的效果,這樣大量的工作量則被消耗在界面編寫上;在來看封裝了DirectX的WPF,WPF支持開發人員創建特殊的 UI元素,所以設計人員可以大膽的想象華麗的顯示界面和獨特的界面用戶體驗,還可以輕松創建輕量級的動畫展示流程、演練相關的需求。應用 WPF開發適合于客戶對于界面的展示需求,而且應用 WPF制作界面的開發效率要遠高于DirectX,基于對界面展示效果和開發效率的考慮,所以選用WPF技術開發GIS應用展示系統是一種趨勢。
本文通過研究、學習國內外成功GIS組件范例的思想和方法,并且結合以前已有的相關開發經驗,研究、設計GIS組件的總體結構。主要的設計原則:要將各個功能系統劃分獨立,在保證良好性能的同時,兼顧可擴展性。組件設計框架如圖1。

圖1 基于WPF的GIS組件體系結構
應用面向對象的數據結構存儲從GIS數據讀出的信息,線、面、文字等信息,然后通過 WPF底層繪制函數繪制幾何圖元,在此需要研究找到 WPF中比底層的繪制方案,經過對WPF的學習,并進行性能方面的測試得到下述結論:
(1)應用WPF中的System.Windows.Shapes.Polyline類對解析后的線進行繪制。
(2)應用WPF中的System.Windows.Shapes.Polygon類對解析后的區域進行繪制。
(3)應用WPF中的System.Windows.Controls.TextBlock類對解析后的文字進行繪制。
應用面向對象的數據結構存儲從GIS數據讀出的信息,線、面、文字等信息,然后通過 WPF底層繪制函數繪制幾何圖元,在此需要研究找到 WPF中比底層的繪制方案,經過對WPF的學習,并進行性能方面的測試得到下述結論:
(1)應用WPF中的System.Windows.Shapes.Polyline類對解析后的線進行繪制。
(2)應用WPF中的System.Windows.Shapes.Polygon類對解析后的區域進行繪制。
(3)應用WPF中的System.Windows.Controls.TextBlock類對解析后的文字進行繪制。
實踐證明WPF的繪制效率不是很高,由于是對Direct3D的一層managed的封裝,性能成為我們關心的問題,尤其是在用戶交互的過程中,比如用戶對地圖進行拖拽,實現拖拽比較簡單的方法是以用戶拖拽到位置的中心點進行重新繪制,GIS數據相當龐大,如果頻繁重新繪制,會使拖拽效果很不流暢,所以需要繪制部分有很強的調度能力,實現通過提前繪制屏幕面積4倍的區域,如圖2所示,使用戶在一定范圍內拖拽流暢。通過二維矩陣變換的方式對原有屏幕上的圖元進行平移變換。

圖2 預繪制區域
隨著人們對用戶體驗和視覺沖擊力追求不斷地提高,GIS組件將會被應用到更炫的應用程序中,然而,由于當今的大部分GIS組件界面仍是基于Windows窗口創建通過GDI實現,導致應用程序中的視感官效果受到了很大限制。為了實現 GIS組件效果的更廣泛使用,本文以如何開發基于.Net3.0的WPF技術的GIS基本組件功能為主要內容,希望能對不同的用戶提供參考。
[1] 胡振文.地理信息系統原理與應用.中國鐵道出版社.2006.
[2] Charles Petzold.A Guide to the Microsoft Window Presentation Foundation. Publishing House of Electronics Industry.2008.
[3] 李勝樂.Mapinfo地理信息系統二次開發實例.電子工業出版社.2004.
[4] 王占全.地理信息系統(GIS)開發工程案例精選.人民郵電出版社.2006.
[5] Charles Petzold著,蔡學鏞譯.Windows Presentation Foundation程序設計指南.2008.