批量实现利用shp文件,裁剪相应的多个栅格数据,并统计裁剪后栅格的均值至TXT文件,亲测可用。
#使用shp数据批量裁剪栅格数据并统计均值
# -*- coding: cp936 -*-
#使用shp数据批量裁剪栅格数据并统计均值
print"使用shp数据批量裁剪栅格数据并统计结果均值"
#修改部分
ras_file = r"D:\实验室\数据\气象数据\降雨数据_插值_60_17\pcp" #栅格数据位置
ras_file_cut = r"D:\实验室\数据\气象数据\降雨数据_插值_60_17\sx_yr" #栅格数据裁剪结果存储位置
suffix = 'tif' #栅格数据后缀
bvalue= '-9999' #栅格数据背景值
#下面两个选择注释一个,用 # 注释
clpgeo = 'ClippingGeometry' #裁剪出来的是要素形状 选择注释1
# clpgeo = 'NONE' #裁剪出来的是要素的外接矩形形状 选择注释2
shp_file = r"D:\实验室\数据\边界\长江流域-陕西\yr_sx.shp"#裁剪模板shp数据
# ras_extent="D:\实验室\数据\水循环数据提取\数据\data\lucc_1km\landcover_1988_tempslid.tif"
txtname=r"D:\实验室\数据\气象数据\降雨数据_插值_60_17\sx_yr\MEAN_cuo.txt" #输出统计文本路径及名称
#计算部分 无须修改
import arcpy
import os
# arcpy.env.snapRaster =ras_extent
# arcpy.env.extent =ras_extent
if not os.path.exists(ras_file_cut):
os.mkdir(ras_file_cut)
arcpy.env.workspace=ras_file
# arcpy.env.extent = ras_extent
ras=arcpy.ListRasters('*',suffix)
print "共有"+'%d'%len(ras)+"个栅格数据"
#
print "Processing......"
result=[]
for rs in ras:
outname=ras_file_cut+"\\"+str(rs[0:len(rs)-4])+".tif" #####
#arcpy.Clip_management(rs,"#",outname,shp_file,str(bvalue),"ClippingGeometry") #ClippingGeometry NONE
arcpy.Clip_management(rs,"#",outname,shp_file,bvalue,clpgeo)
stats = arcpy.GetRasterProperties_management(outname,"MEAN")
result.append(str(stats)+"\n")
#arcpy.Delete_management(outname,"")
print str(rs)+" OK!"
file(txtname,'w').writelines(result)
print "Finish!"