转换GrADS (.grd)为NetCDF (.nc)格式?

4

我有包含大气数据的文件,每6小时为一个间隔(每天4个文件),格式为.grd。我也有相关的描述符文件(yyyymmddhh.ctl)。我可以使用GrADS绘制数据。但是我需要将这些文件转换为NetCDF格式(.nc)以便在ferrert的帮助下进行可视化。有人知道如何做吗?
3个回答

8
我强烈建议您使用CDO将文件转换为NetCDF。当对.nc文件进行简单操作时,使用CDO或NCO几乎总是最佳选择。根据我的经验,在正确的运算符可用时,CDO通常比使用Python或R更安全,更快。

e.g.:

cdo -f nc import_binary in_grads.ctl out_ncdf.nc

您可以在CDO论坛的一些主题中找到更多相关内容:

https://code.zmaw.de/boards/1/topics/1031

https://code.zmaw.de/boards/1/topics/213

提示:CDO 在链接多个 CDO 操作符时,请使用 -L 选项以避免段错误,并考虑使用虚拟 RAM 空间(在大多数 Linux 发行版上为 /dev/shm)作为临时文件,以避免磁盘写入。


非常感谢您的关心。它对我帮助很大。你救了我一天... :) - Deep S Banerjee

6
你绝对应该使用气候数据运算器(CDO)来执行以下操作:
cdo -f nc import_binary in.ctl out.nc 

如果您有大量文件需要处理,您可能希望编写一个脚本来处理它们。
例如,我有一个tar文件,其中包含来自COAMPS模型的一堆GrADS文件,解压后会得到121对.dat和.cdl文件,名称类似于:
COTC.18L.2012102512.000.ctl
COTC.18L.2012102512.000.dat
COTC.18L.2012102512.001.ctl
COTC.18L.2012102512.001.dat
COTC.18L.2012102512.002.ctl
COTC.18L.2012102512.002.dat
...

因此我写了一个小的bash脚本:

#!/bin/bash
for file in *.ctl
do
   fname=${file%.ctl}
   cdo -f nc import_binary ${fname}.ctl ${fname}.nc
   echo ${fname}.nc
done

将它们全部转换为netcdf格式。

Note #1: CDO的构建可能会有些棘手,但如果你使用的是Linux或Mac操作系统,可以通过Conda进行安装。

如果你还没有Conda,请安装Miniconda (免费)。以下是安装步骤:

第一步。确保你有一个~.condarc文件,并且它如下所示:

$ more ~/.condarc
channels:
  - conda-forge
  - defaults

步骤2:创建一个自定义的CDO环境来运行CDO:

$ conda create --yes -n CDO python=3.6 cdo
$ source activate CDO

第三步。运行您的nco命令!

注意事项#2:我还创建了一个NcML文件,在我的thredds数据服务器上虚拟聚合这些数据。该文件看起来像这样:

<netcdf xmlns="http://www.unidata.ucar.edu/namespaces/netcdf/ncml-2.2">
    <aggregation dimName="time" type="joinExisting">
        <scan location="." regExp=".*COTC\.18L\.[0-9]{10}\.[0-9]{3}\.nc$"/>
    </aggregation>
</netcdf>

请参见https://gis.stackexchange.com/questions/70919/setting-up-thredds-catalogs-for-ocean-model-data,了解如何建立THREDDS数据服务器以处理此类问题。

非常感谢您提供的有用答案。在我输入该命令以转换二进制文件时,出现了一个错误,即描述文件中出现未知关键字(pdef)。如何解决这个问题? - Li Ziming

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接