[Py] 用 ArcPy 進行多程序的 DEM 分析 (ArcGIS 10.3)

在一個新專案開始的時候,有時候因為網格資料太大,需要切割,再進行同樣的處理,比如一張大的 DEM 切成小的檔案後,需要轉成坡度圖、陰影圖等等。除了努力的點 Toolbox 並進行繁瑣的設定,用 Python Multiprocess 模組更可以幫上你一臂之力!
以下是利用 ArcGIS 內建之 Python 及 Arcpy 進行多程序的轉檔,利用多核心處理器並行的方式對網格檔進行相同的處理( DEM 轉 Slope 或 Hillshade),達到節省時間並善用電腦的資源。

由於 Arcpy 是 Windows 限定,且 ArcGIS 使用 Python 2.7 ,當遇到有非 ascii 字元(如:中文)路徑時容易出現非預期的錯誤,請盡量避免。 使用 GDAL 的版本相信在不久就會寫出來吧 🙂

未來有更新的程式會放在:https://github.com/lcabon258/Multi-DEM-conversion

流程說明:
arcpymultiprocesstool-workflow

  1. 給定 資料夾路徑(Dir)、模式(Mode)、副檔名(Ext)及程序數目(N)
  2. Parser() 處理從命令列輸入的變數,指派給對應的全域變數。
  3. dirloader() 會利用給定的 Ext 在 Dir 找到符合條件的檔案,並放入 佇列(Q) 中
  4. 在 Q 中放入毒藥,表示工作完成,目的是令程序跳出無窮迴圈。
  5. 創造 N 個程序,指定每個程序要做的工作(DEM -> Slope 或 DEM -> Hillshade)
    • 在無窮迴圈中,每個程序開始自 Q 中取出物件。(檔案路徑或毒藥)。
    • 如果不是毒藥,則開始轉檔並儲存;如果是毒藥則跳出無窮迴圈。
    • 傳送工作完成給 Q。
  6. 等待所有程序完成工作。
  7. 結束程序,並結束主程式。

使用方式:

(1) 給定要處理的資料夾
(2) 選擇模式:轉存坡度檔(slope) 或 陰影檔(hillshade)
(3) 指定副檔名,預設是 tif。(輸入 “-e=tif” 或其他想要的副檔名)
(4) 指定要產生多少程序,預設是 2 個。(輸入 “-t=2″或其他設定)

以下是目前的程式碼,歡迎使用,轉載或修改請告知原作者,並請勿自行散佈

 


請多多指教!

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料