Как получить информацию по уровню давления?

Я полный новичок в cfgrib, поэтому, пожалуйста, извините за прямой вопрос..

У меня есть разнородный файл grib, который представляет информацию о погоде в точках сетки и на уровнях атмосферного давления.

Всю жизнь я не могу понять, как извлечь нужную мне информацию удобным для использования способом.

Я хочу получить, например, информацию о температуре (переменная данных =t) для каждой точки в сетке на каждом из доступных уровней давления. Или, если это невозможно, получите температуру для каждого широты, долготы для определенного уровня давления.

Мой grib файл выглядит так:

Dimensions:        (isobaricInhPa: 17, latitude: 145, longitude: 288)
Coordinates:
    time           datetime64[ns] 2020-10-16T12:00:00
    step           timedelta64[ns] 06:00:00
  * isobaricInhPa  (isobaricInhPa) int64 850 750 700 600 500 ... 175 150 125 100
  * latitude       (latitude) float64 -90.0 -88.75 -87.5 ... 87.5 88.75 90.0
  * longitude      (longitude) float64 0.0 1.25 2.5 3.75 ... 356.2 357.5 358.8
    valid_time     datetime64[ns] 2020-10-16T18:00:00
Data variables:
    t              (isobaricInhPa, latitude, longitude) float32 ...
    u              (isobaricInhPa, latitude, longitude) float32 ...
    v              (isobaricInhPa, latitude, longitude) float32 ...
    gh             (isobaricInhPa, latitude, longitude) float32 ...
Attributes:
    GRIB_edition:            2
    GRIB_centre:             egrr
    GRIB_centreDescription:  U.K. Met Office - Exeter
    GRIB_subCentre:          5
    Conventions:             CF-1.7
    institution:             U.K. Met Office - Exeter, <xarray.Dataset>
Dimensions:        (isobaricInhPa: 5, latitude: 145, longitude: 288)
Coordinates:
    time           datetime64[ns] 2020-10-16T12:00:00
    step           timedelta64[ns] 06:00:00
  * isobaricInhPa  (isobaricInhPa) int64 850 750 700 600 500
  * latitude       (latitude) float64 -90.0 -88.75 -87.5 ... 87.5 88.75 90.0
  * longitude      (longitude) float64 0.0 1.25 2.5 3.75 ... 356.2 357.5 358.8
    valid_time     datetime64[ns] ...
Data variables:
    r              (isobaricInhPa, latitude, longitude) float32 ...
Attributes:
    GRIB_edition:            2
    GRIB_centre:             egrr
    GRIB_centreDescription:  U.K. Met Office - Exeter
    GRIB_subCentre:          5
    Conventions:             CF-1.7
    institution:             U.K. Met Office - Exeter, <xarray.Dataset>
Dimensions:     (latitude: 145, longitude: 288)
Coordinates:
    time        datetime64[ns] 2020-10-16T12:00:00
    step        timedelta64[ns] 06:00:00
    maxWind     int64 0
  * latitude    (latitude) float64 -90.0 -88.75 -87.5 -86.25 ... 87.5 88.75 90.0
  * longitude   (longitude) float64 0.0 1.25 2.5 3.75 ... 356.2 357.5 358.8
    valid_time  datetime64[ns] 2020-10-16T18:00:00
Data variables:
    u           (latitude, longitude) float32 ...
    v           (latitude, longitude) float32 ...
    icaht       (latitude, longitude) float32 ...
Attributes:
    GRIB_edition:            2
    GRIB_centre:             egrr
    GRIB_centreDescription:  U.K. Met Office - Exeter
    GRIB_subCentre:          5
    Conventions:             CF-1.7
    institution:             U.K. Met Office - Exeter, <xarray.Dataset>
Dimensions:     (latitude: 145, longitude: 288)
Coordinates:
    time        datetime64[ns] 2020-10-16T12:00:00
    step        timedelta64[ns] 06:00:00
    tropopause  int64 0
  * latitude    (latitude) float64 -90.0 -88.75 -87.5 -86.25 ... 87.5 88.75 90.0
  * longitude   (longitude) float64 0.0 1.25 2.5 3.75 ... 356.2 357.5 358.8
    valid_time  datetime64[ns] 2020-10-16T18:00:00
Data variables:
    t           (latitude, longitude) float32 ...
    icaht       (latitude, longitude) float32 ...
Attributes:
    GRIB_edition:            2
    GRIB_centre:             egrr
    GRIB_centreDescription:  U.K. Met Office - Exeter
    GRIB_subCentre:          5
    Conventions:             CF-1.7
    institution:             U.K. Met Office - Exeter]

Любая помощь очень ценится!

1 ответ

Это работает для меня с использованием файлов grib2 NWS NCEP и должно работать с файлами grib британского метеорологического бюро. Он также захватывает букву «t» только при определенном уровне давления.

Используйте cfgrib.open_datasets(), чтобы открыть файл grib. (Я использую здесь data.grib в качестве примера имени файла и использую ваш вывод файла grib для получения переменных):

      import cfgrib
ds = cfgrib.open_datasets('data.grib')

Поскольку вам нужна переменная температуры 't', которая находится в 0-м индексе вывода grib, используйте:

      tmp = ds[0].t

Однако вам все равно нужно указать уровень давления. Чтобы узнать, какой индекс использовать, посмотрите значения isobaricInhPa, найденные в выходных данных grib:

      * isobaricInhPa (isobaricInhPa) int64 850 750 700 600 500 ... 175 150 125 100

Подумайте о значениях как о списке:

      [850 750 700 600 500 ... 175 150 125 100]

Итак, если вы хотите 't' на 700 МБ, вы должны использовать t [2], потому что 700 находится во 2-м индексе:

      tmp700 = ds[0].t[2]

(Если вам нужны значения isobaricInhPa, которые не отображаются в выводе файла grib, используйте :)

      ds[0].isobaricInhPa

А затем для широты и долготы используйте:

      lat = ds[0].latitude
lon = ds[0].longitude
Другие вопросы по тегам