黃夢龍
(1.福建省基礎地理信息中心,福建 福州 350001)
基于Skyline平臺的插件式3DGIS應用框架研究
黃夢龍1
(1.福建省基礎地理信息中心,福建 福州 350001)

面向項目開發的3DGIS應用系統,由于未采用統一的框架和開發規范,存在開發人員分工協作困難、功能模塊難以復用、系統升級維護工作量大等問題。研究了功能模塊運行時動態加載、框架程序與插件通信機制、系統運行時資源注入方法等插件式應用框架程序實現的相關技術,設計開發了基于Skyline的插件式3DGIS應用框架;并基于該框架開發了若干3DGIS行業應用系統,驗證了該應用框架的可用性。
3DGIS;插件式;依賴注入;應用框架
由于其表達直觀、蘊含信息豐富的特點,3DGIS得到了廣泛應用。TerraExplorer是Skyline公司研發的3DGIS,支持海量三維數據集成,具有產品線齊全、功能豐富、運行流暢等特點[1]。福建省基礎地理信息中心基于Skyline三維平臺開發了大量的3DGIS,在林業、氣象、水利等行業得到了廣泛應用。然而隨著應用的推廣,三維應用系統在開發和維護過程中存在的問題也逐漸暴露出來。這些系統都是針對特定項目開發的,未采用統一的架構,導致系統的升級維護困難。隨著項目的拓展,參與開發人員的增加,需要解決系統功能模塊劃分和開發人員分工協作的問題。在開發成果復用方面,由于沒有采用統一的設計結構,各項目積累的功能模塊難以實現二進制級別的復用,影響了開發效率。此外,由于用戶需求呈現出多樣性與不確定性,在用戶需求變化時,現有的開發方法需大量修改程序才能滿足用戶要求,難以快速應對用戶需求的變化。
針對上述問題,本文基于Skyline平臺,采用應用框架程序的設計思路,結合插件式GIS技術,設計開發了插件式3DGIS應用框架程序。
應用框架是一個具有部分功能的應用程序半成品,提供了可在應用程序之間共享的可復用的公共結構;同時也是一個可復用的設計構件,規定了應用的體系結構,闡明了整個設計協作構件之間的依賴關系、責任分配和控制流程,最終表現為一組抽象類以及其實例之間協作的方法[2]。應用框架提供了通用的服務,在此基礎上可建立不同應用。插件技術是在程序的設計開發過程中,把應用程序分成框架程序和功能模塊兩部分,每個功能模塊由若干個實現具體業務邏輯功能的類(插件)組成,框架程序與插件能夠相互通信,并在框架程序不變的情況下,通過增減或修改插件來調整應用程序的功能[3]。插件式GIS應用框架程序規定了插件的實現方式,為功能模塊提供各種基礎服務,負責功能模塊的動態加載、管理、插件的識別、創建與調用。
插件式GIS應用框架的實現需要解決功能模塊運行時動態加載與管理、插件與框架程序的通信、系統運行時資源注入方法等問題,本文針對相關技術進行了研究。
1)基于反射技術的功能模塊運行時動態加載技術。系統功能模塊運行時動態加載是實現基于框架程序的應用系統功能動態擴展、快速適應用戶需求變化的重要機制。當前有多種方式實現模塊的動態加載,包括Win32 DLL(動態鏈接庫)的運行時加載和基于COM接口的功能模塊動態加載等。本文基于.NET的反射機制實現了系統功能模塊運行時動態加載。
反射是系統審查元數據并動態收集其類型信息的能力。反射是.NET中的重要機制,通過反射可在運行時獲得.NET中每個類型(類、結構、委托、接口和枚舉等)的成員,包括方法、屬性、事件等[4]。使用反射獲取程序集的元數據信息,即可動態地創建類型的實例,再調用類型的方法或訪問其字段和屬性。本文總結了3DGIS功能模塊實現所需的通用要求,設計了系統功能模塊類(插件)的接口和類層次結構,利用這些接口和類,通過反射機制即可識別系統的可用功能模塊和插件。
2)基于事件的框架程序與插件通信機制。系統運行時,框架程序必須及時把自身的狀態通知插件,以便插件及時做出響應,調整自身狀態,如三維地形場景加載后,往往需通知插件是否可執行下一步操作。此外,插件在自身狀態發生變化時也需通知框架及其他協作插件。框架程序與插件的通信可采用回調函數和事件的方式進行。本文歸納了插件和框架程序通信的需求,采用事件的通信機制,定義了一套完整的框架程序事件。插件只需訂閱相關事件即可實現與框架程序的交互。本文還研究了事件轉發機制,在框架程序中提供了事件轉發的接口和功能,插件可向其協作的插件發送消息,從而較好地解決了插件與協作插件之間的通信問題。
3)基于配置的系統運行時資源注入方法。在插件式3DGIS應用框架中,由于功能模塊是動態擴展的,其運行所需的各種資源(數據庫連接、專題數據、運行時配置等)也是變化的,傳統的由功能模塊主動獲取資源的方式變得不可行。本文借鑒Spring等Java開發框架普遍采用的依賴注入模式[5-6],設計了資源配置規范和配置信息獲取接口,先由框架程序在啟動時讀取所有的資源配置信息,再在創建插件時將資源獲取接口注入插件中,較好地解決了功能模塊運行時所需資源的獲取問題。
本文以DotNetBar 9.3為界面開發庫,以Visual Studio 2010為集成開發環境,以Skyline TerraExplorer Pro 6.1為3DGIS開發平臺,采用流行的Ribbon界面風格,設計了插件式3DGIS應用框架程序。應用框架程序結構及構建過程如圖 1所示。

圖1 應用框架程序結構及構建過程
應用框架程序的實現包括應用框架程序開發接口庫的實現和應用框架基本功能的實現。
2.1 應用框架程序開發接口庫的實現
應用框架程序開發接口庫,由應用模塊開發規范接口、框架程序事件接口、運行時日志輸出接口和三維地圖操作接口等組成。運用應用模塊開發規范接口,可開發擴展功能模塊(插件),在模塊中實現具體的業務功能,并通過框架程序事件接口、三維地圖操作接口實現與框架程序的通信、操作三維地形和訪問各種專題數據。

圖2 插件接口的UML層次結構
應用模塊開發規范接口定義了插件實現需遵循的接口規范,簡化的插件接口UML層次結構如圖2所示。IPlugin接口用于在反射時識別模塊里的類是否為本系統的功能插件,其余派生的接口用于定義具體的插件。根據插件是否與三維地圖有交互操作,將插件分為命令(Command)、工具(Tool)、復雜控件(ToolControl)和停靠窗口(DockWindow)。ToolConrol插件是一種特殊類型的插件,可在框架窗體上創建界面較復雜的控件或自定義控件。DockWindow插件用于對自定義控件進行封裝,形成在框架主窗體中的停靠窗體。
框架程序事件接口封裝了TerraExplorer的三維地球事件,包括屬性事件、三維地形、三維對象狀態變化通知事件以及框架程序內部狀態變化通知事件等。插件通過訂閱這些事件實現了與框架程序和三維地形的交互。此外框架程序還提供了自定義事件機制,可實現插件之間自定義事件的轉發,提高了插件間的交互與協作能力。
三維地圖操作接口封裝了三維地形和三維對象相關的各種基本操作,包括三維地球操作、三維工程樹操作、對象創建管理等。在創建插件時,將該接口注入到插件對象中。三維地圖操作接口可有效減少系統升級帶來的維護工作量,在Skyline軟件升級時,只需升級框架的三維操作類庫和相關接口,而基于框架開發的應用則無需做大的改變。
系統運行日志對診斷系統運行發生的位置,快速修改系統錯誤有重要作用。本文基于開源日志組件log4net的運行時日志輸出接口,提供了系統框架程序和各插件在系統運行時輸出系統運行關鍵信息和運行時異常詳細信息的相關方法[7]。基于XML配置的資源配置管理接口提供了應用系統所需資源動態按需加載機制,并在插件創建時注入該接口,使插件可獲取運行時所需的各種資源。
2.2 應用框架基本功能的實現
應用框架程序實現了應用程序模塊管理、系統界面配置管理、系統資源配置管理等程序管理功能,統一的用戶角色管理、權限管理、日志管理等系統管理維護功能,以及三維地圖視圖操作等GIS基本功能。
基于本文設計的框架程序,可有效減少重復開發3DGIS各項基本功能的工作量,簡化功能模塊的開發。應用系統只需利用通信接口與框架程序交互,通過各種配置接口獲取各種資源,再根據具體的業務邏輯實現功能模塊,最后通過配置組裝,完成系統的開發,目前該框架已應用于福建省基礎地理信息中心的3DGIS開發中。福建省3DGIS集成了福建省道路、境界、地名等基礎地理信息數據,福建各地市的三維模型數據以及行業專題數據,提供了三維地圖瀏覽、三維標注與分析、地名和POI查詢、三維路線漫游、城市模型查詢、瀏覽等基本功能,以及國土、森林防火、海關監管、水利、政務信息、電力規劃、港口規劃、交通輔助規劃、城市輔助規劃等行業應用功能,共計數十個模塊近百個插件。系統具有數據量大、結構復雜、功能豐富的特點。利用本文的應用框架程序,較好地實現了功能模塊的分割和集成,大大提高了開發的效率。系統界面如圖 3所示。

圖3 福建省3DGIS界面
此外,本文研究的應用框架程序還廣泛應用于福建省數字城市應用示范建設中。永春縣三維決策支持系統是數字永春地理空間框架建設的應用示例,該系統的部分功能模塊復用了福建省3DGIS的開發模塊,并結合永春縣國土資源局的相關需求,設計實現了查詢定位、城市漫游、土地利用信息查詢展示、城鎮規劃輔助決策、高速建設輔助決策等功能模塊[8],見圖 4。

圖4 永春縣三維決策支持系統界面
基于該應用框架程序還完成了其他行業應用系統的開發,包括南平市土地收儲三維展示系統、三明市水土流失遙感調查3DGIS、寧德市水務管線三維查詢展示系統等,有效推動了行業應用系統的建設。
基于Skyline的TerraExplorer三維開發平臺,本文利用.NET反射技術和事件機制,實現了插件式3DGIS應用框架程序。框架接口的穩定性及其提供對模塊的動態管理的特點,使得基于應用框架程序開發的功能模塊具有較強的復用性,系統具有較強的可擴展性,并能快速響應需求變化,較好地解決了3DGIS開發存在的問題。
隨著應用的深入,用戶對系統界面的個性化要求也越來越高。盡管該框架提供了換膚功能,可設置多種風格的界面,但由于采用了Ribbon界面風格,界面的布局和樣式較為固定。在后續的工作中,將繼續研究基于應用框架程序的系統定制方法,提供更為靈活的界面布局和定制方法,提高用戶體驗。
[1]潘立,張旭,任東風.基于Skyline的三維GIS構建與研究[J].測繪與空間地理信息,2016,39(8):90-93
[2]宋國兵.基于GIS的應用程序開發框架的設計與實現[D].杭州:浙江大學,2010:7-17
[3]崔修濤,吳健平,張偉鋒.插件式GIS的開發[J].華東師范大學學報(自然科學版),2005(4):51-57
[4]宋智軍,邱仲潘.Visual C#2010從入門到精通[M].北京:電子工業出版社,2010:223-233
[5]翟劍錕.Spring框架技術分析及應用研究[D].北京:中國科學院大學,2013:9-24
[6]姜林美,李國剛,杜勇前.結合AOP思想和依賴注入技術的輕量級MVC框架[J].華僑大學學報(自然科學版),2016,31(7):92-97
[7]蔡宇,趙正文.基于NHibernate和Log4Net實現用戶登錄合法性驗證[J].信息技術,2008(11):32-34
[8]黃夢龍.基于三維GIS的城市規劃輔助決策技術研究[J].測繪與空間地理信息,2015,38(12):165-167
P208
B
1672-4623(2017)07-0053-03
10.3969/j.issn.1672-4623.2017.07.016
黃夢龍,高級工程師,主要從事基礎地理信息數據建庫和3DGIS應用開發相關工作。
2017-03-14。
項目來源:國家重點研發計劃資助項目(2016YFC0502900);福建省測繪地理信息局科技創新資助項目(2015J12)。