网上已经有批量裁剪的源代码,但是运行问题有很多,经过改动,成功运行,希望有所启发。
#-*- 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()
此为源码,资源来自互联网,链接为:
https://www.cnblogs.com/liweis/p/4252097
运行过程中发现有很多问题,总结如下:
1)报错100240,不能将运行好的文件保存到某路径。解决办法,更改environment中的workspace。此外,看看你的属性字段是不是有空格,字符是不是超过了13个。都会引起报错。更改后代码如下:
#-*- encoding:UTF-8 -*-
# Tool Name: maskproperty
# Source Name: extractByMask.py
# Version: ArcGIS 10.1
# Author: GIScloud
# Created: 2012/11/1
import sys
reload(sys)
sys.setdefaultencoding( "utf-8" )
import arcpy
from arcpy import env
import string
from arcpy.sa import *
arcpy.CheckOutExtension("spatial")
env.workspace = r"G:\image_bach\origal_data"#enveriment setting
try:
raster = arcpy.GetParameterAsText(0) #input roster
clip_feat = arcpy.GetParameterAsText(1) #input vector
field = arcpy.GetParameterAsText(2) #file 字段
outworkspace = arcpy.GetParameterAsText(3) #outputdectory
for row in arcpy.SearchCursor(clip_feat):
mask=row.getValue("Shape")
outpart=str(row.getValue(field))
n=len(outpart)
if n <= 13:
outPath=outworkspace+"\\"+''.join(outpart.split()) #由于python的文件命名不能超过13个字符,判断是否超了
else:
noblankstr=''.join(outpart.split()) #由于命名字段可能存在空格,去掉空格
outPath=outworkspace+"\\"+noblankstr[0:13] #如果字段的字符超过13个,截取前13个
outExtractByMask = ExtractByMask(raster,mask)
outExtractByMask.save(outPath)
except arcpy.ExecuteError:
print arcpy.GetMessages()
运行结果: