grib_set -s edition=2 in.grib1 out.grib2
上述命令会转换如下内容:
因为两种编码标准各有不同,再加上一些气象中心会使用本地码表,所以参数转换比较复杂。
转换会基于变量参数的唯一标识符 paramId
。
paramId
的转换如何生成 2 米温度的 GRIB 文件:
grib_set -s paramId=165 in.grib1 out.grib1
grib_set -s paramId=165 in.grib2 out.grib2
如何将 GRIB 1 文件转码为 GRIB 2 文件:
grib_set -s edition=2 in.grib1 out.grib2
在转换到版本 2 的过程中,ecCodes 从 GRIB 1 拷贝 paramId
到 GRIB 2:
paramId
(=165)paramId
(=165)转换仅在 paramId
定义了两个版本的情况下可行。
访问参数数据库网站查看转换是否可行。
使用上一节生成的文件。
将 p.grib1 转换为 GRIB 版本 2 文件 p_converted.grib2
grib_set -s edition=2 p.grib1 p_converted.grib2
查询 p.grib2 的参数命名空间。
$ grib_ls -n parameter p.grib2
p.grib2
centre paramId shortName units name
ecmf 165 10u m s**-1 10 metre U wind component
1 of 1 messages in p.grib2
1 of 1 total messages in 1 file
查询 p_converted.grib2 的参数命名空间。
$ grib_ls -n parameter p_converted.grib2
p_converted.grib2
centre paramId shortName units name
ecmf 165 10u m s**-1 10 metre U wind component
1 of 1 messages in p_converted.grib2
1 of 1 total messages in 1 files
可以看到,不同版本的 GRIB 消息的变量信息相同。
准备一个当前定义配置无法识别的 GRIB 消息:
$ grib_ls -n parameter undefined.grib2
undefined.grib2
centre paramId shortName units name
babj 0 unknown unknown unknown
1 of 1 messages in undefined.grib2
1 of 1 total messages in 1 files
将上面的文件转换成 GRIB 1 文件。
$ grib_set -s edition=1 undefined.grib2 undefined.grib1
ECCODES ERROR : concept: no match for paramId=0
ECCODES ERROR : grib_set_values[0] edition (1) failed: Concept no match