前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CDO转换数据集格式

CDO转换数据集格式

作者头像
bugsuse
发布2020-04-21 17:26:11
3.2K0
发布2020-04-21 17:26:11
举报
文章被收录于专栏:气象杂货铺气象杂货铺

在进行数据处理和分析的过程中或是基于其他原因,为了方便进一步的处理,有时需要将NetCDF数据格式转换为GRIB数据格式。

在格式转换的过程中,首先要确定NetCDF格式数据中是否全部变量都包含网格信息,或是网格类型为非 generic。因为CDO不支持上述两种情况下的格式转换。

CDO支持的网格类型如下:

  • Latitude/longitude grid
  • Lambert conformal grid
  • Gaussian latitude/longitude grid
  • Rotated latitude/longitude grid
  • Spherical Harmonic Coefficients
  • Icosahedral-hexagonal GME grid

执行命令:

代码语言:javascript
复制
cdo -f grb copy infile.nc outfile.grb

注意:不能省略操作符。

通常情况下,执行上述转换命令时可能会碰到以下提示:

代码语言:javascript
复制
Warning (cdfSetVar) : Inconsistent variable definition for XLAT_U!
Warning (cdfSetVar) : Inconsistent variable definition for XLONG_U!
Warning (cdfSetVar) : Inconsistent variable definition for XLAT_V!
Warning (cdfSetVar) : Inconsistent variable definition for XLONG_V!
Warning (define_all_grids) : Time varying grids unsupported, using grid at time step 1!
Warning (cgribexDefGrid) : Curvilinear grids are unsupported in GRIB1! Created wrong GDS!
Warning (cgribexDefGrid) : The CGRIBEX library can not store fields on the used grid!

Error (cgribexDefGrid) : Unsupported grid type: generic

红色部分提示表示 不支持 generic 网格类型。在CDO中 generic 表示的只是点,其中不包含任何网格信息。

在转换之前应该先看一下NetCDF文件的网格信息:

代码语言:javascript
复制
cdo sinfon infile.nc

部分输出信息如下:

代码语言:javascript
复制
   Grid coordinates :
     1 : curvilinear              : points=48240 (240x201)
                            XLONG : 115.839 to 123.957 degrees_east
                             XLAT : 30.0914 to 35.6799 degrees_north
     2 : generic                  : points=59
     3 : generic                  : points=60
     4 : generic                  : points=4
     5 : curvilinear              : points=48441 (241x201)
                          XLONG_U : 115.822 to 123.974 degrees_east
                           XLAT_U : 30.0909 to 35.6799 degrees_north
     6 : curvilinear              : points=48480 (240x202)
                          XLONG_V : 115.838 to 123.958 degrees_east
                           XLAT_V : 30.0776 to 35.6937 degrees_north
     7 : generic                  : points=1

以上信息是选取的网格信息,其中有7个网格坐标,1,5,6三个是曲线网格坐标,而其余的网格类型为 generic,是不支持转换到GRIB格式的。

因此,在进行上述格式转换时要选择指定的网格类型,然后进行转换:

代码语言:javascript
复制
cdo -f grb selgrid,1,5,6 infile.nc outfile.grb

之后就能成功转换数据格式了。查看 outfile.grb 文件信息可以发现,infile.nc中的generic网格类型变量都不存在了 ,而且变量名也都发生了变化 ,变量名命名方式为 var + infile.nc文件中变量的顺序。

如果输入文件不包含网格信息,可以使用setgrid操作符设置网格描述信息,然后再执行转换操作。当然,NCO中也有命令可以完成网格信息添加。比如: ncatted。

除了NetCDF和GRIB间的格式转换之外,还支持其他格式的转换,但是由于我没用到(一般也很少用到),所以就不说了。当然,套路都是一样的。

注意:

编译CDO时,要使用--with*选项指定要支持的操作,比如支持NetCDF,GRIB数据格式,需要指定 --with-netcdf, --with-grib_api 选项。完整的--with*选项如下(加粗为常用项): --with-cmor= --with-fftw3 --with-grib_api= --with-libxml2= --with-netcdf= --with-pic --with-sysroot= --with-threads= --with-curl= --with-gnu-ld --with-hdf5= --with-magics= --with-PACKAGE --with-proj= --with-szlib= --with-udunits2=

ECMWF提供了新的工具(即ecCodes)支持grib_api的功能,但是在使用老版本的CDO时,对于初学者来说仍建议使用grib_api。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-08-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 气象杂货铺 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档