jueves, 12 de julio de 2018

Cómo usar GDAL para leer archivos GRIB en Python y determinar la estadística de las bandas

GRIB (GRIdded Binary o General Regularly-distributed Information in Binary form) es un formato ráster soportado por GDAL el cual es comunmente usado en metereología para almacenar datos históricos o de pronóstico del clima. Este tipo de formato es visualizado por QGIS; tal como se observa en la imagen siguiente:


con el archivo GRIB que ha sido bajado de aquí. En este caso particular se puede observar que el ráster es multibanda y contiene 54 de ellas. Si se desea, por ejemplo, determinar algunos parámetros estadísticos para la totalidad de las bandas se puede proceder, en Python, como se muestra a continuación:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
from osgeo import gdal
import numpy as np

path = '/home/zeito/pyqgis_data/Pacific.wind.7days.grb'
dataset = gdal.Open(path)
number_bands = dataset.RasterCount

for i in range(1, number_bands):

    band = dataset.GetRasterBand(i)
    data_array = band.ReadAsArray()

    num_list = []

    for row in data_array:
        for value in row:
            if value != 9999:
                num_list.append(value)
    print("band: " + str(i))
    print("Count: " + str(len(num_list)))
    print("Max: " + str(np.max(num_list)))
    print("Min: " + str(np.min(num_list)))
    print("Mean: " + str(np.mean(num_list)))
    print("Standard Deviation: " + str(np.std(num_list)))
    print 

dataset = None

Después de ejecutado el código anterior parte de los resultados se muestran a continuación:

band: 1
Count: 1768
Max: 12.19
Min: -11.9
Mean: -1.40150452489
Standard Deviation: 5.45187052244

band: 2
Count: 1768
Max: 11.47
Min: -13.47
Mean: -1.01839932127
Standard Deviation: 4.31238540212

.
.
.
band: 52
Count: 1768
Max: 8.89000488281
Min: -16.4699951172
Mean: -1.54418629366
Standard Deviation: 4.04909447752

band: 53
Count: 1768
Max: 9.02
Min: -10.28
Mean: -0.458857466063
Standard Deviation: 4.9421665411

band: 54
Count: 1768
Max: 8.55000488281
Min: -16.5399951172
Mean: -1.43630733438
Standard Deviation: 4.08263335492


No hay comentarios: