對柵格的裁切,我們通常使用裁切(數據管理-柵格-柵格處理)或按掩膜提取(空間分析-提取分析)來裁切,裁切的矢量要素通常是一個要素圖層或Shape文件。如果要進行批量處理,可以使用ToolBox中的批量處理工具。但是,有時我們選擇的裁切矢量要素不是一個要素圖層,而是要素圖層中的一個要素,如按標准圖幅裁切柵格影像,以前的做法是將要素一個一個的導出來,再進行批量處理。快速導出方法:ArcGIS按字段屬性分割文件。
現在,可以使用Python腳本來批量裁切,在網上找了位大神的原始代碼學習一下:
#-*- encoding:UTF-8 -*-
# Tool Name: 遍歷要素裁剪柵格
# Source Name: extractByMask.py
# Version: ArcGIS 10.1
# Author: GIScloud
# Created: 2012/11/1
import arcpy
import string
from arcpy.sa import *
try:
raster = arcpy.GetParameterAsText(0) #要裁剪的柵格
clip_feat = arcpy.GetParameterAsText(1) #裁剪要素類
field = arcpy.GetParameterAsText(2) #命名字段
outworkspace = arcpy.GetParameterAsText(3) #命名字段裁剪后輸出目錄
for row in arcpy.SearchCursor(clip_feat):
mask=row.getValue("Shape")
outPath=outworkspace+"\\"+str(row.getValue(field))
outExtractByMask = ExtractByMask(raster,mask)
outExtractByMask.save(outPath)
except arcpy.ExecuteError:
print arcpy.GetMessages()
將腳本導入ToolBox中(導入方法:ArcGIS使用Python腳本工具),執行報錯:UnicodeEncodeError: 'ascii' codec can't encode characters in position 32-34: ordinal not in range(128)問題,使用的是ulipad編譯器。
看樣子是編碼的問題,查了一下解決方案:在開頭加上代碼設置默認編輯
import sys reload(sys) sys.setdefaultencoding( "utf-8" )
-
能夠實現部分裁切了,但最后一個出了問題,看消息輸出的文件名中怎么多了一個句號?

查看屬性表,沒有問題。將輸出字段"北川羌族自治縣"改為"北川羌族自治"能夠正確輸出,如果改成"北川羌族自治北川羌族自治",又報相同的錯誤。說明應該就是輸出名稱長度的問題。


還有一個問題,輸出的不同柵格邊界接連有點小問題,如果避免這種情況,只能更改系統變量,輸出更小的單元格大小。

參考:http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=121642
http://blog.sina.com.cn/s/blog_64a3795a01018vyp.html
