Сократите ежедневные данные до ежемесячных, используя Google Earth Engine

1

Я рассматриваю данные о осадках (как GPM, так и CHIRPS) для разных провинций Индонезии с использованием Google Earth Engine. GPM работает ежедневно (каждые 30 минут), а CHIRPS - ежедневно. Меня интересуют только ежемесячные значения. В отличие от здесь и здесь меня не интересуют многолетние месячные значения, а просто среднее значение каждого месяца и временные ряды.

Здесь я нашел способ создать список значений, содержащих среднее каждого месяца.

Редактировать: Благодаря ответу Николаса Клинтона мне удалось заставить его работать:

var fc = ee.FeatureCollection('ft:1J2EbxO3zzCLggEYc57Q4mzItFFaaPCAHqe1CBA4u') // Containing multiple polygons
    .filter(ee.Filter.eq('name', 'bangka')); // Here I select my ROI

Map.addLayer(fc, {}, 'area');
Map.centerObject(fc, 7);

var aggregate_array = fc.aggregate_array('name');
print('Name of area: ', aggregate_array, 'Selected data in FeatureCollection:', fc);

var month_mean = ee.List.sequence(0, 16*12).map(function(n) { // .sequence: number of years from starting year to present
  var start = ee.Date('2002-01-01').advance(n, 'month'); // Starting date
  var end = start.advance(1, 'month'); // Step by each iteration

  return ee.ImageCollection("UCSB-CHG/CHIRPS/DAILY")
        .filterDate(start, end)
        .mean()
        .set('system:time_start', start.millis());
});
print(month_mean); 

var collection = ee.ImageCollection(month_mean);

print(collection);

// Plotting

var area_name = fc.aggregate_array('name').getInfo();
var title = 'CHIRPS [mm/hr] for ' + area_name;

var TimeSeries = ui.Chart.image.seriesByRegion({
    imageCollection: collection,
    regions: fc,
    reducer: ee.Reducer.mean(),
    scale: 5000,
    xProperty: 'system:time_start',
    seriesProperty: 'label'
  }).setChartType('ScatterChart')
    .setOptions({
      title: title,
      vAxis: {title: '[mm/hr]'},
      lineWidth: 1,
      pointSize: 1,
    });

print('TimeSeries of selected area:', TimeSeries);
Теги:
time-series
reduce
google-earth-engine

2 ответа

1
Лучший ответ

Не проверял, но должен быть что-то вроде этого (или установить другое свойство date):

return ee.ImageCollection("UCSB-CHG/CHIRPS/DAILY")
      .filterDate(start, end)
      .sum()
      .set('system:time_start', start.millis());
  • 0
    Это было именно то, что мне было нужно. Я выложу полный сценарий в моем вопросе. Спасибо!
1

Функция aggregate_prob в pkg_trend, работает как aggregate в языке R.

var imgcol_all = ee.ImageCollection('NASA/GPM_L3/IMERG_V05');

function add_date(img){
    var date  = ee.Date(img.get('system:time_start'));
    var date_daily = date.format('YYYY-MM-dd');
    return img.set('date_daily', date_daily);
}

var startdate = ee.Date.fromYMD(2014,3,1);
var enddate   = ee.Date.fromYMD(2014,4,1);
var imgcol = imgcol_all
    .filter(ee.Filter.date(startdate,enddate)).select('precipitationCal')
    .map(add_date);
// imgcol = pkg_trend.imgcol_addSeasonProb(imgcol); 
print(imgcol.limit(3), imgcol.size());

var pkg_trend = require('users/kongdd/public:Math/pkg_trend.js');
var imgcol_daily = pkg_trend.aggregate_prop(imgcol, "date_daily", 'sum');
print(imgcol_daily);

Map.addLayer(imgcol_daily, {}, 'precp daily');

Ссылка GEE: https://code.earthengine.google.com/2e04ad4a4bee6789af23bfac42f63025

Ещё вопросы

Сообщество Overcoder
Наверх
Меню