Escribí un código basado en rasterio y numpy que obtiene la nanomedia de cada píxel de múltiples imágenes rasterizadas. Primero lo leo usando rasterio, luego convierto el array a float32 para poder poner los valores NaN (-32768) en np.nan. Luego agrego cada imagen a una lista.
Cuando la lista está llena. A continuación, la calculo utilizando np.nanmean de numpy. Lo suficientemente real como para que los valores NaN fueran ignorados en el cálculo de la imagen de salida. Sin embargo, no entiendo los valores de la imagen resultante. Las imágenes rasterizadas de entrada tienen un valor de 0 a 5. Mi salida tiene un valor de 0 a 20000.
Nota: Las imágenes de entrada son realmente Float32 en QGIS. No sé por qué se convirtió en Int16 en rasterio.
- ¿Por qué se ha convertido a Int16?
-
¿Cómo puedo corregir esto? Quiero una salida con nanomedia de las entradas. Los valores reales deben estar entre 0 - 5 también.
import rasterio from glob import glob import numpy as np
path = '/my/directory/*.nc' output = 'output/AOT_L2_Mean_MAM.tif' datasets = glob(path)
rasters = [] for data in datasets: ds = rasterio.open(f'netcdf:{data}:AOT_L2_Mean') band = ds.read(1)
print(band.dtype)
band = band.astype('float32') band[band==-32768] = np.nan rasters.append(band)
out = np.nanmean(rasters, axis=0)
with rasterio.open( output, 'w', driver='GTiff', height=out.shape[0], width=out.shape[1], count=1, dtype=out.dtype, crs='EPSG:4326', # +proj=latlong ) as dst: dst.write(out, 1)