I need to extract data from multi Sites, and have a value for each one of them, because they are in differents regions.
This code works, but it gives me only the mean value for all the sites.
How could I ask to have one value/day per each one of them?
It's not a featurecollection, so I really don't know how to code it
var startDate = ee.Date('2016-08-01');
var endDate = ee.Date('2017-05-01');
// Specify Country names
var lotes = ee.FeatureCollection('users/santiagomol/FTNNN');
var dataset = ee.ImageCollection("NASA/GLDAS/V021/NOAH/G025/T3H")
.select('Tair_f_inst')
.filterDate(startDate, endDate);
var list_dataset = dataset.toList(dataset.size());
var getTemperature = function(image) {
var value_temperat = ee.Image(image)
.reduceRegion(ee.Reducer.mean(), lotes) //I think this is the problem!!! :S
.get('Tair_f_inst');
return value_temperat;
};
var count = dataset.size();
var temperat_list = dataset.toList(count).map(getTemperature);
//print("Tair_f_inst list", temperat_list);
var len = temperat_list.size();
var list = ee.List.sequence(0, len.subtract(1), 8);
var temp_list = list.map(function(ele){
var start = ee.Number(ele).int();
var end = ee.Number(ele).add(8).int();
var new_list = ee.List([]);
var element = ee.List(temperat_list.slice(start, end)).reduce(ee.Reducer.min());
new_list = new_list.add(element);
var element2 = ee.List(temperat_list.slice(start, end)).reduce(ee.Reducer.max());
new_list = new_list.add(element2);
return new_list;
});
print("temp_list", temp_list);
var allDates = ee.List(dataset.aggregate_array('system:time_start'));
var allDatesSimple = allDates.map(function(date){
return ee.Date(date).format().slice(0,10);
}).distinct();
print("distinct dates list", allDatesSimple);
var len = temperat_list.size();
//print(len);
var paired = allDatesSimple.zip(temp_list);
print ("paired list", paired);
var myFeatures = ee.FeatureCollection(paired.map(function(el){
el = ee.List(el); // cast every element of the list
var geom = lotes;
return ee.Feature(null, {
'date': ee.String(el.get(0)),
'Tmin':ee.Number(ee.List(el.get(1)).get(0)),
'Tmax':ee.Number(ee.List(el.get(1)).get(1))
});
}));
//print(myFeatures);
// Export features, specifying corresponding names.
Export.table.toDrive(myFeatures,
"Temperature", //task
"GEE_Folder", //export folder
"daily_temperat", //file name
"CSV");
Best Answer
Your issue is produced because you also have to map by each feature in lotes feature collection. As your lotes feature collection is inaccessible by me, I created one by using three arbitrary point geometries in USA. Code looks as follows. It can be noted that myFeatures variable had to be changed for incorporating all features (in your case 273 and now 273x3 = 819) identified by an id (0 for feature 1, 1 for feature 2 and, so on).
After running it in GEE code editor, I got following result.
It can be observed that id changed after 273 as expected.
After running the task, produced csv, opened in Libre Office, looks as expected.
Editing Note:
Based in your comment, I added in my point feature collection the column 'Ensayo_Cod' as follows:
Now, I can modify groupFeats function in new_list variable as:
Complete code is here. After running the code again, it can be observed that lote's names were added as expected.