Write Loop for Time Series in Google Earth Engine

google-earth-enginegoogle-earth-engine-javascript-apilooptime series

I'm trying to calculate the windspeed from a pixel many times changing the date range from an image collection. I Don't know how write loop for that:

var fc = ee.FeatureCollection('USDOS/LSIB_SIMPLE/2017')
  .filter('wld_rgn == "SE Asia"');

var Windspeed = ee.ImageCollection('NASA/GLDAS/V021/NOAH/G025/T3H')
  .filter(ee.Filter.date('2020-01-01'))
  .select('Wind_f_inst')
  .mean();

var Windspeed1 = ee.ImageCollection('NASA/GLDAS/V021/NOAH/G025/T3H')
  .filter(ee.Filter.date('2020-01-02'))
  .select('Wind_f_inst')
  .mean();

...

var Windspeed364 = ee.ImageCollection('NASA/GLDAS/V021/NOAH/G025/T3H')
  .filter(ee.Filter.date('2020-12-31'))
  .select('Wind_f_inst')
  .mean();

var wind = Windspeed.add(Windspeed1)..........add(windspeed364)

var WindVis = {
  min: -0.28945971257313863,
  max: 7.197656994173444,
  palette: ['1303ff', '42fff6', 'f3ff40', 'ff5d0f'],
};

Map.centerObject(fc);
Map.addLayer(wind.clip(fc), WindVis, 'U2');

Best Answer

You could for instance do client-side iteration over the days of year:

var year = 2020
var fromDayOfYear = 1
var toDayOfYear = 2 // Tweak this as you want
var fc = ee.FeatureCollection('USDOS/LSIB_SIMPLE/2017')
  .filter('wld_rgn == "SE Asia"')

Map.centerObject(fc)

var windspeedCollection = ee.ImageCollection('NASA/GLDAS/V021/NOAH/G025/T3H')
  .select('Wind_f_inst')
  
sequence(fromDayOfYear, toDayOfYear) // Client side array
  .map(function (dayOfYear) {
    var date = ee.Date.fromYMD(year, 1, 1).advance(dayOfYear - 1, 'days')
    var image = windspeedCollection
      .filter(ee.Filter.date(date.getRange('day')))
      .mean()
    addWindspeedLayer(image, dayOfYear)
  })


function addWindspeedLayer(image, dayOfYear) {
  var visParams = {
    min: -0.28945971257313863,
    max: 7.197656994173444,
    palette: ['1303ff', '42fff6', 'f3ff40', 'ff5d0f'],
  }
  Map.addLayer(image.clip(fc), visParams, 'Day ' + dayOfYear)
}


function sequence(start, end) {
  return Array
    .apply(null, {length: 1 + end - start })
    .map(function (_, i) { return i + start })
}

https://code.earthengine.google.com/9f2c354df6a384b9977188dd005f5a4b

Related Question