張建新,紀(jì) 凱
(1.安徽省第四測(cè)繪院,安徽 合肥230031;2.安徽交通職業(yè)技術(shù)學(xué)院,安徽 合肥230051)
在影像解譯過程中,大量的數(shù)據(jù)分析、處理工作需要通過GIS軟件來完成。目前常用的GIS軟件有ERDAS、ArcGIS等,這些軟件提供了功能強(qiáng)大的分析和處理工具;其中ArcToolbox的各種工具已經(jīng)被廣泛地應(yīng)用于實(shí)際生產(chǎn)中。然而在應(yīng)用過程中,需要把多種工具組合在一起,才能有效地完成某項(xiàng)具體的任務(wù)。另外待處理數(shù)據(jù)有著類型相同、數(shù)量龐大的特點(diǎn),如果每一項(xiàng)操作、每一個(gè)數(shù)據(jù)都需要人工干預(yù),勢(shì)必會(huì)降低生產(chǎn)效率;而且人工管理繁雜的原始資料和過渡數(shù)據(jù)更容易產(chǎn)生錯(cuò)誤。
ModelBuilder是一種可視化編程環(huán)境,直接利用ArcGIS平臺(tái)中已有的各類工具,把幾種工具按一定的規(guī)則組合起來,前一個(gè)工具的輸出作為后一工具的輸入,最終形成一個(gè)流程化的模型程序。目前基于ArcGIS的開發(fā)研究主要集中在ArcObject和ArcEngine功能應(yīng)用方面;而ModelBuilder具有可視性、快捷性、組合性等特點(diǎn),非常適合實(shí)際生產(chǎn)中,可根據(jù)具體需求快速地構(gòu)建模型程序。因此有必要深入研究ModelBuilder并推廣到生產(chǎn)單位中。
本文利用影像解譯研究ModelBuilder設(shè)計(jì)模型的方法以及如何有效地控制模型程序的正常運(yùn)行;通過實(shí)際應(yīng)用去驗(yàn)證模型程序在生產(chǎn)中所發(fā)揮的作用;通過對(duì)比試驗(yàn),分析ArcObject和 Model-Builder各自特點(diǎn)及適用范圍。
ModelBuilder設(shè)計(jì)模型的主要步驟如圖1所示。其中工具和腳本是模型實(shí)現(xiàn)具體功能的核心部分,一個(gè)模型程序由多個(gè)工具或腳本組成。ModelBuilder的優(yōu)勢(shì)在于能直接使用ArcGIS提供的所有工具(包括Esri網(wǎng)站可供下載的工具),無需編寫大量的代碼便可實(shí)現(xiàn)強(qiáng)大功能。每一個(gè)工具需要有一定的輸入、輸出變量和參數(shù)才能正常運(yùn)行。一般情況下前一個(gè)工具的輸出可作為后一工具的輸入,第一個(gè)工具的輸入和最后一個(gè)工具的輸出可作為人機(jī)交互的接口,也可作為該模型與其它模型連接的接口。
圖1 模型的設(shè)計(jì)流程
控制工具是控制整個(gè)模型有序運(yùn)行的必要手段;如同其他編程語(yǔ)言一樣,ModelBuilder也提供了判斷分支、迭代循環(huán)、前提條件等工具或腳本。模型中所有工具、腳本、變量、參數(shù)等要按一定的順序連接起來,經(jīng)過反復(fù)驗(yàn)證和調(diào)試成最終的成果模型。模型程序可保存在ArcToolbox工具箱中,便于隨時(shí)使用。在設(shè)計(jì)新模型時(shí),可將已有模型作為模型工具重復(fù)使用,不必重新設(shè)計(jì)。
模型的核心部分是一些ArcGIS內(nèi)置的處理工具或分析工具,通過工具的功能組合實(shí)現(xiàn)模型的功能。ArcGIS所提供的工具基本可以滿足實(shí)際工程的需要,因此絕大多數(shù)模型的設(shè)計(jì)重點(diǎn)不是研究如何實(shí)現(xiàn)具體的功能,而是如何控制一系列工具,使其有序的運(yùn)行。
ModelBuilder提供了多種迭代器,這些迭代器相當(dāng)于編程語(yǔ)言中的循環(huán)指令(如For,While等),其作用是控制模型重復(fù)執(zhí)行任務(wù)。例如:“要素類迭代器”將工作空間或數(shù)據(jù)集中的所有要素類分別提取并執(zhí)行相應(yīng)操作,不斷循環(huán)直至所有的要素類被處理完成。因此在模型中的適當(dāng)位置放置迭代器,對(duì)于模型實(shí)現(xiàn)批處理功能有十分重要的意義。但ModelBuilder并不提供迭代嵌套功能,如需對(duì)每個(gè)要素類中所有要素分別提取,就不能把“要素迭代器”嵌入“要素類迭代器”中使用。經(jīng)過試驗(yàn)分析,通過以下方法可以解決ModelBuilder循環(huán)嵌套的問題。將“要素迭代器”所實(shí)現(xiàn)的功能生成一個(gè)模型工具,設(shè)置好接口參數(shù);使用“要素類迭代器”迭代預(yù)先構(gòu)建的模型。
If-then-else邏輯看似簡(jiǎn)單,功能卻十分強(qiáng)大,根據(jù)不同條件執(zhí)行不同的操作。然而ModelBuilder并沒有提供條件分支工具。通過分析研究,該功能可以通過編寫腳本工具或利用“計(jì)算值”工具輸出布爾值的兩種方法來實(shí)現(xiàn)。
以上為python腳本工具的核心代碼,判斷field_value值的兩種情況,分別設(shè)置兩個(gè)布爾型參數(shù)。應(yīng)用時(shí)把腳本工具添加到模型中,通過兩個(gè)布爾型參數(shù)的“true”或“false”來控制程序的分支路線。
運(yùn)用迭代器和分支腳本控制模型運(yùn)行實(shí)例如圖2所示,其功能是:“要素迭代器”提取每一個(gè)線要素,判斷其字段值,確定是否應(yīng)閉合,如需要?jiǎng)t執(zhí)行閉合操作。
除了常用的循環(huán)、判斷工具外,ModelBuilder還提供了一些其它的程序控制工具,如“合并分支”、“停止”等,由于使用起來比較簡(jiǎn)單,這里就不再贅述。
圖2 迭代與分支的應(yīng)用
Python是一種不受局限、跨平臺(tái)的開源編程語(yǔ)言,它功能強(qiáng)大且簡(jiǎn)單易學(xué)。Python已延伸到Arc-GIS中,成為了一種用于數(shù)據(jù)分析、數(shù)據(jù)轉(zhuǎn)換、數(shù)據(jù)管理和地圖自動(dòng)化的語(yǔ)言。ArcPy為用戶提供了使用Python語(yǔ)言操作所有地理處理工具的入口,并提供了多種有用的函數(shù)種類,用于處理和詢問GIS數(shù)據(jù)。使用Python和ArcPy,可以開發(fā)出大量的用于地理處理的實(shí)用程序。
Python腳本可以不依賴ArcGIS獨(dú)立運(yùn)行,可以作為腳本工具保存到工具箱中使用,也可以嵌入到模型工具中隨整個(gè)模型一起運(yùn)行。下面具體分析Python腳本在ModelBuilder的應(yīng)用的兩種方式。
1)Python作為腳本工具的應(yīng)用。
以上部分代碼的作用是從一個(gè)工作空間中,提取各種要素類,然后判斷該要素類是否存在“NAME”字段,如存在,即把變量“intext”的值賦給該字段。如此不斷循環(huán),直到所有的“NAME”字段都被賦值;“intext”值可以是固定值,也可以是某一個(gè)或某幾個(gè)字段計(jì)算出的值。原本非常煩瑣的字段處理過程,僅通過幾句簡(jiǎn)潔的代碼就能輕松實(shí)現(xiàn)。因本示例程序需要引用到ArcPy類庫(kù),還應(yīng)在程序之前加入“import arcpy”代碼。
如果需要將上述Python程序作為腳本工具供ModelBuilder調(diào)用,還應(yīng)設(shè)置好接口參數(shù)。一般利用“arcpy.GetParameterAsText()”函數(shù)來實(shí)現(xiàn)接口參數(shù)的設(shè)定。
2)Python嵌入內(nèi)置工具的應(yīng)用。在“計(jì)算字段”工具的“代碼塊(可選)”控件中填寫Python腳本,在“表達(dá)式”控件中加入變量運(yùn)算式;以此實(shí)現(xiàn)在“代碼塊”程序的控制下,根據(jù)“表達(dá)式”計(jì)算出不同的結(jié)果,如圖3所示。
圖3 Python嵌入內(nèi)置工具的應(yīng)用
通過實(shí)例分析,Python腳本非常靈活地應(yīng)用在ArcGIS的各個(gè)內(nèi)置工具中;對(duì)于擴(kuò)展ModelBuilder功能有著十分重要的意義。
在當(dāng)前測(cè)繪生產(chǎn)中,普遍采用“內(nèi)業(yè)定位、外業(yè)定性”生產(chǎn)流程,因此影像解譯對(duì)于測(cè)繪生產(chǎn)有著非常重要的意義。影像解譯的整個(gè)生產(chǎn)環(huán)節(jié)包括:柵格影像預(yù)處理、柵格影像解譯、矢量數(shù)據(jù)提取、圖形編輯、屬性錄入等;其中每一個(gè)生產(chǎn)環(huán)節(jié)都有各自的特點(diǎn),有些環(huán)節(jié)依靠計(jì)算機(jī)自動(dòng)化處理數(shù)據(jù),有些環(huán)節(jié)依靠人工判讀和人機(jī)交互處理數(shù)據(jù)。如何減少人機(jī)交互操作量,實(shí)現(xiàn)自動(dòng)化處理,也是現(xiàn)在測(cè)繪科研的一個(gè)方向。
柵格預(yù)處理工作包括投影轉(zhuǎn)換、格式轉(zhuǎn)換、波段合成、重采樣、鑲嵌與裁剪、DEM正射校正等。柵格影像預(yù)處理工作涉及到海量影像數(shù)據(jù);有著數(shù)據(jù)處理時(shí)間長(zhǎng),對(duì)計(jì)算機(jī)性能要求高的特點(diǎn);但其工作流程相對(duì)單一,非常適用于計(jì)算機(jī)程序化地批量處理。利用ModelBuilder把ArcToolbox中現(xiàn)有的柵格處理、分析工具,按一定的方法連接起來,構(gòu)成自動(dòng)化處理的模型。
在影像預(yù)處理工作中,需要把一整幅影像按照一定的范圍線,裁切成多塊圖像,供后期解譯時(shí)使用,如圖4所示。
圖4 影像自動(dòng)裁切的方法
模型所示:分塊工作空間中存放了多個(gè)裁切范圍面,迭代器分別提取并提供給“裁切工具”作為輸入?yún)?shù),裁切工具同時(shí)收集被裁切影像等參數(shù),然后開始執(zhí)行裁切任務(wù),最終把裁切好的影像存放在輸出工作空間中,如此循環(huán)直至裁切完成。
使用模型,避免手工重復(fù)操作,在計(jì)算機(jī)性能和存儲(chǔ)空間滿足要求前提下,可利用空閑時(shí)間自動(dòng)化地處理數(shù)據(jù)。
矢量分割模型功能:將CAD結(jié)合表中圖號(hào)作為label點(diǎn),利用裁切線自動(dòng)構(gòu)面,再通過ArcToolbox的“Split”空間分析工具,把整個(gè)SHP面分割成獨(dú)立裁切面,自動(dòng)命名并自動(dòng)存儲(chǔ),如圖5所示。
圖5 自動(dòng)獲取裁切面的方法
把圖4和圖5兩個(gè)模型再通過ModelBuilder組合起來形成新的模型,操作起來會(huì)更加方便、快捷。如果需要實(shí)現(xiàn)多幅影像批量裁切功能,還應(yīng)在模型中加入“柵格迭代器”。
在柵格影像預(yù)處理中,絕大多數(shù)的處理工作都可以通過模型程序?qū)崿F(xiàn)自動(dòng)化操作。模型設(shè)計(jì)的總體方法與圖4、圖5類似。
影像解譯后期工作主要是數(shù)據(jù)編輯、檢查修改和屬性錄入等;這些數(shù)據(jù)處理過程可以由Model-Builder為具體工作設(shè)計(jì)模型程序。例如:自動(dòng)封閉線模型、面裂隙檢查模型、自動(dòng)消除懸掛與偽節(jié)點(diǎn)模型、屬性自動(dòng)錄入模型等。通過ArcToolbox中的“編輯工具”、“拓?fù)涔ぞ摺薄ⅰ胺治龉ぞ摺?、“字段工具”等常用工具的組合,再配合控制工具及Python腳本實(shí)現(xiàn)上述模型功能。
在影像的矢量提取工作完成之后,還需要利用整個(gè)測(cè)區(qū)的柵格影像和矢量成果制作1∶2 000分幅調(diào)繪底圖。調(diào)繪底圖內(nèi)容包括高分辯率影像、圖斑邊線、注記、界線等。具體工作包括柵格和矢量數(shù)據(jù)的裁切、屬性標(biāo)注、線寬、線型修改、圖外整飾等。以上工作可以使用ModelBuilder設(shè)計(jì)出自動(dòng)分幅、自動(dòng)符號(hào)化、自動(dòng)整飾等模型程序。
在影像解譯工程中,除了數(shù)據(jù)處理、空間分析、地圖制圖外,統(tǒng)計(jì)工作也非常重要,成果中往往包括大量的統(tǒng)計(jì)表格。
某影像解譯項(xiàng)目的工作情況統(tǒng)計(jì)見表1,由ModelBuilder設(shè)計(jì)的模型根據(jù)成果矢量數(shù)據(jù)和任務(wù)分配表自動(dòng)生成。模型中應(yīng)用了“增加字段”、“空間連接”、“生成面要素”等ArcGIS內(nèi)置工具和python腳本工具等。此類模型可以快速地提取信息,生成工作量統(tǒng)計(jì)表、元數(shù)據(jù)表、其它統(tǒng)計(jì)表等。
ArcObject是ESRI基于微軟組件對(duì)象模型技術(shù)所構(gòu)建的一系列COM組件集,用戶可以使用任何支持COM的編程語(yǔ)言(如VB、VC++、C#)進(jìn)行開發(fā)。ArcObject提供許多ArcGIS底層的基本功能,可以把這些基本功能組合集成一個(gè)強(qiáng)大的ArcObject功能。ArcObject可以對(duì)ArcGIS進(jìn)行底層控制且更加靈活;但ArcObject有繁多的接口、對(duì)像模型圖,讓學(xué)習(xí)ArcObject變得非常困難。另外開發(fā)ArcObject應(yīng)用的人員還應(yīng)具備多年程序開發(fā)經(jīng)驗(yàn)。
表1 某影像解譯項(xiàng)目工作情況統(tǒng)計(jì)表
ModelBuilder是基于可視化的開發(fā)工具,也是一種高度集成化的開發(fā)方法。開發(fā)人員不需要花費(fèi)大量的時(shí)間去學(xué)習(xí),也不需要花費(fèi)大量時(shí)間編寫和調(diào)試程序。實(shí)踐證明只要利用幾天時(shí)間去學(xué)習(xí)ArcGIS幫助文檔,即便是非程序員也可以輕松地構(gòu)建成出實(shí)用的模型程序,特別適合生產(chǎn)任務(wù)緊急時(shí)使用。兩種開發(fā)方法的對(duì)比見表2。
以“自動(dòng)封閉線”功能作為試驗(yàn)對(duì)象,使用ModelBuilder和ArcObject這兩種開發(fā)方法分別設(shè)計(jì)出程序,通過對(duì)比分析,再說明各自方法的特點(diǎn)。使用ModelBuilder的設(shè)計(jì)方法在圖2中已說明,這里不在贅述,以下是利用ArcObject SDK和C#編寫的核心代碼:
表2 ArcObject與ModelBuilder的對(duì)比
該程序應(yīng)用了ImxDocument、IenumFeature、Ifeature、Ipolyline、IpointCollection等接口類。其核心部分是:用接口IPointCollection中的方法“AddPoint(inPoint,[,before][,after])”,為 Polyline要素增加頂點(diǎn)。
通過分析:ModelBuilder設(shè)計(jì)的模型有著結(jié)構(gòu)清晰,操作簡(jiǎn)單的優(yōu)點(diǎn)。ArcObject設(shè)計(jì)程序其優(yōu)點(diǎn)在于豐富的接口類和底層控制能力,可以實(shí)現(xiàn)許多ModelBuilder無法實(shí)現(xiàn)的功能;例如在人機(jī)交互式操作方面,ModelBuilder很難實(shí)現(xiàn)響應(yīng)用戶隨時(shí)發(fā)出的指令和動(dòng)作。
使用以上兩種方法分別處理相同的數(shù)據(jù),以此作為各自運(yùn)行效率的對(duì)比。在約150條左右的Polyline線自動(dòng)封閉試驗(yàn)中:使用模型程序,數(shù)據(jù)處理總花費(fèi)時(shí)間約為56s;使用ArcObjects程序,數(shù)據(jù)處理總花費(fèi)時(shí)間約為5s。ArcObjects程序處理數(shù)據(jù)更快是因?yàn)锳rcObjects直接從底層讀取并修改數(shù)據(jù);而模型程序每操作一個(gè)要素,都要調(diào)用模型中所有的工具。
因此ArcObjects SDK和ModelBuilder作用互補(bǔ),ArcObjects可通過新的行為來擴(kuò)展ArcGIS,而ModelBuilder是專為自動(dòng)執(zhí)行任務(wù)而設(shè)計(jì)的。
本文研究ModelBuilder設(shè)計(jì)模型的方法,把所設(shè)計(jì)好的模型程序應(yīng)用于影像解譯的實(shí)際生產(chǎn)過程中,ModelBuilder無論在提高地理數(shù)據(jù)處理效率,還是在擴(kuò)展ArcGIS功能方面都有著十分重要的意義。在研究過程中,本文對(duì)比分析了利用ModelBuilder構(gòu)建的模型與利用ArcObjects設(shè)計(jì)的應(yīng)用程序之間的差異;筆者也對(duì)如何有效地運(yùn)用兩種程序方案為測(cè)繪生產(chǎn)服務(wù)提出了自己的觀點(diǎn)。
[1]任思思,張學(xué)之,張禹.地理國(guó)情普查影像解譯自動(dòng)化方案研究[J].測(cè)繪與空間地理信息,2014,37(6):44-46.
[2]杜蕾.遙感影像解譯在地理國(guó)情普查中的應(yīng)用[J].測(cè)繪工程,2014,24(6):46-49
[3]高燕,周成虎,蘇奮振.基于OLI影像多參數(shù)設(shè)置的SVM 分類研究[J].測(cè)繪工程,2014,24(6):1-5
[4]翁代云,楊莉.人工智能技術(shù)在遙感圖像分類中的應(yīng)用[J].計(jì)算機(jī)仿真,2012(6):240-244.
[5]傅仲良.ArcObject二次開發(fā)教程[M].北京:測(cè)繪出版社,2008.
[6]牟乃夏,劉文寶,王海銀,等.ArcGIS10地理信息系統(tǒng)教程—從初學(xué)到精通[M].北京:測(cè)繪出版社,2012.
[7]呂偉臣,霍言,呂寶臣.Visual C#2005入門與提高[M].北京:清華大學(xué)出版社,2006.