黃夢龍
(1.福建省基礎(chǔ)地理信息中心,福建 福州 350001)
基于Skyline平臺的插件式3DGIS應(yīng)用框架研究
黃夢龍1
(1.福建省基礎(chǔ)地理信息中心,福建 福州 350001)
面向項(xiàng)目開發(fā)的3DGIS應(yīng)用系統(tǒng),由于未采用統(tǒng)一的框架和開發(fā)規(guī)范,存在開發(fā)人員分工協(xié)作困難、功能模塊難以復(fù)用、系統(tǒng)升級維護(hù)工作量大等問題。研究了功能模塊運(yùn)行時(shí)動態(tài)加載、框架程序與插件通信機(jī)制、系統(tǒng)運(yùn)行時(shí)資源注入方法等插件式應(yīng)用框架程序?qū)崿F(xiàn)的相關(guān)技術(shù),設(shè)計(jì)開發(fā)了基于Skyline的插件式3DGIS應(yīng)用框架;并基于該框架開發(fā)了若干3DGIS行業(yè)應(yīng)用系統(tǒng),驗(yàn)證了該應(yīng)用框架的可用性。
3DGIS;插件式;依賴注入;應(yīng)用框架
由于其表達(dá)直觀、蘊(yùn)含信息豐富的特點(diǎn),3DGIS得到了廣泛應(yīng)用。TerraExplorer是Skyline公司研發(fā)的3DGIS,支持海量三維數(shù)據(jù)集成,具有產(chǎn)品線齊全、功能豐富、運(yùn)行流暢等特點(diǎn)[1]。福建省基礎(chǔ)地理信息中心基于Skyline三維平臺開發(fā)了大量的3DGIS,在林業(yè)、氣象、水利等行業(yè)得到了廣泛應(yīng)用。然而隨著應(yīng)用的推廣,三維應(yīng)用系統(tǒng)在開發(fā)和維護(hù)過程中存在的問題也逐漸暴露出來。這些系統(tǒng)都是針對特定項(xiàng)目開發(fā)的,未采用統(tǒng)一的架構(gòu),導(dǎo)致系統(tǒng)的升級維護(hù)困難。隨著項(xiàng)目的拓展,參與開發(fā)人員的增加,需要解決系統(tǒng)功能模塊劃分和開發(fā)人員分工協(xié)作的問題。在開發(fā)成果復(fù)用方面,由于沒有采用統(tǒng)一的設(shè)計(jì)結(jié)構(gòu),各項(xiàng)目積累的功能模塊難以實(shí)現(xiàn)二進(jìn)制級別的復(fù)用,影響了開發(fā)效率。此外,由于用戶需求呈現(xiàn)出多樣性與不確定性,在用戶需求變化時(shí),現(xiàn)有的開發(fā)方法需大量修改程序才能滿足用戶要求,難以快速應(yīng)對用戶需求的變化。
針對上述問題,本文基于Skyline平臺,采用應(yīng)用框架程序的設(shè)計(jì)思路,結(jié)合插件式GIS技術(shù),設(shè)計(jì)開發(fā)了插件式3DGIS應(yīng)用框架程序。
應(yīng)用框架是一個(gè)具有部分功能的應(yīng)用程序半成品,提供了可在應(yīng)用程序之間共享的可復(fù)用的公共結(jié)構(gòu);同時(shí)也是一個(gè)可復(fù)用的設(shè)計(jì)構(gòu)件,規(guī)定了應(yīng)用的體系結(jié)構(gòu),闡明了整個(gè)設(shè)計(jì)協(xié)作構(gòu)件之間的依賴關(guān)系、責(zé)任分配和控制流程,最終表現(xiàn)為一組抽象類以及其實(shí)例之間協(xié)作的方法[2]。應(yīng)用框架提供了通用的服務(wù),在此基礎(chǔ)上可建立不同應(yīng)用。插件技術(shù)是在程序的設(shè)計(jì)開發(fā)過程中,把應(yīng)用程序分成框架程序和功能模塊兩部分,每個(gè)功能模塊由若干個(gè)實(shí)現(xiàn)具體業(yè)務(wù)邏輯功能的類(插件)組成,框架程序與插件能夠相互通信,并在框架程序不變的情況下,通過增減或修改插件來調(diào)整應(yīng)用程序的功能[3]。插件式GIS應(yīng)用框架程序規(guī)定了插件的實(shí)現(xiàn)方式,為功能模塊提供各種基礎(chǔ)服務(wù),負(fù)責(zé)功能模塊的動態(tài)加載、管理、插件的識別、創(chuàng)建與調(diào)用。
插件式GIS應(yīng)用框架的實(shí)現(xiàn)需要解決功能模塊運(yùn)行時(shí)動態(tài)加載與管理、插件與框架程序的通信、系統(tǒng)運(yùn)行時(shí)資源注入方法等問題,本文針對相關(guān)技術(shù)進(jìn)行了研究。
1)基于反射技術(shù)的功能模塊運(yùn)行時(shí)動態(tài)加載技術(shù)。系統(tǒng)功能模塊運(yùn)行時(shí)動態(tài)加載是實(shí)現(xiàn)基于框架程序的應(yīng)用系統(tǒng)功能動態(tài)擴(kuò)展、快速適應(yīng)用戶需求變化的重要機(jī)制。當(dāng)前有多種方式實(shí)現(xiàn)模塊的動態(tài)加載,包括Win32 DLL(動態(tài)鏈接庫)的運(yùn)行時(shí)加載和基于COM接口的功能模塊動態(tài)加載等。本文基于.NET的反射機(jī)制實(shí)現(xiàn)了系統(tǒng)功能模塊運(yùn)行時(shí)動態(tài)加載。
反射是系統(tǒng)審查元數(shù)據(jù)并動態(tài)收集其類型信息的能力。反射是.NET中的重要機(jī)制,通過反射可在運(yùn)行時(shí)獲得.NET中每個(gè)類型(類、結(jié)構(gòu)、委托、接口和枚舉等)的成員,包括方法、屬性、事件等[4]。使用反射獲取程序集的元數(shù)據(jù)信息,即可動態(tài)地創(chuàng)建類型的實(shí)例,再調(diào)用類型的方法或訪問其字段和屬性。本文總結(jié)了3DGIS功能模塊實(shí)現(xiàn)所需的通用要求,設(shè)計(jì)了系統(tǒng)功能模塊類(插件)的接口和類層次結(jié)構(gòu),利用這些接口和類,通過反射機(jī)制即可識別系統(tǒng)的可用功能模塊和插件。
2)基于事件的框架程序與插件通信機(jī)制。系統(tǒng)運(yùn)行時(shí),框架程序必須及時(shí)把自身的狀態(tài)通知插件,以便插件及時(shí)做出響應(yīng),調(diào)整自身狀態(tài),如三維地形場景加載后,往往需通知插件是否可執(zhí)行下一步操作。此外,插件在自身狀態(tài)發(fā)生變化時(shí)也需通知框架及其他協(xié)作插件??蚣艹绦蚺c插件的通信可采用回調(diào)函數(shù)和事件的方式進(jìn)行。本文歸納了插件和框架程序通信的需求,采用事件的通信機(jī)制,定義了一套完整的框架程序事件。插件只需訂閱相關(guān)事件即可實(shí)現(xiàn)與框架程序的交互。本文還研究了事件轉(zhuǎn)發(fā)機(jī)制,在框架程序中提供了事件轉(zhuǎn)發(fā)的接口和功能,插件可向其協(xié)作的插件發(fā)送消息,從而較好地解決了插件與協(xié)作插件之間的通信問題。
3)基于配置的系統(tǒng)運(yùn)行時(shí)資源注入方法。在插件式3DGIS應(yīng)用框架中,由于功能模塊是動態(tài)擴(kuò)展的,其運(yùn)行所需的各種資源(數(shù)據(jù)庫連接、專題數(shù)據(jù)、運(yùn)行時(shí)配置等)也是變化的,傳統(tǒng)的由功能模塊主動獲取資源的方式變得不可行。本文借鑒Spring等Java開發(fā)框架普遍采用的依賴注入模式[5-6],設(shè)計(jì)了資源配置規(guī)范和配置信息獲取接口,先由框架程序在啟動時(shí)讀取所有的資源配置信息,再在創(chuàng)建插件時(shí)將資源獲取接口注入插件中,較好地解決了功能模塊運(yùn)行時(shí)所需資源的獲取問題。
本文以DotNetBar 9.3為界面開發(fā)庫,以Visual Studio 2010為集成開發(fā)環(huán)境,以Skyline TerraExplorer Pro 6.1為3DGIS開發(fā)平臺,采用流行的Ribbon界面風(fēng)格,設(shè)計(jì)了插件式3DGIS應(yīng)用框架程序。應(yīng)用框架程序結(jié)構(gòu)及構(gòu)建過程如圖 1所示。
圖1 應(yīng)用框架程序結(jié)構(gòu)及構(gòu)建過程
應(yīng)用框架程序的實(shí)現(xiàn)包括應(yīng)用框架程序開發(fā)接口庫的實(shí)現(xiàn)和應(yīng)用框架基本功能的實(shí)現(xiàn)。
2.1 應(yīng)用框架程序開發(fā)接口庫的實(shí)現(xiàn)
應(yīng)用框架程序開發(fā)接口庫,由應(yīng)用模塊開發(fā)規(guī)范接口、框架程序事件接口、運(yùn)行時(shí)日志輸出接口和三維地圖操作接口等組成。運(yùn)用應(yīng)用模塊開發(fā)規(guī)范接口,可開發(fā)擴(kuò)展功能模塊(插件),在模塊中實(shí)現(xiàn)具體的業(yè)務(wù)功能,并通過框架程序事件接口、三維地圖操作接口實(shí)現(xiàn)與框架程序的通信、操作三維地形和訪問各種專題數(shù)據(jù)。
圖2 插件接口的UML層次結(jié)構(gòu)
應(yīng)用模塊開發(fā)規(guī)范接口定義了插件實(shí)現(xiàn)需遵循的接口規(guī)范,簡化的插件接口UML層次結(jié)構(gòu)如圖2所示。IPlugin接口用于在反射時(shí)識別模塊里的類是否為本系統(tǒng)的功能插件,其余派生的接口用于定義具體的插件。根據(jù)插件是否與三維地圖有交互操作,將插件分為命令(Command)、工具(Tool)、復(fù)雜控件(ToolControl)和停靠窗口(DockWindow)。ToolConrol插件是一種特殊類型的插件,可在框架窗體上創(chuàng)建界面較復(fù)雜的控件或自定義控件。DockWindow插件用于對自定義控件進(jìn)行封裝,形成在框架主窗體中的停靠窗體。
框架程序事件接口封裝了TerraExplorer的三維地球事件,包括屬性事件、三維地形、三維對象狀態(tài)變化通知事件以及框架程序內(nèi)部狀態(tài)變化通知事件等。插件通過訂閱這些事件實(shí)現(xiàn)了與框架程序和三維地形的交互。此外框架程序還提供了自定義事件機(jī)制,可實(shí)現(xiàn)插件之間自定義事件的轉(zhuǎn)發(fā),提高了插件間的交互與協(xié)作能力。
三維地圖操作接口封裝了三維地形和三維對象相關(guān)的各種基本操作,包括三維地球操作、三維工程樹操作、對象創(chuàng)建管理等。在創(chuàng)建插件時(shí),將該接口注入到插件對象中。三維地圖操作接口可有效減少系統(tǒng)升級帶來的維護(hù)工作量,在Skyline軟件升級時(shí),只需升級框架的三維操作類庫和相關(guān)接口,而基于框架開發(fā)的應(yīng)用則無需做大的改變。
系統(tǒng)運(yùn)行日志對診斷系統(tǒng)運(yùn)行發(fā)生的位置,快速修改系統(tǒng)錯(cuò)誤有重要作用。本文基于開源日志組件log4net的運(yùn)行時(shí)日志輸出接口,提供了系統(tǒng)框架程序和各插件在系統(tǒng)運(yùn)行時(shí)輸出系統(tǒng)運(yùn)行關(guān)鍵信息和運(yùn)行時(shí)異常詳細(xì)信息的相關(guān)方法[7]?;赬ML配置的資源配置管理接口提供了應(yīng)用系統(tǒng)所需資源動態(tài)按需加載機(jī)制,并在插件創(chuàng)建時(shí)注入該接口,使插件可獲取運(yùn)行時(shí)所需的各種資源。
2.2 應(yīng)用框架基本功能的實(shí)現(xiàn)
應(yīng)用框架程序?qū)崿F(xiàn)了應(yīng)用程序模塊管理、系統(tǒng)界面配置管理、系統(tǒng)資源配置管理等程序管理功能,統(tǒng)一的用戶角色管理、權(quán)限管理、日志管理等系統(tǒng)管理維護(hù)功能,以及三維地圖視圖操作等GIS基本功能。
基于本文設(shè)計(jì)的框架程序,可有效減少重復(fù)開發(fā)3DGIS各項(xiàng)基本功能的工作量,簡化功能模塊的開發(fā)。應(yīng)用系統(tǒng)只需利用通信接口與框架程序交互,通過各種配置接口獲取各種資源,再根據(jù)具體的業(yè)務(wù)邏輯實(shí)現(xiàn)功能模塊,最后通過配置組裝,完成系統(tǒng)的開發(fā),目前該框架已應(yīng)用于福建省基礎(chǔ)地理信息中心的3DGIS開發(fā)中。福建省3DGIS集成了福建省道路、境界、地名等基礎(chǔ)地理信息數(shù)據(jù),福建各地市的三維模型數(shù)據(jù)以及行業(yè)專題數(shù)據(jù),提供了三維地圖瀏覽、三維標(biāo)注與分析、地名和POI查詢、三維路線漫游、城市模型查詢、瀏覽等基本功能,以及國土、森林防火、海關(guān)監(jiān)管、水利、政務(wù)信息、電力規(guī)劃、港口規(guī)劃、交通輔助規(guī)劃、城市輔助規(guī)劃等行業(yè)應(yīng)用功能,共計(jì)數(shù)十個(gè)模塊近百個(gè)插件。系統(tǒng)具有數(shù)據(jù)量大、結(jié)構(gòu)復(fù)雜、功能豐富的特點(diǎn)。利用本文的應(yīng)用框架程序,較好地實(shí)現(xiàn)了功能模塊的分割和集成,大大提高了開發(fā)的效率。系統(tǒng)界面如圖 3所示。
圖3 福建省3DGIS界面
此外,本文研究的應(yīng)用框架程序還廣泛應(yīng)用于福建省數(shù)字城市應(yīng)用示范建設(shè)中。永春縣三維決策支持系統(tǒng)是數(shù)字永春地理空間框架建設(shè)的應(yīng)用示例,該系統(tǒng)的部分功能模塊復(fù)用了福建省3DGIS的開發(fā)模塊,并結(jié)合永春縣國土資源局的相關(guān)需求,設(shè)計(jì)實(shí)現(xiàn)了查詢定位、城市漫游、土地利用信息查詢展示、城鎮(zhèn)規(guī)劃輔助決策、高速建設(shè)輔助決策等功能模塊[8],見圖 4。
圖4 永春縣三維決策支持系統(tǒng)界面
基于該應(yīng)用框架程序還完成了其他行業(yè)應(yīng)用系統(tǒng)的開發(fā),包括南平市土地收儲三維展示系統(tǒng)、三明市水土流失遙感調(diào)查3DGIS、寧德市水務(wù)管線三維查詢展示系統(tǒng)等,有效推動了行業(yè)應(yīng)用系統(tǒng)的建設(shè)。
基于Skyline的TerraExplorer三維開發(fā)平臺,本文利用.NET反射技術(shù)和事件機(jī)制,實(shí)現(xiàn)了插件式3DGIS應(yīng)用框架程序。框架接口的穩(wěn)定性及其提供對模塊的動態(tài)管理的特點(diǎn),使得基于應(yīng)用框架程序開發(fā)的功能模塊具有較強(qiáng)的復(fù)用性,系統(tǒng)具有較強(qiáng)的可擴(kuò)展性,并能快速響應(yīng)需求變化,較好地解決了3DGIS開發(fā)存在的問題。
隨著應(yīng)用的深入,用戶對系統(tǒng)界面的個(gè)性化要求也越來越高。盡管該框架提供了換膚功能,可設(shè)置多種風(fēng)格的界面,但由于采用了Ribbon界面風(fēng)格,界面的布局和樣式較為固定。在后續(xù)的工作中,將繼續(xù)研究基于應(yīng)用框架程序的系統(tǒng)定制方法,提供更為靈活的界面布局和定制方法,提高用戶體驗(yàn)。
[1]潘立,張旭,任東風(fēng).基于Skyline的三維GIS構(gòu)建與研究[J].測繪與空間地理信息,2016,39(8):90-93
[2]宋國兵.基于GIS的應(yīng)用程序開發(fā)框架的設(shè)計(jì)與實(shí)現(xiàn)[D].杭州:浙江大學(xué),2010:7-17
[3]崔修濤,吳健平,張偉鋒.插件式GIS的開發(fā)[J].華東師范大學(xué)學(xué)報(bào)(自然科學(xué)版),2005(4):51-57
[4]宋智軍,邱仲潘.Visual C#2010從入門到精通[M].北京:電子工業(yè)出版社,2010:223-233
[5]翟劍錕.Spring框架技術(shù)分析及應(yīng)用研究[D].北京:中國科學(xué)院大學(xué),2013:9-24
[6]姜林美,李國剛,杜勇前.結(jié)合AOP思想和依賴注入技術(shù)的輕量級MVC框架[J].華僑大學(xué)學(xué)報(bào)(自然科學(xué)版),2016,31(7):92-97
[7]蔡宇,趙正文.基于NHibernate和Log4Net實(shí)現(xiàn)用戶登錄合法性驗(yàn)證[J].信息技術(shù),2008(11):32-34
[8]黃夢龍.基于三維GIS的城市規(guī)劃輔助決策技術(shù)研究[J].測繪與空間地理信息,2015,38(12):165-167
P208
B
1672-4623(2017)07-0053-03
10.3969/j.issn.1672-4623.2017.07.016
黃夢龍,高級工程師,主要從事基礎(chǔ)地理信息數(shù)據(jù)建庫和3DGIS應(yīng)用開發(fā)相關(guān)工作。
2017-03-14。
項(xiàng)目來源:國家重點(diǎn)研發(fā)計(jì)劃資助項(xiàng)目(2016YFC0502900);福建省測繪地理信息局科技創(chuàng)新資助項(xiàng)目(2015J12)。