from osgeo import gdal
import os
import pandas as pd
path = r"D:\GPP\0_data\4_VPM_GPP\11_IGBP_00_16_result\1_EBF" # 文件路径
path_list = os.listdir(path)
tif_files = list() # 创建一个只装tif格式的列表
for filename in path_list: # 遍历
# 用于分割文件名,将文件名分为两部分:文件的名称部分和文件的扩展名部分,返回值是一个包含两个元素的元组,第一个元素是文件名的名称部分,第二个元素是文件的扩展名部分(包括 . 符号)
if os.path.splitext(filename)[1] == '.tif':
tif_files.append(filename) # 将原文件夹的tif文件加入只有tif的列表
min = []
max = []
mean = []
std = []
num = []
sum = []
for tif in tif_files:
dataset = gdal.Open(path+'\\'+tif)
data_width = dataset.RasterXSize
data_height = dataset.RasterYSize
data = dataset.ReadAsArray(0, 0, data_width, data_height) # 读取整个 tif 为数组
count = 0
# 过滤无效值
for i in range(0, data_height):
for j in range(0, data_width):
if data[i, j] >= 0:
count = count+1
num.append(count)
band = dataset.GetRasterBand(1)
# ComputeStatistics()方法将返回一个包含波段数据简单统计指标(具体为最小值,最大值,平均值和标准差)的列表
# 参数为True时表示对数据进行抽样统计,参数为False表示统计所有像元值
statistics = band.ComputeStatistics(False)
min.append(statistics[0])
max.append(statistics[1])
mean.append(statistics[2])
std.append(statistics[3])
sum.append(statistics[2]*count)
print(statistics)
df = pd.DataFrame({'number': range(1, len(tif_files) + 1), 'file_name': tif_files, 'min': min, 'max': max, 'mean': mean,'count':num, 'sum': sum, 'std': std})
df.to_csv(r"D:\pythonProject\python_GIS_study\VPM_EBF_2000_statistics.csv", index=False, encoding='utf-8')
获取栅格的统计数据并导出至CSV
最新推荐文章于 2024-08-15 01:55:01 发布