利用gee计算特定区域的多年平均降水量栅格图,最好是5年,且能在图上显示
1条回答 默认 最新
檀越@新空间 2026-02-07 09:57关注上午好☀️☀️☀️️
本答案参考通义千问要使用Google Earth Engine (GEE) 计算特定区域的多年平均降水量栅格图(例如5年的平均),并在地图上显示,可以按照以下步骤进行。我们将以CHIRPS降水数据集为例,这是一个常用的全球降水数据集。
✅ 1. 目标说明
- 目的:计算指定区域(如某个国家或流域)的5年平均降水量,并生成一个栅格图像。
- 工具:Google Earth Engine (GEE)
- 数据源:CHIRPS (Climate Hazards Group Infrared Precipitation with Station data)
- 输出:一个包含5年平均降水量的栅格图像,并在地图上可视化。
✅ 2. 关键步骤详解
步骤一:加载CHIRPS数据集
var dataset = ee.ImageCollection("UCSB/CHIRPS/PENTAD");注意:
PENTAD是每5天的数据,适合用于中长期分析(比如5年)。步骤二:定义时间范围
var startYear = 2018; var endYear = 2023; // 5年 // 将年份转换为日期 var startDate = ee.Date.fromYMD(startYear, 1, 1); var endDate = ee.Date.fromYMD(endYear, 12, 31);重点:确保时间范围覆盖完整的5年数据。
步骤三:过滤时间范围内的数据
var filtered = dataset.filterDate(startDate, endDate);步骤四:计算年度总和
var annualSums = filtered.map(function(image) { var year = image.date().get('year'); return image.select('precipitation').multiply(100).rename('precipitation'); // 转换单位(mm) });说明:CHIRPS数据通常以毫米为单位,乘以100是为了更清晰地显示(可选)。
步骤五:按年聚合数据
var yearlySum = annualSums.reduce(ee.Reducer.sum());重点:使用
reduce(ee.Reducer.sum())来汇总每年的降水数据。步骤六:计算5年平均值
var meanImage = yearlySum.divide(5); // 5年平均
✅ 3. 选择感兴趣区域(ROI)
你可以通过绘制多边形、导入GeoJSON文件或使用已知的地理边界来定义ROI。
var roi = ee.FeatureCollection("FAO/GAUL/2015/level2").filterMetadata('ADM0_NAME', 'equals', 'China');重点:
FAO/GAUL是一个常用的世界国家边界数据集,可用于定义区域。
✅ 4. 裁剪图像到ROI
var clipped = meanImage.clip(roi);重点:这一步将图像限制在你感兴趣的区域内,避免不必要的计算。
✅ 5. 可视化图像
Map.centerObject(roi, 4); Map.addLayer(clipped, {min: 0, max: 200, palette: ['blue', 'green', 'yellow', 'red']}, '5-Year Average Precipitation');重点:
palette可根据需要调整颜色,表示不同降水量等级。
✅ 6. 导出图像(可选)
如果你想将结果导出为GeoTIFF文件,可以使用如下代码:
Export.image.toDrive({ image: clipped, description: '5_year_avg_precipitation', folder: 'GEE_Exports', fileNamePrefix: 'chirps_5_year_avg', region: roi.geometry(), scale: 5000, crs: 'EPSG:4326', maxPixels: 1e10 });重点:确保
region和scale参数与你的需求匹配。
✅ 7. 完整代码示例
// 加载数据集 var dataset = ee.ImageCollection("UCSB/CHIRPS/PENTAD"); // 定义时间范围 var startYear = 2018; var endYear = 2023; var startDate = ee.Date.fromYMD(startYear, 1, 1); var endDate = ee.Date.fromYMD(endYear, 12, 31); // 过滤数据 var filtered = dataset.filterDate(startDate, endDate); // 按年求和 var annualSums = filtered.map(function(image) { var year = image.date().get('year'); return image.select('precipitation').multiply(100).rename('precipitation'); }); // 年度总和 var yearlySum = annualSums.reduce(ee.Reducer.sum()); // 计算5年平均 var meanImage = yearlySum.divide(5); // 定义ROI(以中国为例) var roi = ee.FeatureCollection("FAO/GAUL/2015/level2").filterMetadata('ADM0_NAME', 'equals', 'China'); // 裁剪图像 var clipped = meanImage.clip(roi); // 可视化 Map.centerObject(roi, 4); Map.addLayer(clipped, {min: 0, max: 200, palette: ['blue', 'green', 'yellow', 'red']}, '5-Year Avg Precipitation'); // 导出(可选) Export.image.toDrive({ image: clipped, description: '5_year_avg_precipitation', folder: 'GEE_Exports', fileNamePrefix: 'chirps_5_year_avg', region: roi.geometry(), scale: 5000, crs: 'EPSG:4326', maxPixels: 1e10 });
✅ 8. 注意事项
- 数据分辨率:CHIRPS数据的空间分辨率为0.05°(约5.6公里),适合区域级分析。
- 时间粒度:PENTAD(5天)数据更适合长期趋势分析。
- ROI精度:建议使用高精度的边界数据(如FAO/GAUL)以提高准确性。
- 导出设置:确保
maxPixels设置足够大,否则可能因像素数过多而失败。
✅ 9. 总结
| 步骤 | 内容 | |------|------| | 1 | 加载CHIRPS数据集 | | 2 | 定义时间范围 | | 3 | 过滤数据 | | 4 | 按年求和 | | 5 | 计算5年平均 | | 6 | 定义ROI并裁剪 | | 7 | 可视化结果 | | 8 | 导出图像(可选) |
如果你有具体区域(如某个省或市),也可以提供坐标或GeoJSON文件,我可以帮你修改代码以适应你的需求。
解决 无用评论 打赏 举报