告别手动爬数据!用GEE和CHIRPS V2.0批量下载全球降水数据(附完整JS代码)

发布时间:2026/6/8 21:25:09

告别手动爬数据!用GEE和CHIRPS V2.0批量下载全球降水数据(附完整JS代码) 全球降水数据自动化处理基于GEE与CHIRPS的高效解决方案当研究气候变化、农业规划或水文模型时获取长时间序列的全球降水数据是许多科研工作者面临的共同挑战。传统手动下载方式不仅耗时耗力还容易在数据处理过程中引入人为错误。本文将介绍如何利用Google Earth EngineGEE平台和CHIRPS V2.0数据集构建一套完整的自动化降水数据处理流程。1. 理解CHIRPS数据集与GEE平台优势CHIRPSClimate Hazards Group InfraRed Precipitation with Station data是全球广泛使用的降水数据集它结合了卫星观测和地面站点数据具有以下核心特点时空分辨率0.05°空间分辨率约5.5km每日、每月、每年时间序列覆盖范围全球50°S-50°N区域时间跨度从1981年至今数据质量融合了CHPclim气候学模型、卫星红外数据和地面雨量站观测相比传统下载方式GEE平台提供了三大革命性优势免下载处理直接在云端计算无需下载原始数据并行计算能力利用Google服务器集群处理海量数据完整分析工具链从数据获取到可视化分析的一站式环境// 示例查看CHIRPS数据集元数据 var chirps ee.ImageCollection(UCSB-CHG/CHIRPS/DAILY); print(chirps.first());2. 构建自动化处理框架2.1 基础环境配置在开始编写脚本前需要完成以下准备工作注册GEE账号需谷歌账号访问 https://code.earthengine.google.com/新建脚本文件并导入研究区域边界如Shapefile// 加载研究区域示例为手动绘制几何图形 var roi ee.Geometry.Polygon( [[[经度1, 纬度1], [经度2, 纬度2], [经度3, 纬度3], [经度4, 纬度4]]]); Map.addLayer(roi, {color: FF0000}, 研究区域); Map.centerObject(roi, 6);2.2 时间循环处理核心逻辑批量处理多时段数据的关键在于构建灵活的时间循环结构。以下代码框架可适配年度、月度甚至每日数据提取// 通用时间循环处理框架 function processTimeRange(startYear, endYear, timeUnit) { for (var year startYear; year endYear; year) { if (timeUnit yearly) { processYearlyData(year); } else if (timeUnit monthly) { for (var month 1; month 12; month) { processMonthlyData(year, month); } } } } function processYearlyData(year) { var startDate ee.Date.fromYMD(year, 1, 1); var endDate ee.Date.fromYMD(year, 12, 31); // 数据处理逻辑... } function processMonthlyData(year, month) { var startDate ee.Date.fromYMD(year, month, 1); var endDate startDate.advance(1, month); // 数据处理逻辑... }3. 完整数据处理流程实现3.1 年度降水数据批量导出以下脚本实现了1993-2012年年度平均降水数据的自动计算和导出// 年度数据处理完整示例 var annualPrecip function(year) { var collection ee.ImageCollection(UCSB-CHG/CHIRPS/DAILY) .filterDate(ee.Date.fromYMD(year, 1, 1), ee.Date.fromYMD(year, 12, 31)) .select(precipitation); var meanImage collection.mean().clip(roi); // 可视化参数 var visParams { min: 1.0, max: 17.0, palette: [001137, 0aab1e, e7eb05, ff4a2d, e90000] }; // 添加到地图显示 Map.addLayer(meanImage, visParams, year 年平均降水); // 导出到Google Drive Export.image.toDrive({ image: meanImage, description: CHIRPS_Annual_ year, folder: GEE_Exports, fileNamePrefix: precip_annual_ year, region: roi, scale: 5500, // 匹配CHIRPS原始分辨率 maxPixels: 1e13 }); }; // 执行1993-2012年处理 for (var y 1993; y 2012; y) { annualPrecip(y); }3.2 月度降水数据处理进阶技巧对于更精细的时间尺度分析月度数据提供了更高时序分辨率。以下代码展示了如何优化处理流程// 月度数据处理优化版本 var monthlyPrecip function(startYear, endYear) { // 创建年份序列 var years ee.List.sequence(startYear, endYear); // 创建月度序列 var months ee.List.sequence(1, 12); // 双层循环处理 var processMonth function(year, month) { var start ee.Date.fromYMD(year, month, 1); var end start.advance(1, month); var monthlyMean ee.ImageCollection(UCSB-CHG/CHIRPS/DAILY) .filterDate(start, end) .select(precipitation) .mean() .clip(roi); // 导出设置 var exportName precip_ year _ ee.Number(month).format(%02d); Export.image.toDrive({ image: monthlyMean, description: exportName, folder: CHIRPS_Monthly, region: roi, scale: 5500, maxPixels: 1e13 }); return monthlyMean.set(year, year).set(month, month); }; // 跨年月度处理 var allMonths years.map(function(year) { return months.map(function(month) { return processMonth(year, month); }); }).flatten(); return ee.ImageCollection.fromImages(allMonths); }; // 执行2011-2012年月度处理 var monthlyCollection monthlyPrecip(2011, 2012);4. 高级应用与性能优化4.1 并行处理加速技巧GEE的服务器端计算特性允许我们实现并行处理大幅提升效率// 并行处理实现 var batchExport function(imageList) { // 获取导出任务列表 var exportTasks imageList.map(function(img) { var year ee.Number(img.get(year)).format(%04d); var month ee.Number(img.get(month)).format(%02d); return Export.image.toDrive({ image: img, description: precip_ year _ month, folder: CHIRPS_Parallel, region: roi, scale: 5500, maxPixels: 1e13 }); }); // 批量执行导出 exportTasks.evaluate(function(tasks) { tasks.forEach(function(task) { task.start(); }); }); }; // 使用示例 var monthlyImages monthlyCollection.toList(monthlyCollection.size()); batchExport(monthlyImages);4.2 内存管理与错误处理处理长时间序列数据时内存管理和错误处理至关重要// 稳健型处理框架 var safeProcess function(year) { try { // 检查研究区域是否有效 if (!roi || roi.geometry().type() ! Polygon) { throw 无效的研究区域; } var collection ee.ImageCollection(UCSB-CHG/CHIRPS/DAILY) .filterDate(ee.Date.fromYMD(year, 1, 1), ee.Date.fromYMD(year, 12, 31)) .select(precipitation); // 检查数据是否为空 var size collection.size(); if (ee.Number(size).lt(1)) { throw 没有找到 year 年的数据; } var meanImage collection.mean().clip(roi); // 导出前验证图像有效性 var bandNames meanImage.bandNames(); if (bandNames.size().eq(0)) { throw 计算结果为空; } Export.image.toDrive({ image: meanImage, description: CHIRPS_ year, folder: GEE_Exports, region: roi, scale: 5500, maxPixels: 1e13 }); print(year 年数据处理完成); } catch (err) { print(处理 year 年数据时出错:, err); } }; // 执行处理 for (var y 1993; y 2012; y) { safeProcess(y); }4.3 结果验证与质量控制数据导出后建议进行以下质量检查空间完整性检查确认研究区域内的数据无缺失时间连续性验证检查时间序列无间断值域合理性降水值应在合理范围内通常0-1000mm// 数据质量检查示例 var qualityCheck function(image) { // 检查无效值比例 var stats image.reduceRegion({ reducer: ee.Reducer.mean(), geometry: roi, scale: 5500, maxPixels: 1e13 }); var meanPrecip ee.Number(stats.get(precipitation)); return image.set({ mean_precip: meanPrecip, is_valid: meanPrecip.gt(0).and(meanPrecip.lt(1000)) }); }; // 应用质量检查 var checkedCollection monthlyCollection.map(qualityCheck); print(质量检查结果:, checkedCollection.aggregate_array(is_valid));

相关新闻