今天跟师妹讨论arcgis如何批量统计若干个栅格数据的中位数,发现arcgis10.x不能直接做,有教程说只能用Arcgis pro来计算,想了想用Arcpy配合numpy应该也可以直接计算,可供大家参考。

用法:只需要替换input_folder 目录即可。
功能:对input_folder 文件夹内所有栅格数据进行批量计算中位数,并将统计结果保存为Excel表格

PS:应该是可以在Arcgis10.x的python窗口直接运行的。

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}")

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐