有办法裁剪NETCDF文件吗?

14
假设你有一个名为example.nc的文件,其中包含定义在北纬90度、南纬90度、东经180度和西经180度区域内的风数据。在Linux系统中,是否有一种简单的nc型命令(无需在matlab / python中提取数据以重写),可以裁剪该文件以包括上述较小区域的子集? 例如,30N,10S,60E和30W。
3个回答

18

是的,可以使用 NCO 包中的 ncks 命令:http://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

确保使用整数值指定索引。否则,您还可以直接指定所需的纬度和经度值范围,但在这种情况下,您必须确保使用小数点将范围传递为浮点数。

 ncks -d lat,30.,-10. -d lon,-30.,60. example.nc -O cropped_example.nc

提醒一下:有时候,除非在 dim 范围后面加上小数点,否则可能会出现错误。因此,如果遇到问题,请尝试使用以下命令:ncks -d lat,30.,40. -d lon,25.,50. example.nc -O cropped_example.nc - brews
7
使用小数表示要提取的实际纬度/经度范围,而使用整数表示对应于实际纬度/经度的索引范围。很好澄清! - N1B4

12

nco 运行良好,但是为了列出另一种选择,可以使用 cdo(气候数据运算符),我发现它更容易记忆。您可以以这种方式直接指定经纬度值:

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

其中lon1、lon2、lat1和lat2定义了您需要的区域的边界。

请注意,不管输入文件中使用的是哪种约定,经度可以使用0:360或-180:180来指定。输出约定将遵循cdo命令使用的约定。此命令也可用于将文件从一种格式转换为另一种格式。

有关提取子区域的更多详细信息,请参阅我在YouTube上发布的视频教程

如果您尚未安装cdo,可以在Ubuntu上获得它

sudo apt-get install cdo

cdo有许多其他用于处理、组合和拆分文件的功能,并且有出色的在线文档。请注意,为了使正常工作,坐标变量(lat/lon)需要根据CF约定进行定义,因此在这方面,nco解决方案更加稳健。


2
+1 给 cdo。我刚刚进行了一些实验,它有很多有用的功能,我在这里放了几个示例,说明如何通过 bbox、z 轴和时间维度进行裁剪(当然不需要知道索引)。请点击此处查看:https://medium.com/@danwild.io/crop-a-netcdf-file-by-xy-z-and-time-with-cdo-ee3f1e3a2678 - danwild

3

如果你使用的是Linux或macOS系统,可以使用Python上的nctoolkit (https://nctoolkit.readthedocs.io/en/latest/)很容易地实现这一点。

import nctoolkit as nc
data = nc.open_data("example.nc")
data.crop(lon = [25, 50], lat = [30, 40])
data.to_nc("output.nc")

nctoolkit在底层使用CDO。因此,上述内容相当于上面提到的CDO方法:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接