将grib2消息读入Iris多维数据集

时间:2019-01-24 11:51:26

标签: python-3.x python-2.7 grib python-iris grib-api

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

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

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

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

1 个答案:

答案 0 :(得分:1)

您可以通过iris-grib中的iris_grib.GribMessage类的低级grib界面获得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只知道如何将特定的编码转换为多维数据集:对其所识别的内容非常严格,否则将失败。因此,如果您的数据使用任何无法识别的模板或数据编码,则肯定无法加载。
我只是希望您 在这里有一些不寻常的地方,所以这可能是个问题吗?
您可以从convert()例程开始,根据iris_grib:_load_convert.py的翻译代码来检查期望的消息内容。

要从尚不支持的 中获取虹膜立方体,您可以:

  • (a)扩展翻译规则(即Github PR),或
  • (b)有时您可以修改消息,使其看起来像 可以识别的。
    如果不成功,您可以
  • (c)只是根据您在GribMessage中找到的数据自己构建一个Iris多维数据集:这比直接使用'gribapi'可能要简单一些(可能不是,具体取决于细节)。

如果您遇到类似的问题,那么您绝对应该在github项目(iris-grib issues)上提出该问题,我们将尽力提供帮助。

P.S。当您已经注册了Python3兴趣后,您可能想知道,不久之后将有gribapi 的较新的“ ecCodes”替代物可用,从而使Python3最后支持grib数据成为可能。
但是 ,Python3版本仍处于测试阶段,我们目前遇到了一些问题,现在ECMWF提出了该问题,因此它仍然几乎可以实现,但还不能完全实现