3

我正在处理 grib2 文件的分类问题。我一直在尝试Xarray, pynio, pygrib读取这些数据,但还没有解决。谁能解释 grib2 文件的结构是什么?它们是如何创建的?有什么快速的方法可以将它们转换成csv?

4

2 回答 2

4
  1. 我建议使用cfgrib。它是使用 eccodes 的最先进的 python 工具。它完全集成到 xarray 中。

  2. 当你打开一个 grib 文件时,你应该知道有两种方法: 第一种方法需要(如果文件中有多个变量)一个过滤器参数:

import xarray

grib_data = xarray.open_dataset('/path/to/your/grib_file.grb', engine='cfgrib', backend_kwargs={'filter_by_keys':{'typeOfLevel': 'heightAboveGround','level': 2}})

要从文件中获取所有变量,您可以使用 cfgrib 的 open_datasets:

import cfgrib
grib_data = cfgrib.open_datasets('/path/to/your/grib_file.grb')

grib_data将是一个列表xarray.Dataset

  1. 如果您收到默认参数名称paramId0,则可能需要正确的 grib 表。这些由发布 grib 文件的气象服务提供,应放置在ECCODES_DEFINTION_PATH
于 2021-03-10T07:01:38.887 回答
2

GRIB2 与 GRIB1 类似,将消息划分为消息,并将每个消息分为多个部分。一个 GRIB 文件中可以有更多消息。只是彼此串联。如果您有 2 个 GRIB2 文件并想要合并它们,那么简单地使用cat命令就足够了。

例如,这里描述了 GRIB2:https ://www.yumpu.com/en/document/view/11723135/guide-to-wmo-table-driven-code-forms 。一个很好的在线资源:

在线资源更详细地描述了不同部分的参数。

虽然 GRIB2 的基本概念和消息开头与 GRIB1 相似,但在后面的部分 (1-7) 中却大不相同。GRIB2 还允许在一条消息中重复某些部分:

Section 0: Indicator Section
Section 1: Identification Section
Section 2: Local Use Section (optional)                                  |
Section 3: Grid Definition Section                       |               |
Section 4: Product Definition Section    |               |               |
Section 5: Data Representation Section   | (repeated)    | (repeated)    | (repeated)
Section 6: Bit-Map Section               |               |               |
Section 7: Data Section                  |               |               |
Section 8: End Section

第 0 部分:在 GRIB2 中始终为 16 个字节(在 GRIB1 中为 8 个字节),并且包含length消息的总数(所有部分)grib 版本(GRIB1/GRIB2),如果是 GRIB2,则包含消息的规则。

在 GRIB2 中,每个节(第 1 节和第 8 节除外)length都以节(4 字节)和section number(1 字节)开头。因此,当您阅读二进制 GRIB2 文件时,您可以相对简单地将 GRIB2 消息分成几个部分。

第 8 节:总是包含 4 个字节,一个字符串:7777

分类

每个 GRIB 文件可以包含多条消息。消息是网格(第 3 节)产品定义(第 4 节,其中之一:风、温度、相对湿度……)和数据(第 7 节)。这意味着在每个文件中,您可能有不同的数据(风速、气温、当前方向……)。如果您想对这些文件进行分类,您可能应该查看产品定义部分(第 4 部分)。

请注意,一条消息通常指的是在标识部分(第 1 节)中定义的一个参考时间(测量或创建数据集的时间)和在产品中定义的一个预测时间(数据,例如温度的有效时间)定义部分(第 4 部分)

转换为 CSV

您可以在数据表示部分(第 5 节)的帮助下阅读数据部分(第 7 节)以获取实际数据。使用 wgrib2 ( https://www.cpc.ncep.noaa.gov/products/wesley/wgrib2/ ),您可以轻松地将数据转储到文件中。请注意,要了解数据代表什么以及它们使用什么单位,您还需要考虑产品定义部分(第 4 部分)。

请注意,数据部分(第 7 部分)中的数据已编码。数据表示部分(第 5 节)中描述了它们是如何编码的。在某些情况下,还有一个非空位图部分(第 6 部分),它说明哪些位置有有效值。一个例子可以是百分比的量。位图部分将定义网格上是否有云层的点(true/false位数组)。数据部分仅包含存在一些云层的点(位图部分位为true)并存储 0-100% 之间的值。这是减少空间的方法之一。

于 2021-03-10T22:53:05.317 回答