将 grib2 文件转换为 csv

问题描述

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

解决方法

  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
,

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

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% 之间的值。这是减少空间的方法之一。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...