,, ,,,6
(1.新疆農(nóng)業(yè)大學(xué)林業(yè)研究所,烏魯木齊 830000;2.滁州學(xué)院 計算機與信息工程學(xué)院,安徽 滁州 239000;3.滁州學(xué)院 地理信息與旅游學(xué)院,安徽 滁州 239000;4.新疆衛(wèi)星應(yīng)用中心,烏魯木齊 830000;5.中國科學(xué)院遙感與數(shù)字地球研究所,北京 100101;6.河南大學(xué) 計算機與信息工程學(xué)院,河南 開封 475004)
GIS已廣泛應(yīng)用在農(nóng)、林、水利、交通等各行各業(yè),其基礎(chǔ)理論不斷被完善,GIS軟件的功能也從最初簡單的顯示、輸出,到具備高級的統(tǒng)計分析、空間分析等功能,再到與網(wǎng)絡(luò)、遙感、VR等各種新技術(shù)相結(jié)合,功能越來越強大。與此同時,遙感技術(shù)也取得了長足的進步,除了作為GIS應(yīng)用更新數(shù)據(jù)的重要來源之一,對于遙感數(shù)據(jù)自身處理分析算法的應(yīng)用研究也越來越多,能從影像中提取出了更多的信息,廣泛應(yīng)用于資源普查、環(huán)境監(jiān)測等方面。遙感與GIS各有優(yōu)勢且互補性強,兩者的結(jié)合是發(fā)展的必然趨勢[1-3]。
遙感與GIS的結(jié)合,多體現(xiàn)在數(shù)據(jù)的使用層面。用遙感數(shù)據(jù)提取出來的信息,進行GIS分析和應(yīng)用,是最常見的結(jié)合方式。在系統(tǒng)軟件方面,遙感與GIS系統(tǒng)的集成方案還不夠完善,既有專門處理遙感數(shù)據(jù)的遙感軟件如:ENVI、ERDAS等,也有專業(yè)的GIS軟件如:ArcGIS、SuperMap等,各軟件之間單獨存在,且各成體系。即使ArcGIS與ENVI之間的集成,也只是體現(xiàn)在數(shù)據(jù)互操作、平臺之間以及系統(tǒng)一體化集成開發(fā)這三個方面。其集成開發(fā)的方式,也只是ENVI/IDL與ArcGIS桌面定制,或者是與ArcGIS Engine/ArcGIS Server進行集成。這種傳統(tǒng)GIS軟件的集成方式,多使用代碼將遙感算法固定在系統(tǒng)中。此類方案在后期的系統(tǒng)維護和功能擴展中的弊端便顯露出來,修改或增加一個功能算法,需要重新編碼,編譯生成新程序,出現(xiàn)“牽一發(fā)而動全身”的局面,從而導(dǎo)致系統(tǒng)的可維護性不高。利用插件技術(shù)成為提高軟件的可擴展性和可重用性的重要技術(shù)手段之一[4-5],然而插件仍需實現(xiàn)眾多接口,編寫大量代碼。
借鑒其他行業(yè)的經(jīng)驗,如朱穎芳,謝建全[6]采用XML來描述界面上組件的信息,通過解析XML來動態(tài)的生成界面,實現(xiàn)了界面的重用以及界面與系統(tǒng)的分離。胡貞[7]通過XML實現(xiàn)地理信息系統(tǒng)表示層、應(yīng)用層、數(shù)據(jù)層之間的數(shù)據(jù)交換,并用 ArcGIS Engine 組件和 VB.NET 進行二次開發(fā),完成了某市信息管網(wǎng)地理信息系統(tǒng)建設(shè)。盧學(xué)鶴等[8]使用插件技術(shù)實現(xiàn)了森林資源地理信息系統(tǒng)的開發(fā),降低了系統(tǒng)功能的耦合度。然而在GIS與遙感相結(jié)合方面,進行的應(yīng)用研究較少,如何將遙感算法快速靈活地與GIS系統(tǒng)集成,提高代碼重用率,降低維護難度,并將算法的實現(xiàn)代碼與系統(tǒng)平臺相分離[9],成為了GIS與遙感結(jié)合急需解決的問題之一。
結(jié)合插件動態(tài)加載程序模塊的思想與XML技術(shù),本文提出一種面向遙感的GIS專題應(yīng)用算法模塊動態(tài)集成框架,在分析遙感算法運行特點和需求的基礎(chǔ)上,搭建GIS算法集成框架,將算法界面、算法的實現(xiàn)代碼與系統(tǒng)平臺分離出來,使用XML描述文件作為遙感算法與系統(tǒng)平臺溝通的橋梁,構(gòu)建GIS專題應(yīng)用系統(tǒng),為GIS系統(tǒng)和遙感算法結(jié)合提供新的思路與方法。
遙感數(shù)據(jù)覆蓋范圍廣、獲取速度快的特點使之成為了眾多行業(yè)重要的數(shù)據(jù)來源,對遙感數(shù)據(jù)處理和分析研究的算法也不斷涌現(xiàn)出來,如各種分類算法、分割算法、反演算法、融合算法等。應(yīng)用在不同領(lǐng)域,產(chǎn)生了更多更具有針對性的算法,如林業(yè)應(yīng)用中的森林生物量估算算法、森林結(jié)構(gòu)信息提取算法;農(nóng)業(yè)中地表溫度反演算法、作物估產(chǎn)模型等。
無論何種算法模型,其基本模式可抽象成:參數(shù)→模型→執(zhí)行(見圖1),參數(shù)按其類型,可分為值類型與文件類型,值類型一般是模型中對應(yīng)各種參數(shù)因子的值,而文件類型一般是指需要傳入模型的文件的物理路徑,或輸出文件的物理路徑等。模型算法既可以通過代碼的形式,內(nèi)置在需要集成的軟件中,也可以封裝成單獨的文件,如可執(zhí)行文件(EXE)、動態(tài)鏈接庫文件(DLL)、IDL編寫的PRO或SAV文件等,這類單獨的文件,在進行系統(tǒng)建設(shè)時可單獨調(diào)用,降低了系統(tǒng)與具體算法之間的耦合度。故可將算法所需參數(shù),通過XML文件進行描述,在系統(tǒng)調(diào)用某一算法時,可將XML文件作為參數(shù)傳入,由算法內(nèi)部解析,參與運算。
圖1 運行模式圖
常用的商業(yè)軟件,如ArcGIS、MapGIS、SuperMap等,功能強大、內(nèi)容豐富,但在行業(yè)或?qū)I(yè)領(lǐng)域應(yīng)用時,系統(tǒng)不具有針對性,絕大多數(shù)功能會被閑置,造成系統(tǒng)資源浪費。在實際應(yīng)用中,常利用一些GIS軟件提供的資源包,進行二次開發(fā)、或利用開源GIS軟件,將常用功能提取出來,構(gòu)建具有基本功能、可定制的專題GIS系統(tǒng)平臺,然而很多功能會在開發(fā)時固定在程序中,后期修改、維護困難。因此,可采用一種新的方式來解決功能添加刪除的問題,除常用功能外,其他功能通過配置文件的形式,動態(tài)地添加進系統(tǒng)中。減少資源浪費,使系統(tǒng)更具有針對性和可擴展性。系統(tǒng)框架如圖2所示。
圖2 系統(tǒng)平臺框架
框架總體上可分為兩部分,一部分為GIS基本功能,包括數(shù)據(jù)的加載顯示、地圖圖層的管理、基本的空間分析和整飾輸出等功能。另一部分是專題應(yīng)用算法模塊,包括模型配置文件、界面控件庫、參數(shù)交換文件。為實現(xiàn)系統(tǒng)具有動態(tài)加載算法的功能,和更具有可擴展性,降低系統(tǒng)維護難度,用戶只需要調(diào)整設(shè)計模型配置文件中的內(nèi)容即可。系統(tǒng)在初始化時讀取配置文件,根據(jù)配置文件中的內(nèi)容,實例化控件并添加至系統(tǒng)中。
模型配置文件是在本系統(tǒng)中,用于對算法等信息進行描述的文件。為使算法能與GIS系統(tǒng)靈活、方便地集成,將需要集成的算法進行結(jié)構(gòu)化的描述,分為四個層次:“系統(tǒng)”、“模型”、“算法”、“參數(shù)”。并使用XML對算法進行組織。編寫XML文件的過程,也就是為待集成的算法,搭建系統(tǒng)界面的過程[6]。下面對這四個層次進行詳細的描述。
1.3.1 系統(tǒng)(System)
System是對將要構(gòu)建系統(tǒng)總體的描述。有兩部分內(nèi)容,第一部分是系統(tǒng)名稱(SysName),通過該節(jié)點,設(shè)置所構(gòu)建系統(tǒng)的名稱,根據(jù)該節(jié)點中的內(nèi)容,系統(tǒng)在啟動時,便能讀取該節(jié)點中的值,并將節(jié)點中的內(nèi)容,作為系統(tǒng)窗體的名稱進行顯示,實現(xiàn)了動態(tài)更改系統(tǒng)名稱的功能。第二部分是模型(Model),是一系列算法的集合,所有屬于同一模型的算法,將被包含在同一個Model中。一個System節(jié)點下,可以放置多個Model平行節(jié)點,系統(tǒng)會根據(jù)Model節(jié)點的不同和數(shù)量,實例化多個不同數(shù)量的算法集合。
1.3.2 模型(Model)
Model是一系列算法的集合。一個完整系統(tǒng)需要集成的算法,在類型上可能不止一種,我們把相似或為實現(xiàn)同一目標的算法歸為一類,稱為一個模型(Model)。一個Model中又包含了兩部分,第一部分是名稱屬性(Name),是對這類算法進行總體的描述。第二部分是算法(Algorithm),該節(jié)點是對算法進行描述的模塊,一個模型中,也可以包含多個算法。
1.3.3 算法(Algorithm)
Algorithm是具體算法的描述模塊。該模塊包含了以下幾類屬性:算法名稱(Name)、簡稱(ShortName)、圖標(PicPath)、文件執(zhí)行路徑(Process)、描述信息(Description)、參數(shù)(Arg),通過這些屬性,可將算法的主要信息進行詳細的描述。此時算法執(zhí)行文件,已經(jīng)被打包成DLL、exe、SAV等可供程序調(diào)用的文件形式,通過在算法節(jié)點中指定算法執(zhí)行文件的物理位置,在需要時,可更新位于該位置的算法文件,無需重新更改系統(tǒng)源代碼,實現(xiàn)了算法代碼與系統(tǒng)代碼分離,降低了與系統(tǒng)之間的耦合性。
1.3.4 參數(shù)(Arg)
Arg是算法所需參數(shù)的描述模塊。該模塊包括參數(shù)名稱(Name)、參數(shù)標題(Title)、參數(shù)描述(Description)、文件類型參數(shù)(Process)、值類型參數(shù)(Value)等信息。在編寫具體算法時,需預(yù)先約定好參數(shù)的個數(shù)、類型、以及順序等信息,當實例化完成各個參數(shù)后,可將這些參數(shù),按照事先約定的參數(shù)個數(shù)、類型及順序,將參數(shù)傳入待執(zhí)行算法,參與算法運行。
在模型配置文件中存儲算法執(zhí)行文件的物理路徑,而算法執(zhí)行文件以exe、pro、sav、dll等形式獨立存在,減少了與GIS系統(tǒng)平臺之間的關(guān)聯(lián)性。XML格式的模型配置文件,能夠清晰地表達各個層次之間包含與被包含的關(guān)系,下面是一段模型配置文件的例子。
傳統(tǒng)的開發(fā)方式會根據(jù)算法需要,為每一個算法功能添加不同的窗口和控件,并進行布局,以及設(shè)置各個控件的屬性,編程實現(xiàn)對應(yīng)的功能。然而這種方式,界面重用性差、界面與功能代碼耦合性高,后期維護困難[10]。為此可將一些共性的控件進行抽象,并實現(xiàn)相應(yīng)的代碼功能。根據(jù)模型配置文件的描述,動態(tài)實例化模型配置文件中要求的不同類型和數(shù)量的控件,同時根據(jù)描述文件中的內(nèi)容,設(shè)置與控件相關(guān)的其他屬性,以簡化工作,提高程序的可擴展性。
根據(jù)模型配置文件中定義的各個節(jié)點,本文設(shè)計了對應(yīng)的控件,這些控件有:參數(shù)控件,包括值類型和文件類型;值類型的參數(shù)控件,是針對值類型的參數(shù)而設(shè)計的控件,如可供運行的閾值、文本等信息;文件類型的參數(shù)控件,針對文件類型的參數(shù)設(shè)計的控件,可以用來選擇計算機中存儲的文件,或者系統(tǒng)中已經(jīng)加載的圖層等;同時還需要設(shè)計參數(shù)設(shè)置面板,用于放置參數(shù)控件的面板;模型運行面板,用于判斷參數(shù)是否合理,以及設(shè)置保存路徑;結(jié)果查看面板,是算法運行結(jié)果的查看面板(見圖3)。
圖3 參數(shù)準備界面
參數(shù)交換文件是根據(jù)遙感算法的特點而設(shè)計的XML格式文件。當算法參數(shù)控件實例化完成后,用戶可以根據(jù)需要,在界面上填入各種所需參數(shù)信息,系統(tǒng)會將這些參數(shù)序列化為一個XML格式的參數(shù)交換文件。在運行算法時,系統(tǒng)會開啟新的線程,調(diào)用原先在模型配置文件中存儲的算法文件,并將XML格式的參數(shù)交換文件作為參數(shù)傳入算法,此時該算法需要在其內(nèi)部進行解析,獲得其運行所需參數(shù),參與運算。由于篇幅關(guān)系,現(xiàn)只把主要節(jié)點進行描述,參數(shù)交換文件的主要描述如下。
文件描述了算法運行中所需的各種參數(shù),主要節(jié)點為InputParameters節(jié)點和Outputparameters節(jié)點。InputParameters中包含了用戶在界面中填寫輸入的各類參數(shù)的名稱以及值。參數(shù)節(jié)點的名稱及參數(shù)的個數(shù),隨模型配置文件中名稱和個數(shù)的變化而變化。Outputparameters節(jié)點包含了文件輸出路徑(OutDir)以及用于判斷算法運行狀態(tài)的進度文件(ProgressFile)、異常文件信息(ExceptionFile)。進度文件和異常文件由具體算法內(nèi)部控制。算法在運行期間會不斷地向進度文件輸出進度信息,進度信息的數(shù)值為0至100,系統(tǒng)平臺會讀取其中的值,并進行顯示。異常文件則用來判斷當前算法的執(zhí)行進度和運行狀態(tài),若算法運行異常,系統(tǒng)會將異常信息保存到該文件中,以便后期查看及維護。
為了驗證本文設(shè)計的集成框架的高效性和實用性,以新疆高分綜合應(yīng)用示范管理服務(wù)平臺系統(tǒng)為例進行說明。
系統(tǒng)目的是在具有基本GIS功能的條件下,將項目所需的各種遙感模型算法集成在同一個系統(tǒng)中。由于這些算法并不是同一個單位進行研發(fā),故形式多樣。使用傳統(tǒng)開發(fā)方案,為每一個新算法增加新界面、集成新算法等操作都較為繁瑣,耗時耗力。且隨著項目進度不同,不能同時進行系統(tǒng)集成工作,為新增加算法而需不斷修改源代碼,以適應(yīng)新增內(nèi)容。按照本文提出的設(shè)計方式,搭建GIS系統(tǒng)平臺,構(gòu)建通用算法控件,將算法的各種描述信息寫進XML格式的模型配置文件,通過添加、修改XML文件中相應(yīng)的節(jié)點,更改界面顯示效果,增加新功能,并通過修改模型配置文件中,算法節(jié)點下的執(zhí)行文件路徑,實現(xiàn)對系統(tǒng)中算法的更新。由于篇幅關(guān)系,先以一種算法的添加為例進行說明。
新疆高分綜合應(yīng)用示范管理服務(wù)平臺系統(tǒng):
為把對高分影像數(shù)據(jù)進行監(jiān)督分類的算法進行集成,按照上述方式修改模型配置文件系統(tǒng)名稱為“新疆高分綜合應(yīng)用示范管理服務(wù)平臺”、模型名稱為“森林資源”、算法名稱為“林果分類模型”以及所需的參數(shù),包括感興趣區(qū)域文件參數(shù)、待分類影像參數(shù)及其他屬性信息,文件內(nèi)容如下所示。
需要注意的是,在文件中配置的執(zhí)行算法運行程序、算法圖標等信息,使用了相對位置,需要放置在系統(tǒng)啟動目錄中約定的文件夾下,程序會按照約定內(nèi)容,解析相對位置,找到文件存放的絕對位置。
根據(jù)上節(jié)模型配置文件中的內(nèi)容,程序在啟動時,根據(jù)模型配置文件中包含的節(jié)點信息,實例化相應(yīng)數(shù)量和種類的控件,并添加至系統(tǒng)中,并根據(jù)節(jié)點中的屬性信息,設(shè)置控件的屬性。在系統(tǒng)中設(shè)置好各項參數(shù)以后,點擊程序中的運行按鈕,程序便會調(diào)用模型配置文件中,算法節(jié)點下所對應(yīng)的算法執(zhí)行文件,并將設(shè)置好的參數(shù)傳入,運行算法。效果顯示如圖4~5所示。
圖4 參數(shù)面板
新疆高分綜合應(yīng)用示范管理服務(wù)平臺的主要功能如下圖6所示,包括任務(wù)設(shè)定、數(shù)據(jù)分析、專題信息提取、信息綜合表現(xiàn)與制圖、簡報成果發(fā)布、系統(tǒng)設(shè)置。
圖5 結(jié)果查看
圖6 系統(tǒng)主要功能
2.3.1 任務(wù)設(shè)定
主要是用來確定需要進行操作的數(shù)據(jù)空間范圍,和所需數(shù)據(jù)的時間范圍。
2.3.2 數(shù)據(jù)分析
集合了常用的空間分析功能,以及地圖操作工具,包括緩沖區(qū)分析、疊加分析;面積量算、距離量算、角度量算;平移、放大、縮小等操作。
2.3.3 專題信息提取
是程序用于集成各類算法的模塊,在本實例中,集成了森林資源分類算法,算法信息通過模型配置文件描述,程序經(jīng)過解析文件、實例化相應(yīng)的控件添加至程序中,該算法以影像數(shù)據(jù)和感興趣區(qū)域為參數(shù),用于遙感影像的數(shù)據(jù)分類。
2.3.4 信息綜合表現(xiàn)與制圖
在數(shù)據(jù)處理完成之后,利用該模塊中的功能,可以實現(xiàn)地圖等數(shù)據(jù)的整飾輸出。包括添加比例尺、圖例、指北針、圖名、文本信息等地圖要素,以及設(shè)置輸出地圖的分辨率、尺寸大小等。
2.3.5 簡報成果發(fā)布
該模塊提供管理各種文檔資料的功能,包括文件的增刪改查,復(fù)制下載等操作。可為項目各種資料,提供簡單易用的管理功能。
為將遙感算法與GIS系統(tǒng)靈活動態(tài)集成,本文提出了一種面向遙感算法的GIS系統(tǒng)動態(tài)集成框架,為遙感算法與GIS系統(tǒng)的集成,提供新的思路,并在實際中應(yīng)用,取得了良好的效果,具有以下優(yōu)點:
1)將遙感算法的實現(xiàn)代碼與系統(tǒng)分離,系統(tǒng)只負責(zé)調(diào)用配置文件中指定位置的算法文件,降低了系統(tǒng)與算法之間的耦合度,提高了系統(tǒng)的可維護性。
2)通過修改模型配置文件中的節(jié)點,不需重新編碼和編譯,便能增加和修改算法,更新系統(tǒng)界面,使得界面設(shè)計與系統(tǒng)平臺分離,方便了后期功能的增刪等操作。