系列文章目录: ArcGIS自定义脚本编程
一、功能描述
读取栅格文件,批量统计栅格的文件名、计数、最小值、最大值、总和、平均值、中位数、标准差。并将统计结果保存为表格(.csv)文件。表格文件样式如下:
二、代码
def gdal_analysis(in_path,out_csv):
"""
读取栅格文件,批量统计栅格的文件名、计数、最小值、最大值、总和、平均值、中位数、标准差。并将统计结果保存为表格(.csv)文件。
in_path:待统计的栅格所在的文件夹
out_csv:生成的表格.csv文件所存放的位置
"""
from osgeo import gdal
import pandas as pd
import numpy as np
import os
tifs = [os.path.join(in_path,i) for i in os.listdir(in_path) if i.endswith(".tif")]
res = []
for in_tif in tifs:
bname = os.path.basename(in_tif)
fname = os.path.splitext(bname)[0]
rds = gdal.Open(in_tif) # type:gdal.Dataset
if rds.RasterCount != 1:
print("Warning, RasterCount > 1")
band = rds.GetRasterBand(1) # type:gdal.Band
ndv = band.GetNoDataValue() # nodata value
# 读取栅格至大小为n*1的数组中
values = np.array(band.ReadAsArray()).ravel()
# 排除空值区
values = values[values != ndv]
temp = [fname,values.size,np.min(values),np.max(values),np.sum(values),np.mean(values),np.median(values),np.std(values)]
res.append(temp)
res = pd.DataFrame(res)
res.columns = ["fileName","count","min","max","sum","mean","median","std"]
res.to_csv(out_csv)
三、使用例
3.1、问题描述
将由MOD13数据集经过预处理得到的NDVI栅格进行批量统计分析,其中NDVI栅格并未乘以缩放因子。以黄土高原的2001全年16day的NDVI栅格为例。
3.2、代码示例
path1 = r"H:\scriptTest\input" # 输入:待统计栅格所在的文件夹
csv1 = r"H:\scriptTest\input\result.csv" # 输出:包含统计结果的表格文件
gdal_analysis(path1,csv1)
3.3、运行结果