python编程练习:基于gdal库,批量汇总栅格文件的统计特征
文章目录一、功能描述二、代码三、使用例3.1、问题描述3.2、代码示例3.3、运行结果系列文章目录:ArcGIS自定义脚本编程一、功能描述读取栅格文件,批量统计栅格的文件名、计数、最小值、最大值、总和、平均值、中位数、标准差。并将统计结果保存为表格(.csv)文件。表格文件样式如下:二、代码def gdal_analysis(in_path,out_csv):"""读取栅格文件,批量统计栅格的文件
·
系列文章目录: 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、运行结果


魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)