如何修改ERA5-Land地形数据并导入Google Earth Engine匹配规格?
解决GEE中ERA5-Land与ECMWF位势高度数据的对齐问题
核心差异在于经度范围与像素数量:GEE中的ERA5-Land采用0°到360°(含360°)的经度范围,间隔0.1°,对应3601个经度像素;而你手上的NetCDF文件是0°到359.9°,仅3600个经度像素,缺少了360°位置的像素。以下是两种可行的对齐方案:
方案一:本地预处理NetCDF文件(推荐)
提前修正网格后再上传到GEE,能避免云端处理的性能损耗,推荐用CDO工具或Python xarray实现:
用CDO工具快速修正网格
- 新建一个ERA5-Land网格定义文件
era5_land_grid.txt,内容如下:
gridtype = lonlat xsize = 3601 ysize = 1801 xfirst = 0.0 xinc = 0.1 yfirst = 90.0 yinc = -0.1
- 执行CDO命令重采样:
cdo setgrid,era5_land_grid.txt your_input_file.nc aligned_height.nc
用Python xarray手动补全像素
如果熟悉Python,也可以手动添加360°经度的像素(利用全球数据的周期性,直接复用0°的数值):
import xarray as xr import numpy as np # 读取原始NetCDF文件 ds = xr.open_dataset('your_potential_height.nc') # 添加360°经度坐标 ds = ds.assign_coords(lon=np.append(ds.lon.values, 360.0)) # 复制0°位置的位势高度数据到360° ds['z'] = xr.concat([ds['z'], ds['z'].isel(lon=0)], dim='lon') # 保存对齐后的文件 ds.to_netcdf('aligned_potential_height.nc')
方案二:GEE代码编辑器中直接处理已上传资产
如果已经上传了原始NetCDF到GEE资产库,可以通过重投影补全缺失像素:
// 加载你上传的位势高度资产 var rawHeight = ee.Image('users/你的用户名/原始位势高度资产'); // 获取ERA5-Land的原生投影参数 var era5Proj = ee.ImageCollection("ECMWF/ERA5_LAND/HOURLY").first().projection(); // 重投影并补全缺失的360°像素,用最邻近插值保证周期性连续性 var alignedHeight = rawHeight.reproject({ crs: era5Proj, scale: era5Proj.nominalScale(), resample: 'nearest' }); // 可选:将位势高度转换为几何高程(位势米转几何米) var elevation = alignedHeight.divide(9.80665).rename('elevation'); // 验证对齐结果 print('ERA5-Land投影参数:', era5Proj); print('对齐后高程的尺寸:', elevation.getInfo().bands[0].dimensions);
关键注意事项
- 位势高度转高程:ECMWF提供的位势高度单位是位势米,需除以9.80665转换为几何高程(真实海拔),这一步不可省略。
- 插值方式:因为是全球周期性数据,优先选择
nearest(最邻近插值),避免线性插值带来的边缘误差。
内容的提问来源于stack exchange,提问作者Shaun
相关产品推荐
相关产品推荐

