今天跟師妹討論arcgis如何批量統(tǒng)計若干個柵格數(shù)據的中位數(shù),發(fā)現(xiàn)arcgis10.x不能直接做,有教程說只能用Arcgis pro來計算,想了想用Arcpy配合numpy應該也可以直接計算,可供大家參考。
用法:只需要替換input_folder 目錄即可。
功能:對input_folder 文件夾內所有柵格數(shù)據進行批量計算中位數(shù),并將統(tǒng)計結果保存為Excel表格
import arcpy
import os
import numpy as np
import csv
# 輸入柵格數(shù)據文件夾路徑
input_folder = r"####################"
# 輸出統(tǒng)計結果的CSV文件路徑
output_csv = r"統(tǒng)計結果.csv"
# 創(chuàng)建一個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數(shù)組
raster_array = arcpy.RasterToNumPyArray(raster, nodata_to_value=np.nan)
# 計算中位數(shù)(忽略NaN值)
median_value = np.nanmedian(raster_array)
print(f"{raster} 的中位數(shù): {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"統(tǒng)計完成,結果已保存到 {output_csv}")