2301_78114479 2026-02-07 09:56 采纳率: 0%
浏览 3

gee多年平均降水栅格

利用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
    });
    

    重点:确保 regionscale 参数与你的需求匹配。


    ✅ 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文件,我可以帮你修改代码以适应你的需求。

    评论

报告相同问题?

问题事件

  • 创建了问题 2月7日