彭海濤,李愛迪,呂 煊,李愛美
(1.重慶市國土資源和房屋勘測(cè)規(guī)劃院,重慶 400020;2.重慶市土地利用與遙感監(jiān)測(cè)工程技術(shù)研究中心,重慶 400020;3.國家遙感應(yīng)用工程技術(shù)研究中心 重慶研究中心,重慶 400020)
區(qū)縣級(jí)的國土資源管理部門是我國現(xiàn)行土地管理制度的最終執(zhí)行者[1],承擔(dān)了全區(qū)國土資源行政審批和業(yè)務(wù)辦理工作。區(qū)縣級(jí)的國土資源綜合數(shù)據(jù)監(jiān)管系統(tǒng)數(shù)據(jù)庫包括了全區(qū)的影像圖、土地利用現(xiàn)狀圖、土地利用總體規(guī)劃圖、基本農(nóng)田、城市規(guī)劃圖、征供地?cái)?shù)據(jù)、儲(chǔ)備數(shù)據(jù)、城鎮(zhèn)土地級(jí)別和基準(zhǔn)地價(jià)數(shù)據(jù)、執(zhí)法監(jiān)察等各種數(shù)據(jù)。在這些數(shù)據(jù)的基礎(chǔ)上,區(qū)縣級(jí)的國土資源綜合數(shù)據(jù)監(jiān)管系統(tǒng)為區(qū)縣國土管理部門全面、快速、準(zhǔn)確掌握全區(qū)國土資源數(shù)量、質(zhì)量、結(jié)構(gòu)和空間布局,實(shí)現(xiàn)“批、供、用、補(bǔ)、查”的土地資源信息化管理提供了有力武器。
我國縣級(jí)行政區(qū)劃數(shù)量龐大,各區(qū)縣國土管理部門工作職責(zé)和內(nèi)容各有特點(diǎn),不同時(shí)段有不同需求。如果按照傳統(tǒng)的軟件開發(fā)方法,每個(gè)項(xiàng)目都從頭做起,不同項(xiàng)目的復(fù)用部分也只是停留在代碼的復(fù)制或者類庫的重用上面,不僅開發(fā)效率低,不能滿足項(xiàng)目團(tuán)隊(duì)開發(fā)合作的需要,而且開發(fā)出來的軟件可伸縮性差,后續(xù)的軟件維護(hù)需要開發(fā)人員對(duì)整個(gè)系統(tǒng)架構(gòu)十分熟悉,加大了軟件的維護(hù)成本[2]。目前軟件復(fù)用已經(jīng)從通用類的復(fù)用發(fā)展到面向領(lǐng)域的應(yīng)用框架。應(yīng)用框架是同時(shí)具備一致性、可重用性、可擴(kuò)展性3種特性的一組類庫,它提供了構(gòu)建一個(gè)系統(tǒng)所需要的基本架構(gòu)及功能,協(xié)助程序員在快速、不易出錯(cuò)的情況下研發(fā)應(yīng)用程序[3]。因此開發(fā)一套能在各區(qū)縣快速部署又能適應(yīng)不同區(qū)縣的具體需求的國土資源綜合數(shù)據(jù)監(jiān)管系統(tǒng)應(yīng)用框架非常有意義。本文在對(duì)重慶市區(qū)縣級(jí)國土資源綜合數(shù)據(jù)監(jiān)管系統(tǒng)開發(fā)與實(shí)踐進(jìn)行總結(jié)的基礎(chǔ)上,提出了基于插件式GIS技術(shù)的區(qū)縣級(jí)國土資源綜合數(shù)據(jù)監(jiān)管系統(tǒng)應(yīng)用框架的開發(fā)策略。
一個(gè)插件框架由主程序和插件構(gòu)成,主程序是插件的載體。插件不同于組件和構(gòu)建[4],是一種遵循一定規(guī)范,通過應(yīng)用程序接口編寫出來的程序模塊,其本質(zhì)是在不修改程序主體的情況下對(duì)軟件的功能進(jìn)行加強(qiáng),當(dāng)插件的接口被公開時(shí),任何人都可以編寫插件程序來解決特定的問題[5]。當(dāng)應(yīng)用程序已經(jīng)部署,業(yè)務(wù)卻發(fā)生變化時(shí),就可以通過讀取插件配置信息,載入新的應(yīng)用構(gòu)件實(shí)現(xiàn)變化的業(yè)務(wù)[6]。在插件式框架中,主程序與插件之間信息交流的橋梁就是接口,這種基于接口的設(shè)計(jì)模式稱為橋接模式[7]。在插件式框架中接口分為主程序接口和插件接口2個(gè)部分。主程序接口完全由主程序?qū)崿F(xiàn),將主程序接口暴露給插件,插件可以獲取主程序的資源和數(shù)據(jù);插件接口由插件實(shí)現(xiàn),主程序通過插件接口可以展示插件處理后的數(shù)據(jù)[8]。
插件技術(shù)的實(shí)現(xiàn)方式有腳本方式、COM方式和.NET平臺(tái)的反射方式[9]。系統(tǒng)開發(fā)中使用.NET平臺(tái)中的反射技術(shù)來實(shí)現(xiàn)插件的動(dòng)態(tài)加載。GIS功能使用美國ESRI公司的ArcEngine開發(fā)包提供的.NET編程接口。通過運(yùn)行時(shí)授權(quán),基于ArcEngine開發(fā)包二次開發(fā)的GIS程序可以脫離ArcGIS桌面程序而獨(dú)立部署。系統(tǒng)界面使用了基于.NET Framework第三方的控件DotNetBar。
區(qū)縣級(jí)國土資源綜合數(shù)據(jù)監(jiān)管系統(tǒng)應(yīng)用框架如圖1所示,框架由主程序框架和插件庫組成。通過主程序框架的主程序接口和插件接口,實(shí)現(xiàn)了主程序和插件之間的通信。主程序框架通過加載插件來擴(kuò)展系統(tǒng)的功能。一個(gè)插件對(duì)應(yīng)一個(gè)程序集,一個(gè)插件可以實(shí)現(xiàn)一個(gè)或多個(gè)功能,各功能必須分別實(shí)現(xiàn)規(guī)定的插件接口。
圖1 國土資源綜合數(shù)據(jù)監(jiān)管系統(tǒng)應(yīng)用框架圖
IMainApp是代表插件式應(yīng)用框架主程序的接口,該接口主要封裝了主程序窗體類AppMainForm、插件在內(nèi)存中的容器對(duì)象AppAllComObjectMemory、ESRI的AxMapControl地圖控件對(duì)象MainDataMapView、LayOut控件對(duì)象AxPageLayoutView、Toc控件對(duì)象CurrentTOCControlView以及其他反映當(dāng)前主程序狀態(tài)的對(duì)象屬性,并提供了對(duì)這些對(duì)象屬性操作的方法。主程序窗體類實(shí)現(xiàn)了IMainApp接口。通過主程序公開的接口和屬性,插件可以獲取主程序的數(shù)據(jù)進(jìn)行處理分析,插件也可以將處理分析后的結(jié)果數(shù)據(jù)傳回給主程序,改變主程序的狀態(tài)。因此系統(tǒng)中必須有一個(gè)靜態(tài)全局的主程序?qū)ο螅4媪酥鞒绦虻臓顟B(tài),而調(diào)用者不需要?jiǎng)?chuàng)建該對(duì)象。
插件接口規(guī)定了擴(kuò)展軟件功能的插件必須實(shí)現(xiàn)的接口,插件只有實(shí)現(xiàn)了規(guī)定接口中的方法和屬性才能被主程序加載識(shí)別。為了滿足系統(tǒng)功能的需求,本系統(tǒng)設(shè)計(jì)了以下2種繼承自插件接口的基類:BaseCommandEx和BaseToolEx,這2個(gè)類實(shí)現(xiàn)的方法和屬性如圖2所示。①BaseCommandEx類繼承自ArcEngine開發(fā)包下的ESRI.ArcGIS.SystemUI命名空間的ICommand接口,在主程序界面表現(xiàn)為一個(gè)命令按鈕。在該接口的OnClick方法中可以實(shí)現(xiàn)該插件對(duì)應(yīng)的按鈕被觸發(fā)時(shí)進(jìn)行的操作。OnCreate方法必須在插件生成時(shí)調(diào)用,將主程序中的地圖控件AxMapControl或制圖控件PageLayoutControl傳進(jìn)來,以便設(shè)置該命令默認(rèn)的交互對(duì)象。②BaseToolEx類繼承自ArEngine開發(fā)包下的ESRI.ArcGIS.SystemUI命名空間的ITool接口,在主程序界面表現(xiàn)為一個(gè)工具按鈕。命令按鈕直接點(diǎn)擊就可以,工具按鈕需要額外與界面進(jìn)行交互,因此需要實(shí)現(xiàn)額外的交互事件。
圖2 插件接口基類設(shè)計(jì)圖
主程序是一個(gè)用第三方的DotNetBar控件和ArcEngine的控件設(shè)計(jì)而成的可執(zhí)行程序(如圖3所示)。使用DotNetBar控件可以將主程序界面設(shè)計(jì)成類似Office風(fēng)格的界面,此外使用DotNetBar控件也易于用代碼控制界面的動(dòng)態(tài)生成。主程序主要負(fù)責(zé)插件相關(guān)的界面生成和主程序中GIS控件、界面控件和插件對(duì)象的交互工作。主程序界面的設(shè)計(jì)中主要考慮到靜態(tài)和動(dòng)態(tài)界面的設(shè)計(jì)。對(duì)于一些所有用戶都用到的軟件基礎(chǔ)功能對(duì)應(yīng)的靜態(tài)界面,只需要在軟件編譯前在主程序框架界面預(yù)先把這些插件對(duì)應(yīng)的按鈕(ButtonItem)添加,并將插件功能和對(duì)應(yīng)的按鈕關(guān)聯(lián)起來,如主程序界面中的“系統(tǒng)設(shè)置”、“視圖”、“制圖”、“工具”、“幫助”都屬于靜態(tài)界面,“地政地籍等專題”則屬于動(dòng)態(tài)加載界面。對(duì)于動(dòng)態(tài)加載的專業(yè)功能插件對(duì)應(yīng)的ButtonItem,則通過代碼設(shè)置其Command屬性,在Command控件的Executed事件中執(zhí)行這些ButtonItem對(duì)應(yīng)的觸發(fā)事件。Command是一個(gè)DotNetBar控件,Command實(shí)現(xiàn)了將界面設(shè)計(jì)與相應(yīng)函數(shù)的分離,降低系統(tǒng)內(nèi)部的耦合性,同時(shí)可以提高相應(yīng)函數(shù)的復(fù)用性。這種動(dòng)態(tài)界面設(shè)計(jì)方式是為了實(shí)現(xiàn)一種軟件的動(dòng)態(tài)配置技術(shù),在系統(tǒng)運(yùn)行時(shí)的某個(gè)未知時(shí)刻由用戶來動(dòng)態(tài)配置,使得主程序界面在不同權(quán)限的用戶面前呈現(xiàn)不同的功能。
圖3 主程序界面設(shè)計(jì)
隨著系統(tǒng)的不斷擴(kuò)展,開發(fā)的插件越來越多,如果系統(tǒng)啟動(dòng)后將所有插件都裝載入程序,會(huì)消耗計(jì)算機(jī)不必要的內(nèi)存。因此框架程序必須有一套管理插件的機(jī)制,確定哪些插件是必須加載的,哪些是不需要加載的。插件管理分為插件注冊(cè)管理和插件菜單管理。插件注冊(cè)管理界面如圖4所示,可以對(duì)實(shí)現(xiàn)規(guī)定接口的程序集進(jìn)行加載或卸載,插件菜單管理可以在程序運(yùn)行時(shí)動(dòng)態(tài)添加各種菜單面板,在菜單面板上增加按鈕,將按鈕與已經(jīng)注冊(cè)的插件功能進(jìn)行關(guān)聯(lián),并將修改的結(jié)果以xml文件保存。
圖4 系統(tǒng)插件管理界面
設(shè)計(jì)插件式應(yīng)用框架的關(guān)鍵在于確定系統(tǒng)的基礎(chǔ)功能和擴(kuò)展功能,即找出變化點(diǎn)和通用點(diǎn)[10]。區(qū)縣級(jí)國土資源綜合數(shù)據(jù)監(jiān)管系統(tǒng)是一個(gè)以地理空間數(shù)據(jù)為基礎(chǔ)的GIS系統(tǒng),系統(tǒng)以空間數(shù)據(jù)的管理、分析和展示為核心。GIS系統(tǒng)大部分操作都與地圖交互有關(guān),因此插件式GIS系統(tǒng)中的主程序接口的設(shè)計(jì)和擴(kuò)展點(diǎn)插件接口的設(shè)計(jì)必須考慮主程序GIS地圖控件和插件的交互,這是GIS插件系統(tǒng)設(shè)計(jì)中必須考慮的核心問題。基于插件式GIS技術(shù)的區(qū)縣級(jí)國土資源綜合數(shù)據(jù)監(jiān)管系統(tǒng)應(yīng)用框架可擴(kuò)展性強(qiáng),通過該應(yīng)用框架開發(fā)的系統(tǒng)已在重慶市多個(gè)區(qū)縣安裝使用,得到了實(shí)際的檢驗(yàn)。
[1]郭強(qiáng).國家級(jí)新區(qū)“一張圖”管地信息系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)研究——以重慶市兩江新區(qū)為例[D].重慶:西南大學(xué),2013
[2]聞平,王沖,楊林波,等.基于插件技術(shù)的GIS應(yīng)用框架的研究與實(shí)現(xiàn)[J].測(cè)繪通報(bào),2012(增刊):608-609
[3]黃忠成.Framework的設(shè)計(jì)與應(yīng)用——基于Windows Forms的應(yīng)用開發(fā)實(shí)踐[M].北京:電子工業(yè)出版社,2006
[4]李勇,岳建偉.基于.NET的插件式GIS應(yīng)用框架設(shè)計(jì)與實(shí)現(xiàn)[J].地理信息世界, 2010(4):82-86
[5]吳亮,楊凌云,尹艷斌.基于插件技術(shù)的GIS應(yīng)用框架的研究與實(shí)現(xiàn)[J].地球科學(xué),2006,31(5):609-614
[6]任鋼.C#創(chuàng)建插件業(yè)務(wù)平臺(tái)[J].電腦編程技巧與維護(hù),2009(9):19-23
[7]劉曦.插件式的海岸侵蝕災(zāi)害分析與評(píng)價(jià)GIS應(yīng)用框架研究[D].上海:華東師范大學(xué),2009
[8]李何,劉杰..NET平臺(tái)下基于反射技術(shù)的插件式框架的研究[J].軟件導(dǎo)刊,2009,8(11):25-26
[9]章志,都金康,卓鳳軍.基于.NET反射機(jī)制的GIS插件技術(shù)研究[J].測(cè)繪科學(xué),2011,36(4):151-155
[10]何文海,謝建剛.基于.NET平臺(tái)的插件式應(yīng)用框架開發(fā)[J].電腦知識(shí)與技術(shù),2007(15):755-756