如何解决将 grib2 文件转换为 csv
我正在研究 grib2 文件的分类问题。我一直在尝试 Xarray,pynio,pygrib
读取这些数据,但还没有解决。谁能解释一下 grib2 文件的结构是什么?它们是如何创建的?有没有什么快速的方法可以将它们转换成 csv
?
解决方法
-
我建议使用 cfgrib。它是使用 eccodes 的最先进的 Python 工具。它完全集成到 xarray 中。
-
当您打开 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
的列表。
- 如果您收到像
paramId0
这样的默认参数名称,则您可能需要正确的 grib 表。这些由发布 grib 文件的气象服务提供,应放置在ECCODES_DEFINTION_PATH
GRIB2 类似于 GRIB1 分为消息和每个消息的部分。
一个 GRIB 文件中可以包含更多消息。只是彼此串联。如果您有 2 个 GRIB2 文件并希望合并它们,只需使用 cat
命令就足够了。
GRIB2 的描述如下:https://www.yumpu.com/en/document/view/11723135/guide-to-wmo-table-driven-code-forms。一个不错的在线资源:
- https://www.nco.ncep.noaa.gov/pmb/docs/grib2/grib2_doc/
- https://apps.ecmwf.int/codes/grib/format/grib2/
在线资源更详细地描述了不同部分的参数。
虽然 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
Section 0:在 GRIB2 中始终为 16 个字节(在 GRIB1 中为 8 个字节)并且包含消息(所有部分)和 grib 版本 (GRIB1/GRIB2) 和在 GRIB2 的情况下,消息的纪律。
在 GRIB2 中,每个部分(除了部分 1 和 8)都以部分的 length
(4 个字节)和 length
(1 个字节)开头。因此,当您读取二进制 GRIB2 文件时,您可以相对简单地将 GRIB2 消息分成多个部分。
第 8 节:始终包含 4 个字节,一个字符串:section number
分类
每个 GRIB 文件可以包含多条消息。消息是网格(第 3 部分)产品定义(第 4 部分,其中之一:风、温度、相对湿度等)和数据(第 7 部分)。这意味着在每个文件中您可能有不同的数据(风速、气温、当前方向等)。如果您想对这些文件进行分类,您可能应该查看产品定义部分(第 4 部分)。
请注意,一条消息通常指的是一个参考时间(测量或创建数据集的时间),在标识部分(第 1 节)和一个预测时间中定义(数据(例如温度)有效的时间),在产品定义部分(第 4 节)中定义
转换为 CSV
您可以在数据表示部分(第 5 部分)的帮助下阅读数据部分(第 7 部分)以获取实际数据。使用 wgrib2 (https://www.cpc.ncep.noaa.gov/products/wesley/wgrib2/),您可以轻松地将数据转储到文件中。请注意,要了解数据代表什么以及它们使用什么单位,您还需要考虑产品定义部分(第 4 部分)。
请注意,Data Section(第 7 节)中的数据是经过编码的。它们的编码方式在数据表示部分(第 5 节)中进行了描述。在某些情况下,还有一个非空的位图部分(第 6 节),它说明哪些位置有有效值。一个例子可能是云覆盖百分比。位图部分将定义网格上是否有云覆盖的点(7777
/true
位数组)。数据部分仅包含有一些云覆盖的点(位图部分位为 false
)并存储 0-100% 之间的值。这是减少空间的方法之一。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。