GIS与Climate

V1

2022/07/28阅读:14主题:默认主题

用CDO进行nc数据的不规则裁剪

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

本文以CMIP数据为例,举例说明下如何用CDO对NetCDF数据进行裁剪。

规则裁剪

规则裁剪一般就是两种方法:

  1. 根据经纬度来裁剪

根据经纬度裁剪需要的就是一个经纬度确定的box,也就是lonmin,lonmax,latmin,latmax,这个选取操作在CDO中用的是sellonlatbox命令,比如我们要从全球的数据中选取中国的范围,那么便可以用如下命令:

cdo sellonlatbox,73,136,3,54 global.nc china.nc
  • global.nc是输入文件
  • china.nc是输出文件

上面的四个数字就分别对应你目标区域的最小经度、最大经度、最小纬度、最大纬度

  1. 根据网格的ID来裁剪

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

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

(不是很熟悉,不多讲啦,因为很少用到)

不规则裁剪

上面的规则裁剪出来的结果一般是这样子:

规则裁剪
规则裁剪

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

不规则裁剪
不规则裁剪

首先我们要知道,不规则裁剪就是把不需要的网格进行了mask(设置为nodata),并不是把那些网格删除了!

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

想要得到用到的工具有CDO和GDAL(搞GIS的一般都装了GDAL),其思路为:

  • 栅格化shp文件得到栅格文件;
  • 把上面的文件作为掩膜与全球数据做条件运算。
  1. 栅格化shp文件

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

gdal_rasterize -of netCDF -burn 1 -tr 0.01 0.01 china.sha china.nc
  • china.shp:你研究区的矢量边界
  • china.nc:输出的nc文件(用做mask)

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

mask
mask
  1. 进行mask

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

cdo ifthen china.nc global.nc china_masked.nc

其最终结果就如下:

mask结果
mask结果
  • ifthen命令有三个参数,第一个是mask文件,第二个是要进行mask的文件,第三个是输出结果;
  • 需要注意的是,mask文件(本例也就是china.nc)的分辨率需要跟global.nc的分辨率保持一致,也就是上面gdal_rasterize的tr后面的参数需要与global.nc的网格大小一致。

如何进行反向mask呢?

把上面的ifthen命令改成ifnotthen即可。

参考

【1】cdo官方用户文档

分类:

后端

标签:

操作系统

作者介绍

GIS与Climate
V1

公众号:GIS与Climate,欢迎关注