Skip to content

对 NetCDF 格式进行区域裁剪操作

本文档以 CDO 工具和 Python 脚本语言两种处理方式为例,详细说明对 NetCDF 格式数据进行地理区域精准裁剪的操作方法。

前置说明

  • 待处理数据格式:NetCDF(*.nc)
  • 地理坐标要求:数据集需包含经度(grid_xt/lon/longitude)、纬度(grid_yt/lat/latitude),且坐标值为 WGS84 坐标系下的十进制浮点数
  • 裁剪规则:左闭右闭区间,即[起始值, 结束值]范围内的所有格点均会被保留

方法一:使用cdo进行区域裁剪

  1. 环境配置:可详见https://www.tjweather.com/info/doc/datause/cod.html

  2. 区域裁剪

Bash
cdo sellonlatbox,lon1,lon2,lat1,lat2 input.nc output.nc
#示例:选取 100°E120°E,20°N40°N 范围:
cdo sellonlatbox,100,120,20,40 input.nc output.nc
  • lon1:经度起始值,数据类型为浮点数
  • lon2:经度结束值,数据类型为浮点数
  • lat1:纬度起始值,数据类型为浮点数
  • lat2:纬度结束值,数据类型为浮点数

方法二:使用python进行区域裁剪

  1. 环境与依赖:
  • Python 3.x
  • 依赖库:xarray
  1. 区域裁剪脚本
Python
import xarray as xr

def crop_nc_by_lonlat(input_nc, output_nc, lon_range, lat_range):
    lon_min, lon_max = lon_range
    lat_min, lat_max = lat_range
    crop_region = {
        "grid_xt": slice(lon_min, lon_max),
        "grid_yt": slice(lat_min, lat_max)}
        
    ds = xr.open_dataset(input_nc)
    ds_crop = ds.sel(**crop_region)
    ds_crop.to_netcdf(output_nc)
    ds.close()  

# ===================== 函数调用示例 =====================
if __name__ == "__main__":
    input_nc = "./u100m.nc"       #需要裁剪的nc数据
    output_nc = "./u100m_crop.nc" #裁剪后的输出文件
    lon_range = [115, 120]        # 需要裁剪的经度范围
    lat_range = [25, 35]          # 需要裁剪的纬度范围
    
    crop_nc_by_lonlat(input_nc,output_nc,lon_range,lat_range)