回覆列表
  • 1 # 滴逃逃

    ModelBuilder 是 ArcGIS for Desktop

    產品中最可愛的功能之一,它可以儘可能免程式碼地將我們從重複勞動中解放出來。使用 ModelBuilder

    的過程常常被比喻為“搭積木”,我們只需要拿著 ArcGIS for Desktop 中為我們提供的“積木”去搭建滿足於自己的特定工作流模型。

    再打個比方,我們要實現的某個功能比作是自己做麵包。首先要準備食材,例如麵粉、牛奶、雞蛋、黃油、糖、鹽、酵母,類比為 地理資料; 食材齊備了,就可以順序開始和麵、發酵、烘焙,這些工作由特定的器具承擔,例如各種烘焙工具、烤箱,就好比ArcGIS提供的 工具,例如 ArcToolbox中的工具們; 麵包製作過程中可以根據自己口味,規定發酵時間、控制糖和鹽的多少等,這就類比為工具的自定義 引數 。

    如果自己享受整個烘焙的過程,不厭其煩地面面俱到,那大可維持現狀;可是如果你覺得做麵包是個體力活,你只是想吃到自家麵包,而希望把做麵包的過程“外包”出去,那麼麵包機的市場就來了。這篇blog就和大家說說如何製作“麵包機”。

    1 明確需求

    我們從一個簡單常見的例項開始……

    需求:現有一些表示各種研究物件的地理資料,小明希望把所有研究資料變換到需要的座標系統,並且全部裁剪至研究範圍。

    如果只有一份資料,小明會不假思索的找到 ArcToolbox中的 Project和Clip工具,順序執行即可解決問題;如果是3+份資料,小明可能會想,該做個工具了。

    2 構建工作流

    從【地理處理】選單,開啟 ModelBuilder,依次拖拽和連線 Project 和 Clip 兩個工具。Project 工具的輸出作為 Clip 工具的輸入。

    雙擊工具可以開啟工具繼續填補工具需要的引數,直至Model因引數完全而變成彩色。

    3 使用迭代器

    前一步的工具已經滿足一次任務的需要了,接著就是解決批次處理的問題。ModelBuilder提供了一些額外的自帶工具來滿足我們的一些高階需求,其中一類就是 迭代器,它用來實現迴圈。

    在這個例子中,需要遍歷的物件是表示各種研究物件的要素類,因此選擇 迭代要素類 / Iterate Feature Classes。當然也可以根據自己的實際需求選擇其他迭代器。

    接下來就是把迭代器與工具串聯起來。首先,雙擊迭代器的六邊形為迭代器設定工作空間,即地理資料庫/GDB,或者資料夾目錄(例如

    Project工具。

    工具基本準備完畢,但是還差了重要的一步。目前,最後的輸出資料是常量,也就是說,即使前面的工具執行了N次,那結果都將被同名覆蓋。那麼,行內變數 就顯出用武之地了。

    迭代器每次遍歷到一個要素類,會返回一個 Name,內容是當前要素類的名稱,這個Name就是行內變數。引用的方法就是使用百分號括起來,即 %Name% 。

    輸出資料設定示例:

    至此我們就完成了一次批次任務。

    4 複用工具

    如果我們以後想按照這個相同的需求處理資料,完全可以將其做成模型工具。將輸入資料和輸出資料設定為模型變數,我們就可以在“執行”狀態下使用。

    設定方法,在需要作為引數方便後續修改的專案上右鍵,勾選 “模型引數”即可,然後專案的頭上頂了個“P”,( ̄▽ ̄)”。

    將模型儲存至工具箱後,雙擊執行工具。現在就可以把它當成“麵包機”,放入食材,等麵包即可。

    5 注意事項

    下面是些有用的提示,FYI:

    每個模型僅可使用唯一一個迭代器。如果模型中已經存在一個迭代器,那麼用於新增迭代器的選單就不可用了。這是限制之一。

    如果將含有迭代器的模型匯出為 Python 指令碼,則匯出的指令碼中將不會包括迭代邏輯。這是限制之二。Python中有list函式,也可以實現類似的需求,但是需要重寫。

    儘管Model可以巢狀呼叫,但是迭代器的巢狀迴圈邏輯不佳,不建議使用。如果需要實現巢狀迴圈,強烈建議使用python指令碼。例如,實現遍歷工作空間內每個要素類中的每個要素(記錄)這樣的需求,可以使用 ArcPy中的函式 ListFeatureClasses 和 SearchCursor來實現。

  • 中秋節和大豐收的關聯?
  • 細菌的突變的原因有哪些?