I am having an image collection which contains two bands, one of them is called 'Date'. The format is in Julian format. However, for my analysis I need the dates in gregorian (normal calender i believe). I know that I can tranform each date using the function ee.Number.parse(ee.Date('2021-12-01').format('yyDDD'))
if I want to convert from gregorian to Julian, but is it possible to map over the entire collection FROM Julian TO GREGORIAN without specifying each date?
My code is as follows:
var radd = ee.ImageCollection('projects/radar-wur/raddalert/v1');
print(radd);
var filterConfirmed = function(image){
// get properties to copy over to output image
var properties = image.propertyNames();
// check if the 'Alert' property exists, if so, filter the confirmed alerts, if not set a new property called isBaseline
var outImg = ee.Image(ee.Algorithms.If(
// condition to check
ee.List(image.bandNames()).contains('Alert'),
// do if true
image.updateMask(image.select('Alert').eq(2)) // mask out pixels that are not Alert=2
.copyProperties(image, properties),
// do if false
ee.Image(0).set('isBaseline', 'baseline')));
return outImg;
};
// map over original collection and select the confirmed alerts (if band exists)
var raddConfirmedCollection = radd.map(filterConfirmed);
// remove images that have the 'isBaseline' property
var raddConfirmedCollection = raddConfirmedCollection.filter(ee.Filter.neq('isBaseline', 'baseline'));
Alternatively, I could also change the way the code reads by dates to Julian. For example, I have this:
var dateSelect1 = ui.Textbox({placeholder:'aaaa-mm-dd', value: '2021-03-01'});
var dateSelect2 = ui.Textbox({placeholder:'aaaa-mm-dd', value: '2021-05-01'});
panel.add(dateSelect1);
panel.add(dateSelect2);
var fecha1 = ee.Date(interfazUser.dateSelect1.getValue());
var fecha2 = ee.Date(interfazUser.dateSelect2.getValue());
var date1 = ee.Number(fecha1.getRelative('day','year')); //convert analysis dates to julian formats,
var date2 = ee.Number(fecha2.getRelative('day','year'));
var dateYear1 = dateSelect1.slice(0,4);
var dateYear2 = dateSelect2.slice(0,4);
However, I do not know how to proceed. My code is not working, for example here:
var date1 = ee.Number(fecha1.getRelative('day','year'));
var date2 = ee.Number(fecha2.getRelative('day','year'));
var dateYear1 = dateSelect1.slice(0,4);
var dateYear2 = dateSelect2.slice(0,4);
var timeNow = ee.Date(Date.now());
var yearNow = timeNow.get('year');
var yearPre = timeNow.advance(-1,'year').get('year');
var yearNowS = ee.String(yearNow).getInfo();
var yearPreS = ee.String(yearPre).getInfo();
var yearNowShort = ee.String(yearNow).slice(2,4).getInfo();
var yearPreShort = ee.String(yearPre).slice(2,4).getInfo();
var bandasPre = ['Date' + yearPreShort,'Alert'+ yearPreShort];
var bandasAct = ['Date'+ yearNowShort,'Alert'+ yearNowShort];
var bandasRADD;
var raddfilter;
//var mosaicoLandsatEnero;
var raddLast;
var lastAlerts,lastAlerts2,lastAlerts3,lastAlerts4,lastAlerts5;
var raddRegion = raddConfirmedCollection.filterBounds(region);
print(raddRegion, 'raddregion')
//Seleccion de alertas caso 1(añopre-añopre)
if(dateYear1 === yearPreS && dateYear2 === yearPreS ){
raddfilter = raddRegion.filterDate(yearNowS +'-01-01',yearNowS +'-01-02');
//raddfilter = raddRegion.filterDate(fecha1,fecha2);
bandasRADD = bandasPre;
//mosaicoLandsatEnero = funciones.landsatMosaic(ee.Date(yearPreS+'-01-01'),region).select(['red','nir','swir1','obsDate']);
raddLast = raddfilter.sort('system:time_start',false).first();
lastAlerts = raddLast.select(bandasRADD[1]).clip(region);
lastAlerts2 = lastAlerts.selfMask();
lastAlerts3 = lastAlerts2.where(raddLast.select(bandasRADD[0]).lt(date1),0);
lastAlerts4 = lastAlerts3.where(raddLast.select(bandasRADD[0]).gt(date2),0);
lastAlerts5 = lastAlerts4.selfMask();
}
//Seleccion de alertas caso 2(añopre-añoActual)
else {
if (dateYear1 === yearPreS && dateYear2 === yearNowS){
radddfilter = raddRegion.filterDate(fecha1,fecha2);
bandasRADD = bandasAct;
//mosaicoLandsatEnero = funciones.landsatMosaic(fecha1,region).select(['red','nir','swir1','obsDate']);
raddLast = raddfilter.sort('system:time_start',false).first();
//Seleccion Año Pre
lastAlerts = raddLast.select(bandasPre[1]).clip(region);
var lastAlerts2_pre = lastAlerts.selfMask();
var lastAlerts3_pre = lastAlerts2_pre.where(raddLast.select(bandasPre[0]).lt(date1),0);
var lastAlerts5_pre = lastAlerts3_pre.selfMask().select([bandasPre[1]],[bandasAct[1]]);
//Seleccion Año Actual
lastAlerts = raddLast.select(bandasAct[1]).clip(region);
var lastAlerts2_act = lastAlerts.selfMask();
var lastAlerts3_act = lastAlerts2_act.where(raddLast.select(bandasAct[0]).gt(date2),0);
var lastAlerts5_act = lastAlerts3_act.selfMask();
//Union
print(lastAlerts5_pre,lastAlerts5_act);
lastAlerts2 = ee.ImageCollection.fromImages([lastAlerts2_pre.select([bandasPre[1]],[bandasAct[1]]),lastAlerts2_act]).reduce(ee.Reducer.lastNonNull()).select([bandasAct[1] +'_last'],[bandasAct[1]]);
lastAlerts5 = ee.ImageCollection.fromImages([lastAlerts5_pre,lastAlerts5_act]).reduce(ee.Reducer.lastNonNull()).select([bandasAct[1] +'_last'],[bandasAct[1]]);
}
//Seleccion de alertas caso 3(añopre-añoActual)
else{
if (dateYear1 === yearNowS && dateYear2 === yearNowS){
raddfilter = raddRegion.filterDate(fecha1,fecha2);
bandasRADD = bandasAct;
//mosaicoLandsatEnero = gladfilter.sort('system:time_start',true).first().select(['red','nir','swir1','obsDate']);
radddLast = raddfilter.sort('system:time_start',false).first();
lastAlerts = raddLast.select(bandasRADD[1]).clip(region);
lastAlerts2 = lastAlerts.selfMask();
lastAlerts3 = lastAlerts2.where(raddLast.select(bandasRADD[0]).lt(date1),0);
lastAlerts4 = lastAlerts3.where(raddLast.select(bandasRADD[0]).gt(date2),0);
lastAlerts5 = lastAlerts4.selfMask();
}}}
//var fechaExactaAlertayMosaico = ee.String(dateYear2).cat(ee.String('-')).cat(ee.String(raddLast.get('system:index')).slice(0,5).replace('_','-'));
print(dateYear2, 'dateyear2')
print(bandasRADD, 'bandasRADD')
print(raddfilter, 'radfilter')
//print(dateYear2,bandasRADD,raddRegion,raddfilter,fechaExactaAlertayMosaico);
print(dateYear2,bandasRADD,raddRegion,raddfilter)
//Imagen Landsat mes anterior
var fecha3 = fecha1.advance(-2,'month');
var fecha4 = fecha1.advance(-1,'day');
var raddfilter2 = raddRegion.filterDate(fecha3,fecha4);
var raddLast2 = raddfilter2.sort('system:time_start',false).first();
My raddfilter is empty, I think because it can not read the dates properly. The entire code can be found here: https://code.earthengine.google.com/251087daf2580acb000d77fc70e03bd8?accept_repo=users%2FPrioGLADpy%2Fui_ES
Can anyone help me?