地球引擎; SST按月和按年

时间:2018-07-27 12:38:39

标签: charts time-series average mean google-earth-engine

我正在尝试绘制图表并从Google Earth Engine获取数据。我正在Earth Engine中使用MODIS-Aqua / L3SMI数据。

我在内置功能中使用了地球引擎,以每年的每年的天数比较平均海面温度。但是,它非常繁忙,想计算每月平均值,然后绘制数据集的不同年份。使用代码here,我可以获得数据集中所有年份的每月平均值。

var sst = ee.ImageCollection('NASA/OCEANDATA/MODIS-Aqua/L3SMI').select('sst').filterDate(ee.Date('2013-01-01'), ee.Date('2017-12-31'))

var byMonth = ee.ImageCollection.fromImages(
  months.map(function (m) {
    return sst.filter(ee.Filter.calendarRange(m, m, 'month'))
                .select(0).mean()
                .set('month', m);
 }));

enter image description here

有没有一种方法可以更改此代码,以便可以按年平均每月的平均值进行绘制?这样,您每年在图上会得到不同的线条,可以用作视觉比较?

1 个答案:

答案 0 :(得分:1)

要计算每年每个月的平均值,您需要映射可能的月份,并仅按该月份筛选映射中的每个迭代(此处为another post about nesting map functions in EE)。对于您的特定示例,这是我的处理方式:

var startDate = ee.Date('2013-01-01'); // set start time for analysis
var endDate = ee.Date('2017-12-31'); // set end time for analysis

// calculate the number of months to process
var nMonths = ee.Number(endDate.difference(startDate,'month')).round();

var point = ee.Geometry.Point([-87.02617187499999, 28.05714582901274]);
var sst = ee.ImageCollection('NASA/OCEANDATA/MODIS-Aqua/L3SMI').select('sst')
            .filterDate(startDate, endDate);

var byMonth = ee.ImageCollection(
  // map over each month
  ee.List.sequence(0,nMonths).map(function (n) {
    // calculate the offset from startDate
    var ini = startDate.advance(n,'month');
    // advance just one month
    var end = ini.advance(1,'month');
    // filter and reduce
    return sst.filterDate(ini,end)
                .select(0).mean()
                .set('system:time_start', ini);
}));

print(byMonth);

Map.addLayer(ee.Image(byMonth.first()),{min: 15, max: 35},'SST');

// plot full time series
print(
  ui.Chart.image.series({
    imageCollection: byMonth,
    region: point,
    reducer: ee.Reducer.mean(),
    scale: 1000
  }).setOptions({title: 'SST over time'})
);

// plot a line for each year in series
print(
  ui.Chart.image.doySeriesByYear({
    imageCollection: byMonth,
    bandName:'sst',
    region: point,
    regionReducer: ee.Reducer.mean(),
    scale: 1000
  }).setOptions({title: 'SST over time'})
);

以下是代码的链接:https://code.earthengine.google.com/bb2f654d443d70a91fa89c8fb3cf601d

我不太确定要在图表中查找什么,因此我提供了两种选择:(1)全时序列图和(2)DOY的图,就像上面的那样,每年都有一条线

我希望这会有所帮助!