【问题标题】:Is there a way to crop a NETCDF file?有没有办法裁剪 NETCDF 文件?
【发布时间】:2014-11-02 02:15:12
【问题描述】:

假设您有一个文件example.nc,其中定义了 90N、90S、180E、180W 区域的风数据。无论如何我可以在 linux 中使用简单的 nc 类型命令(无需在 matlab/python 中提取数据进行重写),裁剪此文件以包含一个较小的区域,即上述的子集。

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

【问题讨论】:

    标签: linux netcdf nco cdo-climate


    【解决方案1】:

    是的,使用 NCO 包中的 nckshttp://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
    

    【讨论】:

    • 请注意:有时您可能会收到错误消息,除非您在昏暗范围后放置小数点。因此,如果您遇到问题,请尝试:ncks -d lat,30.,40. -d lon,25.,50. example.nc -O cropped_example.nc
    • @brews 使用小数表示要提取的实际纬度/经度范围,而使用整数表示与实际经度/经度对应的索引范围。很高兴澄清!
    【解决方案2】:

    nco 工作正常,但只是列出一个替代方案,也可以使用cdo(气候数据运算符)来完成,我发现它更容易记住。您可以通过这种方式直接指定经度和纬度值:

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

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

    有关提取子区域的更多详细信息,我已发布this video tutorial on youtube

    如果您还没有安装 cdo,您可以在 Ubuntu 上使用

    sudo apt-get install cdo
    

    cdo 具有许多其他用于处理、合并和拆分文件的功能以及出色的在线文档。请注意,要使cdo 工作,需要根据 CF 约定定义坐标变量(纬度/经度),因此在这样nco 解决方案就更健壮了(参见 cmets)。

    【讨论】:

    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2021-09-07
      • 2011-08-04
      • 1970-01-01
      • 2020-09-27
      • 2013-05-16
      • 1970-01-01
      • 2015-01-11
      • 2020-08-28
      • 1970-01-01
      相关资源
      最近更新 更多