You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将旋转极坐标NetCDF气候数据转换为常规网格?

旋转极坐标NetCDF转常规经纬度网格方案

数据疑惑解释

你的数据中虽然包含lat和lon变量,但它们是二维数组(随rlat/rlon网格点变化),仅代表旋转极网格每个点对应的真实经纬度,并非规则的经纬度网格(如固定间隔的1°×1°网格)。如果需要按固定经纬度范围调用、与其他规则网格数据对比或做标准化绘图,就需要将数据插值到常规经纬度网格上。


方法一:使用CDO(气候数据操作工具)

CDO可自动识别文件中的rotated_pole投影信息,无需手动指定旋转极参数,直接通过插值命令完成转换:

1. 定义目标规则网格

你可以先创建一个文本文件(比如target_grid.txt)描述目标网格,以1°分辨率全球网格为例:

gridtype = lonlat
xsize = 360
ysize = 180
xfirst = -180
xinc = 1
yfirst = -90
yinc = 1

或者直接在命令中用字符串定义网格,省去文件步骤。

2. 执行插值转换

  • 双线性插值(适合降水这类连续变量):
# 使用网格文件
cdo remapbil,target_grid.txt input.nc output.nc

# 直接用字符串定义网格(1°分辨率)
cdo remapbil,"lonlat,360,180,-180,1,-90,1" input.nc output.nc
  • 保守插值(适合需要保持总量的通量类变量):
cdo remapcon,target_grid.txt input.nc output.nc

3. 可选:先裁剪区域再插值

如果只需要特定经纬度范围的数据,可先裁剪再插值,减少计算量:

# 裁剪东经70-140°、北纬15-55°区域
cdo sellonlatbox,70,140,15,55 input.nc cropped.nc
# 插值到目标网格
cdo remapbil,target_grid.txt cropped.nc output_cropped.nc

方法二:使用Python(xarray + xesmf)

如果需要更灵活的自定义操作,用Python的xarray和xesmf库实现:

import xarray as xr
import xesmf as xe
import numpy as np

# 1. 读取原始旋转极坐标数据
ds = xr.open_dataset('input.nc')

# 2. 创建目标常规经纬度网格(示例为1°分辨率)
target_ds = xr.Dataset({
    'lon': (['lon'], np.arange(-180, 180, 1)),
    'lat': (['lat'], np.arange(-90, 90, 1)),
})

# 3. 创建重映射器,选择插值方法
# 双线性插值:'bilinear';保守插值:'conservative'
regridder = xe.Regridder(ds, target_ds, 'bilinear', extrap_method='nearest_s2d')

# 4. 对TOT_PREC变量执行重映射
ds_remapped = regridder(ds['TOT_PREC'])

# 5. 保存转换后的文件
ds_remapped.to_netcdf('output_python.nc')

补充说明

  • 若仅需绘图,也可直接利用原始数据中的二维lat/lon变量,用matplotlib.pyplot.pcolormesh或cartopy绘制,但这种方式无法实现规则网格的批量操作或数据对比。
  • 插值方法选择:双线性插值计算快、结果平滑;保守插值能保持变量总量,适合降水、通量等需要守恒的变量。

内容的提问来源于stack exchange,提问作者tryingnottodiewhilecoding

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 08:35:42