1

I'm trying to use GDAL in python to conditionally select raster bands from a grib file based on the time when the weather feature was measured (think temperature).

If I run GetMetadata() on the dataset as a whole, I get no information.

path = r'...\ds.snow.bin'   
dataset = gdal.Open(path)  
dataset.GetMetadata()

{}

However, I do get information if I run GetMetadata() on a specific band:

dataset.GetRasterBand(1).GetMetadata()

{'GRIB_COMMENT': 'Total snowfall [m]', 'GRIB_DISCIPLINE':
'0(Meteorological)', 'GRIB_ELEMENT': 'SnowAmt',
'GRIB_FORECAST_SECONDS': '0 sec', 'GRIB_IDS': 'CENTER=8(US-NWSTG)
MASTER_TABLE=1 LOCAL_TABLE=0 SIGNF_REF_TIME=1(Start_of_Forecast)
REF_TIME=2019-05-29T15:00:00Z PROD_STATUS=1(Operational_test)
TYPE=1(Forecast)', 'GRIB_PDS_PDTN': '8',
'GRIB_PDS_TEMPLATE_ASSEMBLED_VALUES': '1 29 2 0 0 255 255 1 0 1 0 0
255 -1 -2147483647 2019 5 29 18 0 0 1 0 1 2 1 6 1 0',
'GRIB_PDS_TEMPLATE_NUMBERS': '1 29 2 0 0 0 255 255 1 0 0 0 0 1 0 0 0 0
0 255 129 255 255 255 255 7 227 5 29 18 0 0 1 0 0 0 0 1 2 1 0 0 0 6 1
0 0 0 0', 'GRIB_REF_TIME': ' 1559142000 sec UTC',
'GRIB_SHORT_NAME': '0-SFC', 'GRIB_UNIT': '[m]', 'GRIB_VALID_TIME': '
1559152800 sec UTC'}

Is there a way to get this metadata for the entire grib file at once so I can parse over it and select only bands that fall within a specified time?

I know cfgrib using XAarray can do this, but I would rather use GDAL.

1 Answer 1

1

I think the answer to your question is "no". You can't get the metadata for the entire grib file "at once".

You can however loop over all the bands in the grib-file and access the metadata like that, which also allows you to make a selection based on the metadata.

for example like this:

path = r"D:\path\to\somewhere.grib"

import gdal

ds = gdal.Open(path)  

for band in range(1, ds.RasterCount):
    
    meta = ds.GetRasterBand(band).GetMetadata()

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.