Чтение сообщения grib2 в куб Iris

В настоящее время я изучаю идею использования iris в проекте для чтения файлов прогноза grib2 с использованием python.

Моя цель - загрузить/преобразовать сообщение grib в куб радужной оболочки на основе ключа сообщения grib, имеющего определенное значение.

Я экспериментировал с iris-grib, который использует gribapi. Используя iris-grib, мне не удалось найти ключ в файле grib2, хотя ключ виден с помощью «grib_ls -w...» через cli. gribapi выполняет свою работу, но я не уверен, как связать его с iris (именно для этого, как я полагаю, и предназначен iris-grib).

Мне было интересно, знает ли кто-нибудь способ получить сообщение в кубе радужной оболочки на основе ключа сообщения гриба, имеющего определенное значение. Спасибо


person Xav    schedule 24.01.2019    source источник


Ответы (1)


Вы можете получить все, что понимает gribapi, через низкоуровневый интерфейс grib в iris-grib, который представляет собой iris_grib.GribMessage.
Обычно вы должны использовать for msg in GribMessage.messages_from_filename(xxx):, а затем обращаться к нему, например, как msg.sections[4]['productDefinitionTemplateNumber']; msg.sections[4]['parameterNumber'] и так далее.

Вы можете использовать это для определения необходимых сообщений, а затем преобразовать их в кубы с помощью iris_grib.load_pairs_from_fields().

Однако Iris-grib знает только, как переводить определенные кодировки в кубы: он довольно строг в отношении того, что именно он распознает, и потерпит неудачу во всем остальном. Поэтому, если в ваших данных используются какие-либо нераспознанные шаблоны или кодировки данных, они определенно не загрузятся.
Я просто предполагаю, что у вас может быть что-то необычное, так что может быть проблемой?
Вы можете сравнить ожидаемое содержимое сообщения с кодом перевода на странице iris_grib:_load_convert.py, начиная с подпрограммы convert().

Чтобы получить куб Iris из чего-то, не еще не поддерживаемого, вы должны:

  • (a) расширить правила перевода (например, Github PR) или
  • (б) иногда вы можете изменить сообщение, чтобы оно выглядело как что-то, что можно распознать.
    В противном случае вы можете
  • (c) просто создайте куб Iris самостоятельно из данных, найденных в вашем GribMessage : это может быть немного проще, чем прямое использование 'gribapi' (возможно, нет, в зависимости от деталей).

Если у вас есть подобная проблема, вы обязательно должны поднять ее как проблему в проекте github (iris -гриб вопросы) + постараемся помочь.

P.S. поскольку вы зарегистрировали интерес к Python3, вы можете знать, что более новая замена ecCodes для gribapi должна вскоре стать доступной, что сделает наконец возможной поддержку Python3 для данных grib.
Однако версия Python3 все еще находится в стадии бета-тестирования, и в настоящее время у нас возникают некоторые проблемы с ней, которые теперь подняты с помощью ECMWF, так что это все еще почти, но не совсем достижимо.

person pp-mo    schedule 25.01.2019
comment
Привет, @pp-mo, [отредактировано] Мне удалось получить некоторые ключи с помощью load_pairs_from_fields(). Я также рассмотрю iris_grib.load_convert.py, как вы предложили, а также другие ваши предложения. Python 3 в настоящее время не вариант. Здорово получить помощь от кого-то из дома Ирис! - person Xav; 30.01.2019