netCDF4文件网格大小查询及100km转25km分辨率方法咨询
将CMIP6 INM-CM4-8的tasmax数据从100km插值到25km的实现方法
一、Python实现方案
工具依赖
先安装处理NetCDF和气候数据的必要库:
pip install xarray netCDF4 xesmf numpy
具体步骤
- 读取原始数据
import xarray as xr # 替换为你的tasmax文件路径 ds = xr.open_dataset("tasmax_inm-cm4-8_historical.nc") # 确认数据结构(lat、lon维度和tasmax变量) print(ds)
- 构建25km分辨率目标网格
原始100km对应lat=120、lon=180,25km是4倍分辨率,因此目标维度设为lat=480、lon=720,保持和原始数据一致的经纬度范围:
import numpy as np lat_min, lat_max = ds.lat.min().item(), ds.lat.max().item() lon_min, lon_max = ds.lon.min().item(), ds.lon.max().item() # 生成高分辨率经纬度数组 target_lat = np.linspace(lat_min, lat_max, 480) target_lon = np.linspace(lon_min, lon_max, 720) # 创建目标数据集模板 ds_target = xr.Dataset( { "lat": (["lat"], target_lat), "lon": (["lon"], target_lon), } )
- 执行插值重网格化
使用xesmf的双向线性插值(适合温度这类连续变量,平衡精度和效率):
import xesmf as xe # 创建重网格器 regridder = xe.Regridder(ds, ds_target, "bilinear") # 对tasmax变量插值 ds_tasmax_highres = regridder(ds["tasmax"]) # 整合为完整数据集,保留原始时间等维度 ds_highres = ds_target.copy() ds_highres["tasmax"] = ds_tasmax_highres
- 保存结果
ds_highres.to_netcdf("tasmax_inm-cm4-8_25km.nc")
提示:如果需要守恒型插值(比如通量类变量),可将插值方法改为
conservative,温度类变量用双向线性足够。
二、QGIS实现方案
具体操作步骤
- 导入NetCDF数据
- 点击
图层->添加图层->添加栅格图层,选择你的tasmax文件。 - 在对话框中选择
tasmax变量,按需选择时间步(逐日数据可加载单日期或全序列),点击添加。
- 创建25km分辨率模板
- 打开
处理->工具箱,搜索创建常量栅格工具:- 范围:复制原始tasmax图层的地理范围(从图层属性中查看)。
- 像素大小:设为原始分辨率的1/4(比如原始100km对应1.875°经度,25km则设为0.46875°;用米单位直接设25000)。
- 输出CRS:与原始数据保持一致(一般为WGS84 EPSG:4326)。
- 保存为临时或本地文件。
- 执行重采样插值
- 在工具箱搜索
栅格重采样(或GDAL的Warp (重投影)):- 输入图层:选择导入的tasmax栅格。
- 输出设置:选择刚创建的25km模板,或直接指定分辨率为25000米。
- 重采样方法:选
双线性插值(适合温度),追求精度可选立方卷积插值。 - 时间序列数据需勾选
处理所有波段。
- 点击
运行生成高分辨率数据。
- 导出结果
- 右键点击生成的图层,选择
导出->保存为,格式选NetCDF,设置路径后完成导出。
内容的提问来源于stack exchange,提问作者Vandita Srivastava
相关产品推荐
相关产品推荐

