如何在Google Earth Engine中对CHIRPS逐日降水做区域累积并生成图表
GEE实现CHIRPS逐日降水累积及可视化方案
1. 核心实现流程
- 第一步:定义研究基础参数,包括研究区ROI(可导入自有矢量资产、使用GEE内置矢量数据集或手动绘制几何要素)、研究时间起止范围。
- 第二步:加载CHIRPS Daily公开数据集,按预设的时间范围、ROI范围过滤数据集,筛选降水计算所需的
precipitation波段。 - 第三步:通过迭代遍历的方式计算逐日累积降水,为每景累积降水影像保留原日期的时间属性,生成日步长的累积降水影像集合。
- 第四步:对每景累积降水影像做ROI范围内的区域统计,按需求选择平均值、总和、最大值等统计维度,生成时间序列统计结果。
- 第五步:调用GEE内置的图表工具,将时间序列统计结果渲染为折线图,自定义图表标题、坐标轴标签即可得到所需的降水累积变化图表。
2. 可直接运行的示例代码
// 1. 自定义研究参数,可根据需求替换 var roi = ee.Geometry.Rectangle([100, 20, 110, 30]); // 示例研究区范围 var startDate = '2023-01-01'; // 研究起始日期 var endDate = '2023-12-31'; // 研究结束日期 // 2. 加载并过滤CHIRPS逐日降水数据集 var chirpsCol = ee.ImageCollection('UCSB-CHG/CHIRPS/DAILY') .filterDate(startDate, endDate) .filterBounds(roi) .select('precipitation'); // 3. 计算逐日累积降水影像集合 var cumulativePrecip = chirpsCol.iterate(function(image, list) { // 取上一节点的累积值,叠加当日降水量得到当前累积值 var previousCum = ee.Image(ee.List(list).get(-1)); var currentCum = image.add(previousCum).set('system:time_start', image.get('system:time_start')); return ee.List(list).add(currentCum); }, ee.List([ee.Image(0).set('system:time_start', ee.Date(startDate).millis())])); // 移除初始的0值占位影像,得到目标时间范围内的累积集合 var cumulativeCol = ee.ImageCollection(ee.List(cumulativePrecip).remove(0)); // 4. 生成并打印日步长累积降水变化图表 var precipChart = ui.Chart.image.series({ imageCollection: cumulativeCol, region: roi, reducer: ee.Reducer.mean(), // 如需计算区域总累积可替换为ee.Reducer.sum() scale: 5000 // CHIRPS原生分辨率为5km }).setOptions({ title: '研究区逐日累积降水量变化', hAxis: {title: '日期'}, vAxis: {title: '累积降水量(mm)'}, lineWidth: 2, pointSize: 3 }); print(precipChart);
3. 注意事项
- 若需要可视化逐像元的累积降水空间分布,可调用
Map.addLayer方法添加累积影像集合的指定时间节点影像到地图画布,自定义颜色条即可。 - 如果需要导出栅格形式的逐日累积降水产品,可以调用
Export.image.toDrive方法批量导出集合内的影像。 - 若研究区范围大、时间跨度长,可以适当调高
scale参数降低计算量,避免GEE报内存超限错误。 - 统计指标可以根据研究需求调整,除了区域平均、总和,也可选择最大值、最小值等统计维度。
内容的提问来源于stack exchange,提问作者Matteo Giomo
相关产品推荐
相关产品推荐

