1. ERA5-Land数据与GEE平台简介
ERA5-Land是欧洲中期天气预报中心(ECMWF)推出的高分辨率陆地再分析数据集。这个数据集通过重新运行ERA5气候再分析系统的陆地分量,将空间分辨率提升到约9公里,比ERA5的31公里分辨率精细得多。这种高分辨率特性使其特别适合区域尺度的气候研究、农业监测和环境建模等应用。
在GEE平台上处理ERA5-Land数据有几个显著优势。首先,GEE提供了强大的云计算能力,用户无需下载庞大的原始数据到本地,可以直接在云端处理。其次,GEE内置了丰富的地理空间分析函数,能够高效地进行时间序列分析、空间聚合等操作。最重要的是,GEE对学术研究免费开放,大大降低了气候数据分析的门槛。
ERA5-Land数据集包含50多个气候变量,时间跨度从1950年至今,时间分辨率为逐小时。对于温度与降水研究,最常用的两个变量是:
- temperature_2m:2米高度处的空气温度(单位:开尔文)
- total_precipitation:累计降水量(单位:米)
2. 准备工作与数据筛选
2.1 设置研究区域和时间范围
在开始处理前,首先需要明确研究区域和时间范围。GEE支持多种几何图形定义方式,最常用的是通过坐标点绘制多边形。例如,我们可以这样定义中国华北地区的研究区域:
var ROI = ee.Geometry.Polygon( [[[104.26, 37.54], [104.26, 31.50], [115.69, 31.50], [115.69, 37.54]]]);对于时间范围,如果需要处理多年数据,建议使用循环结构。比如要分析1950-2023年的数据,可以这样设置:
var yearList = ee.List.sequence(1950, 2023);2.2 数据筛选与质量控制
ERA5-Land数据在GEE中的ID是"ECMWF/ERA5_LAND/HOURLY"。筛选数据时需要注意几个关键点:
- 时间筛选要精确到毫秒级,避免数据遗漏
- 变量选择要明确指定,减少不必要的数据加载
- 对于大区域研究,可以考虑先进行空间裁剪以提高效率
示例代码:
var filteredData = ee.ImageCollection('ECMWF/ERA5_LAND/HOURLY') .filter(ee.Filter.date('2020-01-01', '2021-01-01')) .filterBounds(ROI) .select(['temperature_2m', 'total_precipitation']);3. 时间序列聚合与单位转换
3.1 温度数据处理
ERA5-Land中的温度数据默认以开尔文为单位,而大多数气候研究需要使用摄氏度。转换公式很简单:
var tempCelsius = temperatureImage.subtract(273.15);对于年度平均温度的计算,GEE提供了mean()函数可以轻松实现:
var annualMeanTemp = filteredData.select('temperature_2m') .mean() .subtract(273.15);3.2 降水数据处理
降水数据需要进行两个重要处理:
- 单位转换:原始数据单位为米,通常需要转换为毫米
- 累计计算:小时数据需要聚合为年总量
处理代码示例:
var annualPrecip = filteredData.select('total_precipitation') .sum() .multiply(1000); // 转换为毫米4. 批量导出与可视化
4.1 自动化批量导出
对于多年数据处理,我们可以编写循环自动完成所有年份的计算和导出:
yearList.getInfo().forEach(function(year) { var startDate = ee.Date.fromYMD(year, 1, 1); var endDate = ee.Date.fromYMD(ee.Number(year).add(1), 1, 1); var yearlyData = ee.ImageCollection('ECMWF/ERA5_LAND/HOURLY') .filter(ee.Filter.date(startDate, endDate)) .select(['temperature_2m', 'total_precipitation']); // 计算年平均温度 var meanTemp = yearlyData.select('temperature_2m') .mean() .subtract(273.15) .rename('temp_mean'); // 计算年总降水 var totalPrecip = yearlyData.select('total_precipitation') .sum() .multiply(1000) .rename('precip_total'); // 合并为单幅图像 var result = meanTemp.addBands(totalPrecip); // 导出设置 Export.image.toDrive({ image: result, description: 'climate_' + year, folder: 'ERA5_Annual', region: ROI, scale: 10000, maxPixels: 1e12, fileFormat: 'GeoTIFF' }); });4.2 数据可视化技巧
GEE提供了灵活的可视化功能,可以帮助我们快速检查数据质量。例如,设置温度的颜色梯度:
var tempVis = { min: -20, max: 30, palette: ['blue', 'cyan', 'green', 'yellow', 'red'] }; Map.addLayer(annualMeanTemp, tempVis, '年平均温度');对于降水数据,由于分布通常不均匀,建议使用对数色阶:
var precipVis = { min: 0, max: 2000, palette: ['white', 'blue', 'darkblue'] };5. 实际应用与注意事项
5.1 区域气候分析案例
以华北平原为例,我们可以计算1950-2020年的温度变化趋势。具体步骤包括:
- 计算每年的平均温度
- 将结果转换为时间序列
- 使用线性回归分析趋势
// 创建温度时间序列 var tempSeries = ee.ImageCollection.fromImages( yearList.map(function(year) { var start = ee.Date.fromYMD(year, 1, 1); var end = start.advance(1, 'year'); return ee.ImageCollection('ECMWF/ERA5_LAND/HOURLY') .filterDate(start, end) .select('temperature_2m') .mean() .subtract(273.15) .set('year', year); }) ); // 计算线性趋势 var trend = tempSeries.reduce(ee.Reducer.linearFit());5.2 常见问题与解决方案
在实际使用中可能会遇到几个典型问题:
内存不足错误:处理大区域多年数据时,可以尝试:
- 分小块区域处理
- 分批处理年份
- 降低输出分辨率
数据缺失问题:ERA5-Land基本没有数据缺失,但如果遇到可以:
- 检查时间筛选是否正确
- 确认区域是否在陆地范围内
单位混淆:特别注意:
- 温度单位是开尔文(原始数据)
- 降水单位是米(原始数据)
- 建议在变量名中明确单位,如"temp_C"、"precip_mm"
6. 高级技巧与性能优化
6.1 并行处理加速
GEE允许通过将任务添加到任务队列实现伪并行处理。我们可以修改批量导出代码,让所有年份的任务同时提交:
var exportTasks = yearList.map(function(year) { // ...处理逻辑同上... return Export.image.toDrive({ image: result, description: 'climate_' + year, folder: 'ERA5_Annual', region: ROI, scale: 10000, maxPixels: 1e12 }); }); // 手动在控制台执行exportTasks.getInfo()查看任务列表 // 然后可以逐个启动任务6.2 内存使用优化
处理长时间序列数据时,可以采用"分块-聚合"策略:
- 先按月处理数据
- 将中间结果保存到GEE资产
- 最后聚合年度结果
// 示例:分月处理温度数据 var monthlyMeans = ee.ImageCollection.fromImages( ee.List.sequence(0, 11).map(function(month) { var start = ee.Date.fromYMD(year, month, 1); var end = start.advance(1, 'month'); return ee.ImageCollection('ECMWF/ERA5_LAND/HOURLY') .filterDate(start, end) .select('temperature_2m') .mean() .set('month', month); }) ); // 计算年度平均 var annualMean = monthlyMeans.mean();7. 结果验证与精度评估
7.1 交叉验证方法
为确保结果可靠性,可以采用以下验证方法:
- 空间一致性检查:比较相邻像元的值是否合理
- 时间一致性检查:检查年际变化是否连续
- 站点数据对比:与气象站观测数据进行比对
7.2 不确定性分析
ERA5-Land数据本身带有不确定性信息,我们可以利用这些数据进行误差评估:
// 获取温度不确定性数据 var tempUncertainty = ee.ImageCollection('ECMWF/ERA5_LAND/HOURLY') .filterDate('2020-01-01', '2021-01-01') .select('temperature_2m_uncertainty') .mean();在实际项目中,我通常会先处理少量测试年份,确认结果合理后再进行全量处理。对于华北平原的气候分析,这套方法已经成功应用于多个农业气候研究项目,处理效率比传统方法提高了数十倍。特别是在处理1950年以来的长时间序列数据时,GEE的批量处理能力展现出了巨大优势,传统方法需要数周完成的工作,在GEE上通常只需几小时就能完成。