CDO处理气候数据非常方便,尤其是NetCDF格式的数据。 可以说是气候数据处理的瑞士军刀。

本文以CMIP数据为例,说明如何使用CDO裁剪NetCDF数据。

​​​​

定期种植

规则裁剪一般有两种方法:

经纬度裁剪

根据经纬度裁剪需要一个由经纬度决定的box经纬度范围,即lonmin、lonmax、latmin、latmax。 此选择操作使用 CDO 中的 sellonlatbox 命令。 例如,如果我们想从全球数据中选择中国的范围,那么我们可以使用如下命令:

cdo sellonlatbox,73,136,3,54 global.nc china.nc

以上四个数字分别对应您目标区域的最小经度、最大经度、最小纬度和最大纬度。

根据网格的ID裁剪

这个一般用于特殊网格,比如高斯N16网格。 示例用法如下:

cdo selindexbox,60,11,3,11 infile outfile

(我不是很熟悉,就不说了,因为很少用到)

不规则种植

按照以上规则裁剪的结果一般是这样的:

图幅编号求经纬度范围_经纬度范围_纬度和经度范围

定期种植

但是很多时候我们想要的是根据shp文件进行不规则裁剪的结果,比如这样:

经纬度范围_图幅编号求经纬度范围_纬度和经度范围

不规则种植

首先我们要知道,不规则裁剪是屏蔽掉(设置为nodata)不需要的格子,而不是删除那些格子!

得到上面的结果有很多方法,比如用R,Python,MATLAB等,其他的账号楼主写的很多,我就不再赘述了。 这里介绍一种不用打开编程语言直接在命令行完成的方法。

想用的工具是CDO和GDAL(GIS一般安装GDAL)经纬度范围,思路是:

光栅化shp文件

我们可以很方便的在命令行中使用gdal_rasterize命令对shp文件进行光栅化:

gdal_rasterize -of netCDF -burn 1 -tr 0.01 0.01 china.sha china.nc

通过上面的命令,我们得到了china.nc:

经纬度范围_纬度和经度范围_图幅编号求经纬度范围

面具

进行掩码

CDO提供了ifthen命令来帮助我们完成这一步,它的用法是:

cdo ifthen china.nc global.nc china_masked.nc

最终结果如下:

纬度和经度范围_图幅编号求经纬度范围_经纬度范围

掩码结果如何执行反向掩码?

只需将上面的 ifthen 命令更改为 ifnotthen。

图幅编号求经纬度范围_纬度和经度范围_经纬度范围

参考

【1】cdo官方用户文档