在使用arcgis的过程中,经常遇到这样的场景:遍历一个面要素类中的所有要素对另外一个要素类或栅格进行裁剪。针对该场景,整理了使用arcpy进行批量裁剪的代码:
import arcpy
import os
from arcpy.sa import *
def clip(input_data,clip_feature,worksapce):
if input_data[-4:] == ".tif":
with arcpy.da.SearchCursor(clip_feature,["id","SHAPE@"]) as cursor:
for row in cursor:
outExtractByMask = ExtractByMask(input_data, row[1])
outExtractByMask.save(worksapce+"\\"+str(row[0])+".tif")
elif input_data[-4:] == ".shp":
with arcpy.da.SearchCursor(clip_feature,["id","SHAPE@"]) as cursor:
for row in cursor:
arcpy.Clip_analysis(input_data, row[1], worksapce+"\\"+str(row[0])+".shp")
clipfeature = r"E:\arcpy\裁剪要素.shp"
raster = r"E:\arcpy\dem范围.shp"
workspace = r"E:\arcpy"
clip(raster,clipfeature,workspace)
1.裁剪栅格:
栅格数据和裁剪要素,裁剪要素具有id字段:
裁剪结果:
2.裁剪矢量:
裁剪结果: