1. 程式人生 > >ArcGIS分割柵格·使用模型構建器

ArcGIS分割柵格·使用模型構建器

問題

最近遇到一個分割柵格資料的需求,把一張大的影像圖按標準比例尺分幅裁剪為多張影像。看起來很簡單,但實際操作過程中還是踩到了一些坑,諸多嘗試後使用模型構建器比較圓滿解決了問題,在這裡記錄下,以饗來者。

思路

  1. 製作10000比例尺分幅圖框;
  2. 使用分幅圖框對柵格進行裁剪;

過程

  • 製作分幅圖框

製作分幅圖框方法比較多,這兒使用的是建立漁網工具:

  • 漁網原點和右上角座標取決於影像範圍,為方便計算圖幅號,座標取整到10000;
  • 參考之前用過的數字正射影像(應該有數字正射影像圖生產規範,不過沒找到),10000比例尺圖幅尺寸應該是5000*5000,其他比例尺圖幅範圍可參照公式:圖幅尺寸=比例尺/2(不保證正確性);
  • Y 軸座標用於定向漁網。按照原點座標與 y 軸座標的連線所定義的角度旋轉漁網。

漁網建立好後可計算好圖幅號,方便分幅影像命名。新建個TEXT欄位,10000比例尺圖幅號計算可參考以下表達式(解析程式用Pyhon)

str( !shape.extent.YMin!/10000 )+"-"+str( !shape.extent.XMin!/10000 )+"DOM"

這樣就得到可用於裁剪柵格的向量圖層了。

如果分幅影像需要保留一定的接邊範圍,可以對圖框做一個緩衝。

  • 柵格裁剪

柵格裁剪首先想到的就是用分割柵格工具。

看說明的話,分割方法用POLYGON_FEATURES是能滿足需要的

應該是10.4.1的BUG,分割工具不能正常使用(測試10.0的分割柵格功能一切正常,不過10.0沒有POLYGON_FEATURES分割方法,故不採用)

現成工具不能用,就只能自己動手。裁剪工具可正常使用,可以自定義輸出範圍或使用要素範圍進行裁剪,不過這個範圍是整個要素類範圍,不是針對單個要素。

要實現針對單個要素的裁剪,大致有兩種思路:

  1. 使用分割工具把圖框分割成單個的要素類,再用裁剪工具的批處理。但這種方式太麻煩,生成一大堆過程資料不說,速度還慢。
  2. 迴圈圖框要素,獲取每個要素範圍實現裁剪;

第二種思路可行性較高,ArcGIS的模型構建器和Python指令碼應該都能很好的勝任,而且可以做成通用工具,便於後續使用。

這裡採用模型構建器,思路比較簡單,迭代要素選擇來獲取單個要素範圍,再用這個範圍來裁剪影像。

  • 模型構建器其實很簡單,參考幫助,注意獲取變數和使用行內變數就行;
  • 按欄位分組中選擇的欄位值會被用於裁剪後的柵格命名;
  • 使用輸入要素裁剪可實現不規則裁剪(比如按行政界線裁剪)

設計好儲存模型到工具箱,這樣一個裁剪工具就做好了。

好了,就是這樣,放個工具箱連結,軟體是ArcGIS10.4.1,需要的可以在這裡下載