姜斌,黃祥志,杜震洪*,張豐,劉仁義
(1. 浙江大學 浙江省資源與環(huán)境信息系統(tǒng)重點實驗室, 浙江 杭州 310028; 2. 浙江大學 地理信息科學研究所, 浙江 杭州 310027; 3. 中國科學院 遙感與數(shù)字地球研究所, 北京 100101)
地理信息系統(tǒng)(GIS)軟件用來解決地理空間數(shù)據(jù)的存儲、管理、顯示、分析等問題,應用廣泛[1]. 遙感專題應用系統(tǒng)(下文也稱“專題系統(tǒng)”)是一種常見的GIS軟件,用于提取遙感影像特定的專題信息,具有對地圖與遙感影像進行瀏覽操作、數(shù)據(jù)分析、專題信息提取、專題制圖等功能. 農業(yè)、林業(yè)、災害、氣象等領域[2-8]為更好地服務于其行業(yè)需求,需從遙感影像中提取相應的專題信息,各領域均有其特定的專題系統(tǒng). 當前,遙感衛(wèi)星數(shù)據(jù)多樣,遙感專題應用系統(tǒng)作為連接遙感影像和用戶過程中最重要的一環(huán),承擔著將數(shù)據(jù)向知識轉化的重任. 數(shù)據(jù)的爆炸式增長和高分辨率衛(wèi)星的快速發(fā)展使行業(yè)對遙感專題應用系統(tǒng)的需求不斷增大,快速開發(fā)不同領域的專題應用系統(tǒng)具有現(xiàn)實意義.
以往,各行業(yè)往往獨立開發(fā)GIS軟件或遙感專題應用系統(tǒng),使得功能組件的重用度不高,造成較大的人力浪費;同時,基于傳統(tǒng)模式,如集成二次開發(fā)模式開發(fā)的系統(tǒng),要增加調整功能,需修改代碼重新編譯. 對于如何快速構建GIS軟件,學者和相關公司針對功能重用、快捷開發(fā)等進行了一些研究. 李廣強等[9]提出了一種基于控件和XML配置技術的可定制的軟件開發(fā)方案,可對部分功能進行定制,但未完全解決靈活性等問題,當需求變化時仍需要修改代碼. 佃袁勇等[2]利用插件方法構建了林帶信息管理系統(tǒng),在一定程度上解決了部分功能的靈活“插拔”問題. 美國ESRI公司推出的Web AppBuilder for ArcGIS,提供“所見即所得”式應用程序,可用于構建2D和3D的web 應用程序,無須編寫代碼,已得到應用[10]但僅限web應用. 遙感專題應用系統(tǒng)與web應用具有共同的特點,因此,有必要簡化開發(fā)過程,實現(xiàn)快速構建.
本文就如何快速定制遙感專題應用系統(tǒng),提高定制的靈活性進行了相關研究. 通過分析遙感專題應用系統(tǒng),并根據(jù)其特點提出了一種基于組件的遙感專題應用系統(tǒng)的動態(tài)實時定制框架,開發(fā)了一個“所見即所得”的定制平臺. 基于此,無須編寫任何代碼,可快速定制和開發(fā)遙感專題應用系統(tǒng),從而簡化不同行業(yè)專題應用開發(fā)的過程,降低開發(fā)的學習成本,實現(xiàn)遙感數(shù)據(jù)在各行業(yè)的快速應用. 靈活定制、“所見即所得”的設計和“零代碼”開發(fā)是本框架的特點.
不同行業(yè)的遙感專題應用系統(tǒng),具有較多通用功能,差別往往在專題信息的提取模塊.專題系統(tǒng)的功能一般包括GIS通用功能和遙感專題信息提取功能. GIS通用功能一般包括地圖瀏覽操作、數(shù)據(jù)處理、專題圖制圖等,專題提取功能模塊指提取相關專題信息的功能. 總結文獻[2-8]發(fā)現(xiàn),遙感專題應用系統(tǒng)通常具有如圖1所示的模塊和流程.
圖1 遙感專題應用系統(tǒng)的模塊與流程圖Fig.1 Modules and flowchart of remote sensing thematic system
為減少各行業(yè)重復開發(fā)造成的資源浪費,有必要設計一套通用的遙感專題應用系統(tǒng)框架. 對專題提取功能,可建立相應的專題算法庫或專題模塊,按需取用;大部分遙感專題應用系統(tǒng)可以共用GIS通用功能. 本文將遙感專題應用系統(tǒng)中各功能設計成組件形式,通過組件的拼裝定制專題系統(tǒng).
基于上述分析,設計了一套基于組件的遙感專題應用系統(tǒng)定制框架. 其思路是采用組件的方式定制遙感專題應用系統(tǒng),脫離軟件開發(fā)過程中的硬編碼體系,用XML靈活表示遙感專題應用系統(tǒng)所采用的各個組件及其關系. 在本框架中,將遙感專題應用系統(tǒng)中的功能和界面按組件進行封裝,專題系統(tǒng)實際上是多個組件的集合,組件和組件間的關系通過XML文檔表示. 如圖2所示,一個遙感專題應用系統(tǒng)對應一份XML文檔,XML文檔通過解析形成專題系統(tǒng). 當需要對專題系統(tǒng)進行增加和刪除操作時,可通過配置XML來實現(xiàn);當需要對某個功能進行升級時,只須更新相應的組件并分發(fā)給用戶.
圖2 定制框架的結構Fig.2 The structure of customization framework
基本思想是將大型系統(tǒng)的基礎功能劃分為多個獨立的單元,通過接口將組件組裝起來,從而實現(xiàn)基礎的系統(tǒng)功能[11-12]. 如ArcEngine等二次開發(fā)平臺,提供了用于開發(fā)的GIS功能組件,并結合相應的集成開發(fā)環(huán)境進行開發(fā)[13]. 筆者借鑒上述模式,簡化組件的概念和關系,將遙感專題應用系統(tǒng)中的所有內容均視為組件. 其中,一部分組件具有實際GIS功能,比如地圖控件、圖層列表、放大縮小控件、專題信息提取組件等,稱為功能類組件;另一部分組件是為界面布局所設計的,如各個層級的容器等,稱為容器類組件. 功能類組件中含不同粒度的GIS功能組件;容器類組件提供各界面的布局框架,支撐用戶軟件界面的設計. 這兩類組件共同構成該框架的組件體系.利用這些組件,不必編寫軟件代碼,通過XML文件便可構建遙感專題應用系統(tǒng)軟件.
圖3 組件劃分示例圖Fig.3 The example of component partitioning
圖3為一個簡單的組件劃分示例,以此說明功能類組件和容器類組件的區(qū)別. 在此軟件中,具有4個功能類組件,分別為上部的“添加圖層”“手形工具”和下部的“地圖控件”“圖層信息控件”. 除此之外,界面其他部分均為容器類組件,用于布局界面框架.容器類組件可以層級嵌套,如上部的2個按鈕放在一個文本為“地圖操作”的容器中,同時該容器又放在了一個文本為“地圖”的上一級容器(Tab頁面)中,下部的“圖層信息控件”放在一個可隱藏的容器里,用圖釘實現(xiàn)該容器的隱藏與顯示.
圖4為組件接口關系圖,用以說明組件需要遵守的接口規(guī)范.頂級接口為IGiasComponent,該接口定義了每個組件所具有的屬性,包括ParentContainer(即父容器)屬性;其下的2個接口分別為IGiasUI和IGiasContainer,其中,IGiasUI表示功能類組件,IGiasContainer表示容器類組件;不同類型功能類組件又可分為不同接口,如表示按鈕的IGiasButtonCmd接口、表示非按鈕命令的IGiasOtherCmd接口、表示面板的IGiasCtrl接口.
圖4 組件接口類關系圖Fig.4 The class diagram of component
每個組件均具有相應的屬性,組件的屬性描述了組件的規(guī)則狀態(tài). 有些是在公共接口中定義的公共屬性,比如組件的名稱、位置等,有些則是某些組件獨有的.
一般來說,功能類組件并非獨立存在的,需要多個組件配合才能實現(xiàn)其功能.某些組件具有輸入或輸出參數(shù),需要組件間制定相應的關聯(lián)規(guī)則. 基于組件間的關系,設計了如下規(guī)則: (1) 綁定,指2個或多個組件間需要綁定才可以建立關系,如放大按鈕組件對地圖控件的操作需要進行綁定;(2) 輸入輸出,指組件間具有輸入輸出的關系,如一個組件需要調用另一個組件的變量,或者一個組件需要將運行結果輸出到另一個組件上;(3) 事件開放,指一個組件可以開放某個方法事件并提供給另外的組件進行調用. 如圖3所示的示例采用了綁定規(guī)則,點擊“添加圖層”按鈕后在“地圖控件”中便可添加圖層,需要“添加圖層”組件去綁定“地圖控件”.
組件類庫是設計專題系統(tǒng)的基礎. 基于前述接口規(guī)范,任何人都可針對遙感專題應用系統(tǒng)設計功能組件庫. 可以根據(jù)接口開發(fā)組件類庫,也可以在已有的系統(tǒng)上進行拆分、改造和封裝,并將組件類庫嵌入到該框架中.
XML指可擴展標記語言,具有自我描述性,用來傳輸和存儲數(shù)據(jù). 由于XML文件簡單易讀,占用空間小,所以本框架采用XML來記錄遙感專題應用系統(tǒng)所采用的組件、組件屬性和組件間的關系. 在本框架所采用的XML結構中,用元素標簽名代表組件,用元素的屬性描述組件的屬性和組件間的關系,如組件的名字、大小、綁定關系等,組件間元素的層級關系代表遙感專題應用系統(tǒng)中組件間的包含關系.
圖5是XML的一個書寫案例,亦是圖3所示軟件的XML存儲文件. 為使用方便,在XML文件中,以組件的“命名空間+類名”(命名空間是.NET中使用的代碼組織形式)作為元素節(jié)點的名稱,以組件的屬性名稱作為XML中元素的屬性名稱,采用特定的英文單詞等標識組件間的關系(如Bind、Output、Event分別表示綁定、輸出、事件關系). 用此方式書寫的XML具有很好的自我描述性,也為后續(xù)的XML解析提供了方便. 在圖5中,每個元素標簽均代表一個組件,簡化起見,命名空間以x表示. 最內層節(jié)點為功能類組件,如x.AddLayer表示“添加圖層”組件,x.Pan表示“手形工具”組件,x.UCLegend表示“圖層信息”組件,x.UCMap表示“地圖控件”組件. 其他節(jié)點為容器類組件,比如根節(jié)點x.System表示整個系統(tǒng). 每個節(jié)點具有自己的屬性,如Name為組件名字,全局不可重復.為避免重復,本文采用特定方式計算全局ID標記.“手形工具”和“添加圖層”需要綁定“地圖控件”后才可使用,因此,在x.AddLayer和x.Pan節(jié)點中局使用Bind.Map1指示x.UCMap組件的名字. 圖5便是圖3中軟件示例的XML文件形式.
圖5 本框架中的XML文件示例Fig.5 An example of XML file in the proposed framework
該框架可通過讀取XML將其解析為遙感專題應用系統(tǒng). 主要通過反射技術[14-15]實現(xiàn)XML解析. 應用反射技術,可以在程序中動態(tài)創(chuàng)建對象、訪問對象的各種變量、屬性和方法等,從而使程序具有更好的擴展性和靈活性.
本框架將XML文件按層級由內而外、同層級由上而下生成相應組件. 首先,對每一個元素節(jié)點進行反射,生成相應的對象,并設置相應的屬性,由于Name是全局唯一的,所以由Name生成的組件對象不會重名.當外層組件生成后,將生成的內層組件添加到外層組件(父容器)里. 當全部組件對象創(chuàng)建完成后,設置組件間的關系,包括綁定關系、事件觸發(fā)等.
采用XML表達的遙感專題應用系統(tǒng)不同于一般GIS開發(fā)的硬編碼模式. 在硬編碼模式中,軟件的功能已寫入代碼,若想增、刪或升級,大多需要重新編譯、打包軟件等. 本框架用XML表達專題系統(tǒng),只要將組件類庫和XML文件分開,在保證接口不變的情況下,組件類庫可隨時升級;在擁有組件類庫的情況下,用戶可根據(jù)功能需求在XML中按需定制.
在前述框架體系中,一個XML文件描述一個遙感專題應用系統(tǒng)軟件. 通過拷貝給用戶相應的XML文件,即可生成一個遙感專題應用系統(tǒng)軟件,從而大大降低軟件的分發(fā)成本. 但是,手工撰寫XML文件存在效率低、出錯率高等問題. 針對此情況,在此框架基礎上搭建了專題系統(tǒng)定制平臺,可利用該平臺定制遙感專題應用系統(tǒng),并將其保存為XML文件.
圖6為遙感專題應用系統(tǒng)定制平臺,可利用組件進行專題系統(tǒng)的可視化定制,并將定制內容保存為XML文件. 也可打開XML文件并解析為專題系統(tǒng)繼續(xù)編輯. 為便于表達,將圖6用黑色矩形劃分為4個區(qū)域,區(qū)域1為基礎功能區(qū),區(qū)域2為功能組件區(qū),區(qū)域3為組件屬性設置區(qū),區(qū)域4為軟件設計區(qū). 區(qū)域4默認為空白,圖6中的區(qū)域4正在進行專題系統(tǒng)設計.
圖6 遙感專題應用系統(tǒng)定制平臺Fig.6 The platform for designing thematic system software
在該平臺上,用戶可將區(qū)域2的組件拖進軟件設計區(qū)域,或從區(qū)域1通過快捷按鈕添加一些容器進入軟件設計區(qū)域,從而組裝出相應的遙感專題應用系統(tǒng). 在組件布局完成之后,通過區(qū)域3進行組件屬性和組件間關系的設置. 之后便完成了遙感專題應用系統(tǒng)設計.
當組件被拖動進入設計區(qū)時,會通過反射實時創(chuàng)建組件對象,每個對象均具有唯一的名字. 對多個對象之間進行關系設置時,用反射動態(tài)獲取對象的屬性、方法、變量.
從圖6中可以看出,被拖動進入設計區(qū)域的組件可以實時運行. 如區(qū)域4中通過點擊“添加圖層”按鈕在“地圖控件”組件上添加了一幅中國地圖. 本設計平臺對拖動進入的組件,可實時生成相應的對象,具有動態(tài)實時的效果,可以“所見即所得”地查看每個功能組件的形態(tài)和組件間配合的運行效果. 不同于一般IDE開發(fā)軟件的過程,需要編譯之后才能運行,如采用ArcEngine加Visual Studio的二次開發(fā),在加入組件后,需要編譯運行程序才可以查看運行效果.
設計完成后,用戶可以將設計區(qū)域的內容保存為XML文件. 通過遍歷各個層級的組件,將組件的全名、屬性、綁定關系等按照前述章節(jié)規(guī)則進行保存. 保存后的XML文件,可通過解析成為相應的遙感專題應用系統(tǒng).
在本框架中,GIS和遙感的組件設計可獨立開發(fā),也可根據(jù)所用開發(fā)語言,選擇國內外相關的GIS開源代碼進行封裝;解析XML文檔所采用的反射技術,在當前Java或C#等常見的面向對象的語言中,具有較高的生成效率. 所以,本文所提出的框架具有可行性. 同時,基于此框架的遙感專題系統(tǒng)已應用于相關部門.
基于開源GIS庫DotSpatial設計了GIS組件庫,封裝了近100個GIS功能類組件,涵蓋地圖瀏覽、制圖工具、地圖分析等多種功能;基于已有系統(tǒng),拆分和封裝了涵蓋農業(yè)、林業(yè)、災害等領域的遙感信息提取組件,通過統(tǒng)一的界面對專題提取算法進行調用;基于DevComponent DotNetBar設計了一系列容器類組件,包括系統(tǒng)、子系統(tǒng)、各類可隱藏容器等.
基于前述組件類庫,用定制平臺設計了數(shù)個遙感專題應用系統(tǒng),均已應用于相關部門. 圖7為采用該框架定制的一個“城鎮(zhèn)化資源環(huán)境效應研究示范子系統(tǒng)”,利用該系統(tǒng),可對城鎮(zhèn)的陸表變化、內部功能區(qū)、熱環(huán)境等進行專題信息提取. 該系統(tǒng)包括任務設定模塊、數(shù)據(jù)分析模塊、專題信息提取模塊、信息表現(xiàn)與綜合制圖、簡報成果發(fā)布等功能模塊,可以流程化地實現(xiàn)遙感數(shù)據(jù)的選取、加載、分析、提取、制圖、成果發(fā)布等一系列過程.
圖7 城鎮(zhèn)化資源環(huán)境效應研究示范子系統(tǒng)Fig.7 The interface of the urbanization resource and environmental effect system
需特別指出的是,在GIS軟件中,處理大量或大幅影像時,效率通常是制約適用性和實用性的重要指標. 在本示例所實現(xiàn)的定制化專題軟件中,采用Gdal庫讀取影像,構建相應的金字塔,進行影像加載,具有較高的效率;對于影像的空間分析處理等,DotSpatial已能基本滿足要求.
由于所用組件均通過XML配置,不同行業(yè)均易配置相應的專題提取組件,也可通過調整GIS通用功能組件,實現(xiàn)不同行業(yè)專題系統(tǒng)的定制. 實踐證明,基于已有的功能組件,設計如“GIS通用功能(數(shù)據(jù)選取/數(shù)據(jù)處理/專題圖制作/簡報制作等)”加“專題信息提取模塊”類型的遙感專題應用系統(tǒng),非常方便快捷.
提出了一種基于XML的遙感專題應用系統(tǒng)定制框架. 在該框架下,將專題系統(tǒng)所需的功能封裝為組件形式,用XML來描述遙感專題應用系統(tǒng),將XML解析為遙感專題應用系統(tǒng)軟件. 同時,為方便軟件設計,提供了基于此框架的遙感專題應用系統(tǒng)定制平臺,可以快速、方便、動態(tài)、實時地設計專題系統(tǒng).
本框架為遙感專題應用系統(tǒng)的設計提供了便利,較以往的集成二次開發(fā)更簡潔、更方便. 基于此框架,用戶不必寫任何代碼就可定制相應的軟件. 將組件開發(fā)任務交給專業(yè)人員,輕松實現(xiàn)遙感專題應用系統(tǒng)的定制. 同時,由于用XML文件表達軟件,在用戶具有相應組件庫的前提下,開發(fā)者通過分發(fā)XML文件便可為用戶提供遙感專題應用系統(tǒng)軟件. 本框架具有較好的動態(tài)擴展性,可方便地設計新的組件類庫,也可將其擴展到其他軟件開發(fā)領域.
本框架也存在一些不足,如對于重用性較低的組件需要定制開發(fā);對復雜組件考慮得還不夠全面和細致. 未來將更好地完善此框架,使相關軟件的開發(fā)更便利.