有没有办法裁剪NETCDF文件?

时间:2014-09-08 19:08:24

标签: linux netcdf nco cdo-climate

想象一下,您有一个文件example.nc,其风力数据定义在90N,90S,180E,180W区域。无论如何我可以在linux中使用简单的nc类型命令(不用matlab / python中的数据提取来重写),裁剪此文件以包含一个较小的区域,上面的子集。

例如,30N,10S,60E和30W。

3 个答案:

答案 0 :(得分:9)

是的,使用ncks包中的NCOhttp://nco.sourceforge.net/nco.html

您需要知道与您想要的纬度/经度范围相对应的指数。假设它们在纬度为30-40,经度为25-50。然后你可以用

裁剪netCDF文件
ncks -d lat,30,40 -d lon,25,50 example.nc -O cropped_example.nc

答案 1 :(得分:3)

NCO工作正常,但只是为了列出一个替代方案,人们也可以使用cdo(气候数据运算符)来做到这一点,我发现它更容易记住,意味着你可以直接指定经度和纬度值:

cdo sellonlatbox,lon1,lon2,lat1,lat2 infile.nc outfile.nc

其中lon1,lon2,lat1,lat2定义了所需区域的边界。 如果您还没有安装它,可以使用

在Ubuntu上获取它
sudo apt-get install cdo

cdo还有许多其他功能,用于处理,组合和拆分文件以及优秀的在线文档。

请注意,要使CDO工作,需要根据CDF约定定义坐标变量(lat / lon)。 ncks方法更加强大,因为它可以切割任何轴,但你需要计算索引。

答案 2 :(得分:2)

如果您使用的是Linux或macOS,则可以在Python上使用nctoolkit(https://nctoolkit.readthedocs.io/en/latest/)轻松完成此操作。

import nctoolkit as nc
nc.options(lazy = True)
data = nc.open_data("example.nc")
data.clip(lon = [25, 50], lat = [30, 40])
data.write_nc("output.nc")

在后台,nctoolkit使用CDO。因此,以上等效于上述CDO方法:

cdo sellonlatbox,lon1,lon2,lat1,lat2 infile.nc outfile.nc