3

我的文件包含 .grd 格式的 6 小时间隔(每天 4 个文件)的大气数据。我也有相关的描述符文件(yyyymmddhh.ctl)。我可以使用 GrADS 绘制数据。但我需要将这些文件转换为NetCDF格式 (.nc) 以在ferrert的帮助下将其可视化。有谁知道怎么做?

4

3 回答 3

7

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

例如:

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

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

于 2015-09-04T08:53:03.227 回答
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。

注意 #1:CDO 可能很难构建,但如果您使用的是 Linux 或 Mac,则可以使用 Conda 安装它。

如果还没有 Conda,请安装Miniconda (免费)。就是这样:

步骤 1。确保你有一个~.condarc,它看起来像这样:

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

步骤 2。创建自定义 CDO 环境以运行 CDO:

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

步骤 3。运行你的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>

有关设置 THREDDS 数据服务器以处理此问题的更多信息,请参阅https://gis.stackexchange.com/questions/70919/setting-up-thredds-catalogs-for-ocean-model-data 。

于 2017-03-23T18:57:45.953 回答
0

您可以使用 sdfwrite 命令使用 GrADS 写出 netcdf 数据。文档位于http://iges.org/grads/gadoc/gradcomdsdfwrite.html

于 2015-11-12T18:49:52.987 回答