今天跟师妹讨论arcgis如何批量统计若干个栅格数据的中位数,发现arcgis10.x不能直接做,有教程说只能用Arcgis pro来计算,想了想用Arcpy配合numpy应该也可以直接计算,可供大家参考。
用法:只需要替换input_folder 目录即可。
功能:对input_folder 文件夹内所有栅格数据进行批量计算中位数,并将统计结果保存为Excel表格
import arcpy
import os
import numpy as np
import csv
# 输入栅格数据文件夹路径
input_folder = r"####################"
# 输出统计结果的CSV文件路径
output_csv = r"统计结果.csv"
# 创建一个CSV文件并写入表头
with open(output_csv, mode='w', newline='', encoding='utf-8') as csvfile:
writer = csv.writer(csvfile)
writer.writerow(["Raster Name", "Median"])
# 遍历文件夹中的所有栅格文件
arcpy.env.workspace = input_folder
raster_list = arcpy.ListRasters()
if not raster_list:
print("未找到栅格文件,请检查文件夹路径!")
else:
for raster in raster_list:
print(f"正在处理栅格: {raster}")
try:
# 将栅格转换为NumPy数组
raster_array = arcpy.RasterToNumPyArray(raster, nodata_to_value=np.nan)
# 计算中位数(忽略NaN值)
median_value = np.nanmedian(raster_array)
print(f"{raster} 的中位数: {median_value}")
# 将结果写入CSV文件
with open(output_csv, mode='a', newline='', encoding='utf-8') as csvfile:
writer = csv.writer(csvfile)
writer.writerow([raster, median_value])
except Exception as e:
print(f"处理 {raster} 时出错: {e}")
print(f"统计完成,结果已保存到 {output_csv}")