基於ArcGIS ModelBuilder的GDB批量分區裁剪——可保留原始GDB要素集要素類結構
文章版權由作者pxtgis和博客園共有,若轉載請於明顯處標明出處://www.cnblogs.com/pxtgis/。
一、概述
在數據處理工作中經常遇到批量裁剪ArcGIS文件地理數據庫(GDB)的需求。利用ArcGIS進行GDB批量裁剪的方法主要有三種。本文以矢量GDB批量裁剪為例。
1、利用ArcToolbox中Analysis Tools工具箱中的Extract工具集下Clip裁剪工具的Batch批量處理(右鍵工具箱即可調出批量裁剪面板)。在Input Features下方單元格點擊Browse可以批量選取GDB中多個要素(如果有數據集,則需單獨添加要素集中要素類),Clip Features下方單元格點擊Open指定裁剪文件,Output Feature Class這列第一個單元格也會自動填充內容,默認存放在Default.gdb下帶」 _Clip」後綴文件名。選中Clip Features列已填充的內容右鍵Fill,即可將該列其他空白單元格填充同樣內容,也可以自己選中特定幾行再點擊Fill,則只填充選中的幾行內容。Output Feature Class最好不動,保持默認,因為要修改路徑就得都修改,修改一個其他還是默認。該列空白單元格程序運行時會自動填充同樣路徑,文件名與輸入要素對應,所以無需Fill。點擊OK即可執行批量裁剪,裁剪完可以把Default.gdb中的要素拷貝出來。但是Batch批量裁剪工具中裁剪要素只能取一個要素,就算輸入的裁剪要素類中有多個面要素,也只執行第一個進入程序中的要素麵。而且,在GDB中包含數據集的情況下,Batch批量處理在瀏覽數據時就很不方便,輸出時也無法保留原始數據集結構。所以針對只需利用一個面要素進行批量裁剪,而且不需要保留GDB要素集結構的情況下,Batch批量處理比較合適。
圖1 Batch Clip界面
2、利用Python,ArcPy站點包編寫程序進行處理。本文先不過多介紹。
3、利用Model Builder製作工作流進行處理。Model Builder包含一組支持構建靈活且功能強大的模型的實用工具,可實現零代碼對GDB進行批量分區裁剪且可選擇是否保留原始GDB要素集要素類結構。這也是本文的重點,下文將詳細介紹。
二、數據
1、待批量分區裁剪的市基礎地理信息數據(部分測試數據,GDB格式),包含要素集和要素類。
2、用於裁剪的市區界(包含多個面要素,shp格式),也可以換成分幅或其他裁剪要素類(包含一個或多個面要素)。
圖2 部分基礎地理信息數據
三、GDB批量裁剪模型
需求是:利用市區界要素麵數據對全市GDB數據進行批量分區裁剪出按區名命名的GDB,並且保留原始GDB的要素集結構。
如下圖所示,由於Model Builder中只能添加一個迭代器,所以要用到子模型,甚至子子模型。
1、主模型添加裁剪要素Clip FeatureClass,也就是本文的市區界shp數據,先經過篩選Select(這步可省,為了減少測試數據量加的),然後執行迭代要素選擇,選擇的要素作為兩個裁剪子模型的裁剪要素輸入;同時,在OutputGDB Folder位置創建名為GDB Name (其值為%Value%,行內替換迭代選擇出要素的name屬性) 的文件地理數據庫OutputGDB, 該GDB作為兩個子模型的輸出GDB參數;InputGDB為待批量分區裁剪的GDB,也就是本文的基礎地理信息庫。
圖3 GDB批量裁剪總模型
2、要素類裁剪子模型中,僅對GDB目錄下的要素類進行迭代裁剪,不遞歸至要素集下的要素類。
圖4 要素類裁剪子模型
3、要素集裁剪子模型1中再嵌套了一個要素集裁剪子模型0。要素集裁剪子模型0中是對要素集裁剪子模型1中的迭代的要素集進行要素類迭代和裁剪。要素集裁剪子模型1中對輸入的基礎地理信息數據庫進行迭代要素集,同時在總模型中生成的分區GDB中建立相應要素集,要素集路徑和迭代的要素集以及迭代的裁剪要素共同作為要素集裁剪子模型0的輸入。
圖5 要素集裁剪子模型
4、本例中的GDB批量裁剪生成的GDB可以保留原始GDB的要素集合要素類的結構。如果不需要輸出原始要素集的結構,可以去掉要素集裁剪子模型1,修改要素類裁剪子模型中迭代要素類的工具的Recursive遞歸選項勾上,則會批量裁剪GDB中包含數據集下的所有要素類,如圖6所示。
圖6 勾選要素集裁剪子模型中遞歸選項
5、運行總模型,模型參數和結果如下。結果為按區界名命名的各個GDB,GDB的要素集合要素類結構也和原GDB結構一致。
圖7 模型運行及結果
四、總結
1、本文參考了《ArcGIS之GDB(文件地理數據庫)批量處理(20190115)》。
2、模型中三層嵌套有些複雜,下一步還需研究改善。
3、利用模型運行出來存在一些空圖層並沒有刪除,有需求刪除的話可以在模型中再加入批量刪除空圖層工具。
4、需注意若要將裁剪結果寫入網絡路徑下可能會報錯無法寫入,將OutputGDB Folder參數改為磁盤絕對路徑就可以正常寫入。