Bootstrap

GEE获取气象数据

在 Google Earth Engine (GEE) 上获取xx省5KM格网数据从2000年到2022年的平均气温,你可以按照以下步骤进行操作:

1. 导入格网数据

首先,你需要将你的格网数据上传到 GEE。这通常涉及将数据格式化为 GeoJSON 或 Shapefile 格式,然后通过 GEE的代码编辑器进行上传。

2. 导入气温数据集

接下来,选择一个合适的气温数据集。常用的数据集是 ERA5 Daily Aggregates,提供了全球的日平均气温。

3. 设置时间范围

设定时间范围为2000年到2022年。

4. 聚合年均温

由于你需要的是年均温,你可以按年来聚合这个数据集。

5. 聚合格网数据

使用你上传的格网数据作为一个特征集,将年均温数据按照格网进行聚合。

6. 导出结果

最后,你可以将这些数据导出到你的 Google Drive 或直接在GEE上可视化。

示例:计算2000-2022总的年均气温
 

// 导入气温数据集
var temperatureDataset = ee.ImageCollection('ECMWF/ERA5/DAILY')
  .select('mean_2m_air_temperature')
  .filterDate('2000-01-01', '2022-12-31');

// 计算年均温
var yearlyMean = temperatureDataset.map(function(image) {
  var date = ee.Date(image.get('system:time_start'));
  var year = date.get('year');
  return image.set('year', year);
}).reduce(ee.Reducer.mean());

// 加载格网数据
var grids = ee.FeatureCollection('users/gardenq2000/Shanxi/Shanxi49N');

// 计算每个格网的年均温
var meanTemperatureByGrid = grids.map(function(grid) {
  var meanTemp = yearlyMean.reduceRegion({
    reducer: ee.Reducer.mean(),
    geometry: grid.geometry(),
    scale: 5000,
    maxPixels: 1e9
  });

  return grid.set(meanTemp);
});

// 可视化结果
Map.addLayer(meanTemperatureByGrid, {color: 'FF0000'}, 'Grid Average Temperature');
Map.centerObject(grids, 6);

// 导出数据到Google Drive
Export.table.toDrive({
  collection: meanTemperatureByGrid,
  description: 'GridAverageTemperature2000to2022',
  fileFormat: 'CSV'
});

使用每日数据集与月度数据集计算年均气温,选择哪种取决于研究的具体需求、精确度要求以及数据的可用性。这里是使用每日数据或月度数据的一些考虑因素:

### 使用每日数据的优点:
1. **更高的时间分辨率**:每日数据提供更频繁的观测值,这有助于更精确地捕捉气温的日变化和异常情况。对于气候研究和模型验证等需要详细时间序列的应用,这种高频率数据非常有价值。
2. **灵活性**:每日数据可以自定义到不同的时间聚合级别,例如可以从每日数据计算季节性平均值或其他非标准时间段的平均值。
3. **捕捉极端事件**:在评估气候变化的影响时,每日数据可以帮助识别和分析短暂的极端天气事件,如热浪或寒潮,这些可能在月度平均数据中不那么显著。

### 使用月度数据的优点:
1. **计算简便**:月度数据已经是聚合过的,减少了处理数据的计算负担,使得快速获取和分析长时间序列变得更加容易。
2. **数据大小管理**:由于数据量较每日数据更小,处理速度更快,尤其是在处理大范围或全球尺度数据时。
3. **适用性**:对于需要长期趋势分析而不是日变化分析的研究,如某些生态系统变化研究,月度数据可能已经足够。

### 决定使用哪种数据集
- **研究目的**:需要考虑的最重要因素是研究的具体目的。如果目的是了解温度的精细时间尺度变化或捕捉极端事件,每日数据更为合适。如果目标是评估长期趋势,月度数据可能足够且更易处理。
- **数据处理能力**:考虑可用的计算资源和数据处理能力。如果资源有限,可能倾向于使用月度数据。
- **数据可用性**:有时选择可能受限于所能获得的数据类型。

如果你的研究可以容忍较低的时间分辨率,而且主要关注的是长期趋势,那么使用月度数据是一个合理的选择。这可以减少数据处理的复杂性和资源消耗,同时提供足够的信息来分析和理解年度和跨年的温度变化。
计算每一年的年均气温:

// 导入气温数据集 - ERA5 Monthly Aggregate数据集
var temperatureDataset = ee.ImageCollection('ECMWF/ERA5/MONTHLY')
  .select('mean_2m_air_temperature')
  .filterDate('2000-01-01', '2022-12-31');

// 加载格网数据
var grids = ee.FeatureCollection('users/gardenq2000/Shanxi/Shanxi49N');

// 为每一年计算平均气温,并存储在一个字典中
var startYear = 2000;
var endYear = 2022;
var meanTemperatureByGridAndYear = grids.map(function(grid) {
  var features = ee.FeatureCollection(ee.List.sequence(startYear, endYear).map(function(year) {
    var yearStart = ee.Date.fromYMD(year, 1, 1);
    var yearEnd = yearStart.advance(1, 'year');
    var filteredYear = temperatureDataset.filterDate(yearStart, yearEnd);

    // 检查每年的数据集是否为空
    var checkImage = filteredYear.size().gt(0);
    var meanTemp = ee.Algorithms.If(checkImage,
      filteredYear.mean().reduceRegion({
        reducer: ee.Reducer.mean(),
        geometry: grid.geometry(),
        scale: 5000,
        maxPixels: 1e9
      }),
      ee.Dictionary({'mean_2m_air_temperature': null})
    );

    return ee.Feature(null, {
      'year': year,
      'mean_temperature': ee.Dictionary(meanTemp).get('mean_2m_air_temperature', null)
    });
  }));
  return features;
}).flatten();

// 可视化结果(选择一个特定年份来展示)
var visualization = meanTemperatureByGridAndYear.filter(ee.Filter.eq('year', 2000));
Map.addLayer(visualization, {color: 'FF0000'}, 'Grid Average Temperature 2000');
Map.centerObject(grids, 6);

// 导出数据到Google Drive
Export.table.toDrive({
  collection: meanTemperatureByGridAndYear,
  description: 'GridAverageTemperature2000to2022ByYear',
  fileFormat: 'CSV'
});

计算2000-2022年均风速

  1. 导入风速数据:选择并导入 ERA5 Monthly Aggregates 数据集,并选择10米高度的u分量和v分量的风速。
  2. 计算风速矢量的大小:利用u分量和v分量的平方和的平方根来计算每月的风速矢量的大小。
  3. 计算年均风速:将每月的风速矢量大小图像转换成年均风速。
  4. 加载格网数据:加载你上传的格网数据集。
  5. 格网内平均风速计算:对于每个格网,使用reduceRegion方法来计算该格网内的平均风速。
  6. 可视化和导出:在 GEE 地图上添加处理结果图层并导出数据到 Google Drive
    // 导入风速数据集 - ERA5 Monthly Aggregate数据集
    var windSpeedDataset = ee.ImageCollection('ECMWF/ERA5/MONTHLY')
      .select('u_component_of_wind_10m', 'v_component_of_wind_10m')
      .filterDate('2000-01-01', '2022-12-31');
    
    // 计算每月的风速量
    var monthlyWindSpeed = windSpeedDataset.map(function(image) {
      var uWind = image.select('u_component_of_wind_10m');
      var vWind = image.select('v_component_of_wind_10m');
      // 计算风速矢量的大小
      return image.expression(
        'sqrt(pow(u, 2) + pow(v, 2))',
        {
          'u': uWind,
          'v': vWind
        }
      ).rename('wind_speed')
        .copyProperties(image, ['system:time_start']);
    });
    
    // 计算年均风速
    var yearlyWindSpeed = monthlyWindSpeed.reduce(ee.Reducer.mean());
    
    // 加载格网数据
    var grids = ee.FeatureCollection('users/gardenq2000/Shanxi/Shanxi49N');
    
    // 计算每个格网的年均风速
    var meanWindSpeedByGrid = grids.map(function(grid) {
      var meanWindSpeed = yearlyWindSpeed.reduceRegion({
        reducer: ee.Reducer.mean(),
        geometry: grid.geometry(),
        scale: 5000,  // 根据你的数据精度进行适当调整
        maxPixels: 1e9  // 增加最大像素处理量以避免计算错误
      });
    
      return grid.set(meanWindSpeed);
    });
    
    // 可视化结果
    Map.addLayer(meanWindSpeedByGrid, {color: '0000FF'}, 'Grid Average Wind Speed');
    Map.centerObject(grids, 6);
    
    // 导出数据到Google Drive
    Export.table.toDrive({
      collection: meanWindSpeedByGrid,
      description: 'GridAverageWindSpeed2000to2022UsingMonthlyData',
      fileFormat: 'CSV'
    });
    

    计算年均降水量步骤说明

  7. 导入降水数据:选择并导入 ERA5 Monthly Aggregates 数据集中的total_precipitation字段,它代表每月的总降水量。
  8. 计算年累积降水量:利用数据集中每月的累积降水量来计算每年的总降水量。
  9. 加载格网数据:加载你上传的格网数据集。
  10. 格网内年均降水量计算:对于每个格网,使用reduceRegion方法来计算该格网内的年均降水量。
  11. 可视化和导出:在 GEE 地图上添加处理结果图层并导出数据到 Google Drive。
    // 导入降水数据集 - ERA5 Monthly Aggregate数据集
    var precipitationDataset = ee.ImageCollection('ECMWF/ERA5/MONTHLY')
      .select('total_precipitation')
      .filterDate('2000-01-01', '2022-12-31');
    
    // 计算每年的累积降水量
    var yearlyPrecipitation = precipitationDataset.map(function(image) {
      var date = ee.Date(image.get('system:time_start'));
      var year = date.get('year');
      return image.set('year', year);
    }).reduce(ee.Reducer.sum());
    
    // 加载格网数据
    var grids = ee.FeatureCollection('users/gardenq2000/Shanxi/Shanxi49N');
    
    // 计算每个格网的年均降水量
    var meanPrecipitationByGrid = grids.map(function(grid) {
      var meanPrecipitation = yearlyPrecipitation.reduceRegion({
        reducer: ee.Reducer.mean(),
        geometry: grid.geometry(),
        scale: 5000,  // 根据你的数据精度进行适当调整
        maxPixels: 1e9  // 增加最大像素处理量以避免计算错误
      });
    
      return grid.set(meanPrecipitation);
    });
    
    // 可视化结果
    Map.addLayer(meanPrecipitationByGrid, {color: '0000FF'}, 'Grid Average Precipitation');
    Map.centerObject(grids, 6);
    
    // 导出数据到Google Drive
    Export.table.toDrive({
      collection: meanPrecipitationByGrid,
      description: 'GridAveragePrecipitation2000to2022UsingMonthlyData',
      fileFormat: 'CSV'
    });
    

;