ModelBuilder 是 ArcGIS for Desktop 產(chǎn)品中最可愛的功能之一,它可以盡可能免代碼地將我們從重復(fù)勞動中解放出來,
如何在ArcGIS for Desktop中實現(xiàn)批量任務(wù)?
。使用 ModelBuilder 的過程常常被比喻為“搭積木”,我們只需要拿著 ArcGIS for Desktop 中為我們提供的“積木”去搭建滿足于自己的特定工作流模型。再打個比方,我們要實現(xiàn)的某個功能比作是自己做面包。首先要準(zhǔn)備食材,例如面粉、牛奶、雞蛋、黃油、糖、鹽、酵母,類比為地理數(shù)據(jù); 食材齊備了,就可以順序開始和面、發(fā)酵、烘焙,這些工作由特定的器具承擔(dān),例如各種烘焙工具、烤箱,就好比ArcGIS提供的工具,例如 ArcToolbox中的工具們; 面包制作過程中可以根據(jù)自己口味,規(guī)定發(fā)酵時間、控制糖和鹽的多少等,這就類比為工具的自定義參數(shù)。
如果自己享受整個烘焙的過程,不厭其煩地面面俱到,那大可維持現(xiàn)狀;可是如果你覺得做面包是個體力活,你只是想吃到自家面包,而希望把做面包的過程“外包”出去,那么面包機(jī)的市場就來了。這篇blog就和大家說說如何制作“面包機(jī)”。
1 明確需求
我們從一個簡單常見的實例開始……
需求:現(xiàn)有一些表示各種研究對象的地理數(shù)據(jù),小明希望把所有研究數(shù)據(jù)變換到需要的坐標(biāo)系統(tǒng),并且全部裁剪至研究范圍。
如果只有一份數(shù)據(jù),小明會不假思索的找到 ArcToolbox中的 Project和Clip工具,順序執(zhí)行即可解決問題;如果是3+份數(shù)據(jù),小明可能會想,該做個工具了。
2 構(gòu)建工作流
從【地理處理】菜單,打開ModelBuilder,依次拖拽和連接 Project 和 Clip 兩個工具。Project 工具的輸出作為 Clip 工具的輸入。
雙擊工具可以打開工具繼續(xù)填補(bǔ)工具需要的參數(shù),直至Model因參數(shù)完全而變成彩色。
<喎?http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KCjxoMSBpZD0="3-使用迭代器">3 使用迭代器
前一步的工具已經(jīng)滿足一次任務(wù)的需要了,接著就是解決批量處理的問題。ModelBuilder提供了一些額外的自帶工具來滿足我們的一些高級需求,其中一類就是迭代器,它用來實現(xiàn)循環(huán)。
在這個例子中,需要遍歷的對象是表示各種研究對象的要素類,因此選擇 迭代要素類 / Iterate Feature Classes,
電腦資料
《如何在ArcGIS for Desktop中實現(xiàn)批量任務(wù)?》(http://www.szmdbiao.com)。當(dāng)然也可以根據(jù)自己的實際需求選擇其他迭代器。
接下來就是把迭代器與工具串聯(lián)起來。首先,雙擊迭代器的六邊形為迭代器設(shè)置工作空間,即地理數(shù)據(jù)庫/GDB,或者文件夾目錄(例如shapefile所在的目錄)。這樣,迭代器會在指定的工作空間遍歷要素類。刪除現(xiàn)有Project工具的輸入數(shù)據(jù),將迭代器的輸出數(shù)據(jù)連接到Project工具。
工具基本準(zhǔn)備完畢,但是還差了重要的一步。目前,最后的輸出數(shù)據(jù)是常量,也就是說,即使前面的工具執(zhí)行了N次,那結(jié)果都將被同名覆蓋。那么,行內(nèi)變量就顯出用武之地了。
迭代器每次遍歷到一個要素類,會返回一個 Name,內(nèi)容是當(dāng)前要素類的名稱,這個Name就是行內(nèi)變量。引用的方法就是使用百分號括起來,即%Name%。
輸出數(shù)據(jù)設(shè)置示例:
至此我們就完成了一次批量任務(wù)。
4 復(fù)用工具
如果我們以后想按照這個相同的需求處理數(shù)據(jù),完全可以將其做成模型工具。將輸入數(shù)據(jù)和輸出數(shù)據(jù)設(shè)置為模型變量,我們就可以在“運行”狀態(tài)下使用。
設(shè)置方法,在需要作為參數(shù)方便后續(xù)修改的項目上右鍵,勾選 “模型參數(shù)”即可,然后項目的頭上頂了個“P”,( ̄▽ ̄)”。
將模型保存至工具箱后,雙擊運行工具,F(xiàn)在就可以把它當(dāng)成“面包機(jī)”,放入食材,等面包即可。
5 注意事項
下面是些有用的提示,F(xiàn)YI:
每個模型僅可使用唯一一個迭代器。如果模型中已經(jīng)存在一個迭代器,那么用于添加迭代器的菜單就不可用了。這是限制之一。
如果將含有迭代器的模型導(dǎo)出為 Python 腳本,則導(dǎo)出的腳本中將不會包括迭代邏輯。這是限制之二。Python中有l(wèi)ist函數(shù),也可以實現(xiàn)類似的需求,但是需要重寫。
盡管Model可以嵌套調(diào)用,但是迭代器的嵌套循環(huán)邏輯不佳,不建議使用。如果需要實現(xiàn)嵌套循環(huán),強(qiáng)烈建議使用python腳本。例如,實現(xiàn)遍歷工作空間內(nèi)每個要素類中的每個要素(記錄)這樣的需求,可以使用 ArcPy中的函數(shù)ListFeatureClasses和SearchCursor來實現(xiàn)。