(我是转载的,自己试了可行之后再发出来,原文找不到了)
利用arcgis的ZonalStatisticsAsTable功能,对多幅影像进行批处理计算
完整代码:
# -*- coding: utf-8 -*-
import arcpy
from arcpy import env
from arcpy.sa import *
import os
# Set environment settings
env.workspace = "E:/DATAin/" # 输入raster所在的文件夹
output_path="E:/DATAout/" # 输出文件夹
# Set local variables
shp = "E:/DATA/geo/test.shp"
zoneField = "type" #按照shp的属性,改成你自己文件里字段名
datanames = os.listdir(env.workspace)
count = 0
for dataname in datanames:
if os.path.splitext(dataname)[1] == '.tif': #目录下包含.tif的文件
count=count+1
print(dataname)
print('count:'+str(count))
num=1
for dataname in datanames:
if os.path.splitext(dataname)[1] == '.tif': #目录下包含.tif格式的文件
data_name=os.path.splitext(dataname)[0]
arcpy.CheckOutExtension("Spatial")
file_name=data_name.split('.')[0]
raster= env.workspace+"/"+ dataname
outTable=(output_path+"/"+file_name+".dbf")
print(outTable)
outZSaT = ZonalStatisticsAsTable(shp,zoneField,raster,outTable,"DATA", "MEAN")
#下面是输出的每个参数的意义
#shp: 输入的区域数据(一般为矢量的区域文件),
#zoneField: 区分各个区域的字段(一般为名字或者代码),
#raster: 需要统计的区域,
#outTable: 输出的表(输出到数据库最好扩展名为.dbf;输出之后可以直接当工作表读取),
#"DATA":{是否忽略空值,DATA表示不计算空值},
#"MEAN":{需要统计的类型(最大、最小、平均,按需选择)})
print(1.0*num/count)
num=num+1
print('finish')