我的文件包含 .grd 格式的 6 小时间隔(每天 4 个文件)的大气数据。我也有相关的描述符文件(yyyymmddhh.ctl)。我可以使用 GrADS 绘制数据。但我需要将这些文件转换为NetCDF格式 (.nc) 以在ferrert的帮助下将其可视化。有谁知道怎么做?
3 回答
我强烈建议您使用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)来存储临时文件以避免磁盘写入。
您绝对应该使用气候数据运营商 (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 。
您可以使用 sdfwrite 命令使用 GrADS 写出 netcdf 数据。文档位于http://iges.org/grads/gadoc/gradcomdsdfwrite.html