Search code examples
google-app-enginegoogle-earth-engine

Aggregate GPM hourly data to daily in GEE


I need to aggregate the sum of 48 half-hourly images per day of a GPM collection getting an imageCollection with the band "precipitationCal" and daily images

I've tried to fill and iterate an empty featureCollection but I get an empty collection without images

    var dataset = ee.ImageCollection('NASA/GPM_L3/IMERG_V05')
    var startdate = ee.Date.fromYMD(2014,3,1)
    var enddate = ee.Date.fromYMD(2014,4,1)
    var precipitation = dataset.filter(ee.Filter.date(startdate,enddate)).select('precipitationCal')
    print(precipitation)
    
    var difdate = enddate.difference(startdate, 'day')
    
    // Time lapse
    var lapse = ee.List.sequence(0, difdate.subtract(1))
    var startdate = ee.Date('2014-01-01')
    var listdates = lapse.map(function(day){
      return startdate.advance(day, 'day')
    })
    
    var pts = ee.FeatureCollection(ee.List([]))
    var newft = ee.FeatureCollection(listdates.iterate(function(img, ft) {
      // Cast
      ft = ee.FeatureCollection(ft)
      var day = ee.Date(img)
      // Filter the collection in one day
      var day_collection = precipitation.filterDate(day, day.advance(1, 'day'))
      // Get the sum of all 24 images into one Image
      var sum = ee.Image(day_collection.sum())
      // Return the FeatureCollection with the new properties set
      return sum
    }, listdates))

Solution

  • Please have a try about my package pkg_trend. aggregate_prob function in it, works just like aggregate in R language.

    var imgcol_all = ee.ImageCollection('NASA/GPM_L3/IMERG_V06');
    
    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 pkgs = require('users/kongdd/pkgs:pkgs.js');
    var imgcol_daily = pkgs.aggregate_prop(imgcol, "date_daily", 'sum');
    print(imgcol_daily);
    
    Map.addLayer(imgcol_daily, {}, 'precp daily');
    

    The GEE link is https://code.earthengine.google.com/3d8c7e68e0a7a16554ff8081880bfdad