1

我目前正在探索在项目中使用 iris 来使用 python 读取预测 grib2 文件的概念。

我的目标是基于具有特定值的 grib 消息键将 grib 消息加载/转换为 iris 立方体。

我已经尝试过使用 gribapi 的 iris-grib。使用 iris-grib 我还没有在 grib2 文件中找到密钥,尽管通过 cli 使用“grib_ls -w ...”可以看到密钥。gribapi 完成了这项工作,但我不确定如何将它与 iris 接口(我认为 iris-grib 就是为了这个)。

我想知道是否有人知道基于具有特定值的 grib 消息键将消息放入虹膜立方体的方法。谢谢

4

1 回答 1

1

您可以通过 iris-grib 中的低级 grib 接口(即iris_grib.GribMessage类)获取 gribapi 理解的任何内容。
通常你会使用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),或
  • (b) 有时您可以修改消息,使其看起来像可以识别的东西。
    做不到这一点,你可以
  • (c) 只需从 GribMessage 中找到的数据自己构建一个 Iris 立方体:这可能比直接使用 'gribapi' 简单一些(可能不是,具体取决于细节)。

如果你有这样的问题,你绝对应该在 github 项目上提出它(iris-grib 问题)+我们会尽力提供帮助。

PS,因为您已经注册了对 Python3 的兴趣,您可能想知道 gribapi 的更新的“ecCodes”替代品应该很快就会可用,最终使 Python3 支持 grib 数据成为可能。
然而,Python3 版本仍处于测试阶段,我们目前遇到了一些问题,现在由 ECMWF 提出,所以它仍然几乎但不是完全可以实现。

于 2019-01-25T11:48:45.393 回答