Как перебрать значения широты и долготы файла grib2?

Я пытаюсь получить uvIndex всех лат, присутствующих в файле grib2. Это ссылка, откуда я получаю файл. Проблема в том, что я не могу понять структуру файла, чтобы получить данные. я использую pygrib прочитать файл.

Вот код, который я пробовал:

grbs = pygrib.open('uv.t12z.grbf01.grib2')
grb = grbs.select(name='UV index')[0]
print grb.data(23.5,55.5)

То, чего я пытаюсь достичь, это либо итерация по всем длинным латам и распечатка соответствующего значения uvIndex, либо ввод длинного лат и получение соответствующего значения. Прочитайте документы pygrib но не смог найти подходящую команду, которая будет служить моей цели. Пожалуйста помоги.

1 ответ

Решение

Вы должны перебрать файл GRIB и найти желаемую запись, а затем получить данные, как здесь:

for g in grbs:
    print g.shortName, g.typeOfLevel, g.level # print info about all GRIB records and check names 
    if (g.shortName == shortName and g.typeOfLevel == typeOfLevel and g.level == level):
        tmp = np.array(g.values)
        # now work with tmp as numpy array

Для получения массивов lat и lon используйте: lt, ln = g.latlons(), g - элемент grbs,

Прочитайте примеры в разделе python по адресу https://software.ecmwf.int/wiki/display/GRIB/GRIB+API+examples (pygrib использует эту библиотеку для чтения GRIB).

Самый быстрый способ получить данные из большого файла GRIB - создать индекс:

# use attributes what you want to build index
indx = pygrib.index(gribfile,'typeOfLevel','level','parameterName') 

# important: msg is an array and may have more then one record
# get U wind component on 10 m above ground
msg = indx.select(level = 10, typeOfLevel = "heightAboveGround",
 parameterName = "U U-component of wind m s**-1")
u10 = np.array(msg[0].values)
# get V wind component on 10 m above ground
msg = indx.select(level = 10, typeOfLevel = "heightAboveGround",
 parameterName = "V V-component of wind m s**-1")
v10 = np.array(msg[0].values)
Другие вопросы по тегам