计算每N个栅格数据的平均值

由于OMI NO2 daily数据缺失很多值,于是计算多天平均值以后的数据会相对可靠,使用rasterio计算7天平均值为例:

"""
因为每天的OMI NO2 L3数据中有大量的空白和缺值,
故将365/366个daily OMI NO2 L3 网格数据计算成为每7天一个平均数据
"""
import glob
import os
import numpy as np
import rasterio 


output_dir = r'G:\DATA\OMINO2_L3\7_day_mean'
file_list = glob.glob(r'G:\DATA\OMINO2_L3\tif\*.tif')

def read_raster(file):
    with rasterio.open(file) as src:
        return(src.read(1))
# obtain metadata from one of the input rasters
with rasterio.open(file_list[0]) as src:
    meta = src.meta
meta.update(dtype=rasterio.float32)

# select files of a single year
tmp_list = []
for file in file_list:
    fn1 = os.path.basename(file)
    if fn1[:4] == '2020':
        tmp_list.append(file)

# resample from daily to 7-day for each year
averaging_list = []
for i in range(0, len(tmp_list), 7):
    averaging_list = tmp_list[i:i+7]
    # read all data as a list of numpy arrays
    array_list = [read_raster(x) for x in averaging_list]
    # averaging and ignoring nan
    array_mean = np.nanmean(array_list, axis=0) 
    # write output file
    fn2 = os.path.basename(averaging_list[0])
    output_fn = os.path.join(output_dir, fn2)
    print('Writing ...', output_fn)
    with rasterio.open(output_fn, 'w', **meta) as dst:
        dst.write(array_mean.astype(rasterio.float32), 1)

你可能感兴趣的:(计算每N个栅格数据的平均值)