首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将GRIB2变量名从pynio映射到cfgrib

将GRIB2变量名从pynio映射到cfgrib
EN

Stack Overflow用户
提问于 2021-08-31 21:02:07
回答 1查看 116关注 0票数 1

我有一个x86 linux机器上的工作程序,它使用pynio从NOAA的NBM产品中读取grib2文件。代码的简化版本如下所示:

代码语言:javascript
复制
import Nio

f = Nio.open_file('foo.grib2', mode='r', options=None)
vars = list(f.variables)

当我打印变量列表时,我得到以下内容:

代码语言:javascript
复制
APCP_P8_L1_acc1h
APCP_P9_L1_acc1h
APTMP_P0_L103
ASNOW_P8_L1_acc1h
CAPE_P0_L1
CAPE_P2_L1
CEIL_P0_L2
CEIL_P0_L215
CEIL_P5_L215
CEIL_probability2
DIST_P0_2L1_103
etc.

现在我必须将我的程序移植到一个不支持Nio模块的体系结构(Nio)上,所以我显然不得不使用cfgrib模块,并从今天开始使用这个模块。

代码语言:javascript
复制
varlist = []

datasets = cfgrib.open_datasets('foo.grib2') # Opens a single file as a list of datasets
    
for ds in datasets:
    for v in ds.variables:
        varlist.append(v)
        
varlist = list(set(varlist)) # eliminate duplicate entries

这个新列表包含的条目如下:

代码语言:javascript
复制
aptmp
asnow
atmosphere
atmosphereSingleLayer
cape
ceil
cloudBase
cloudCeiling
cloudTop
d2m
dswrf
gust
h
heightAboveGround
heightAboveSea
etc.

这里要注意的重要一点是

使用我以前使用过的两个不同的methods;

  • Multiple变量(例如,CEIL_P0_L2CEIL_P0_L215CEIL_P5_L215)获得的变量名之间没有直接的对应关系,这似乎与当我用cfgrib读取文件时变量(例如ceil)在不同子数据集中的递归相对应;

  • 其他变量名(例如,atmosphereatmosphereSingleLayer)似乎不是作为一个实际的数值字段而起作用。

  • 许多网格字段显示了变量名unknown (未在上面的部分列表中显示),而且我不知道如何知道它们是什么,甚至打印数据集的所有字段。

我的问题是:变量名为什么不同,更重要的是,如何使用cfgrib可靠地识别和提取与原始变量名对应的字段(或构造)?由Nio

注意:最初的Nio程序是在将近一年前的NBM文件上运行的,而我是在2021年8月从同一个来源获得的文件上运行cfgrib的。我认为这些文件的内部结构在过渡期间可能已经发生了变化,尽管这似乎不太可能。

EN

回答 1

Stack Overflow用户

发布于 2021-10-14 06:02:13

所以首先,这不是一个属于堆栈溢出的问题,请在将来使用例如https://earthscience.stackexchange.com/

名称不同的原因是软件包使用不同的默认grib_tables。在这些grib_tables中定义和映射变量和标识符。因此,如果您想获得相同的结果,就必须同步grib_tables。当cfgrib使用ECCODES作为后端时,您可能会看到ECCODES_DEFINTIONS_PATH

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69005257

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档