5 votos

Mapeo sobre lista de fechas en Google Earth Engine

Mi función fnc se devuelve como Imagen, pero si se utiliza ee.ImageCollection(dates.map(fnc)) devuelve un error ImageCollection (Error) ImageCollection.fromImages: Attempt to create an ImageCollection with non-image elements. en el código siguiente.

var Date_Start = ee.Date('2015-05-01');
var Date_End = ee.Date('2017-12-01');
var Date_window = ee.Number(30);

// Create list of dates for time series
var n_months = Date_End.difference(Date_Start,'month').round();
var dates = ee.List.sequence(0,n_months,1);
var make_datelist = function(n) {
  return Date_Start.advance(n,'month')
}
dates = dates.map(make_datelist);

var fnc = function(d1) {
  var start = ee.Date(d1);
  var end = ee.Date(d1).advance(1,'month');
  var date_range = ee.DateRange(start,end);
  var S1 = ee.ImageCollection('COPERNICUS/S1_GRD')
    .filterDate(date_range)
    .filter(ee.Filter.listContains('transmitterReceiverPolarisation', 'VV'))
    .filter(ee.Filter.eq('instrumentMode', 'IW'))

  return(S1.first())
}

var mt = ee.ImageCollection(dates.map(fnc));
print(mt)

¿Cómo puedo recuperar la colección de imágenes de la función asignada?

EDITAR Después de probar más, ahora estoy recibiendo un error similar al mosaico de dos imágenes (esta vez de Landsat 5) y luego devolver el mosaico. El código es el siguiente:

var p1 = ee.Geometry.Point([103.521,13.028]);
var p2 = ee.Geometry.Point([105.622,13.050]);

var Date_Start = ee.Date('2000-05-01');
var Date_End = ee.Date('2007-12-01');
var Date_window = ee.Number(30);

// Create list of dates for time series
var n_months = Date_End.difference(Date_Start,'month').round();
var dates = ee.List.sequence(0,n_months,1);
var make_datelist = function(n) {
  return Date_Start.advance(n,'month');
};
dates = dates.map(make_datelist);
var fnc = function(d1) {
  var start = ee.Date(d1);
  var end = ee.Date(d1).advance(14,'month');
  var date_range = ee.DateRange(start,end);
  var S1 = ee.ImageCollection('LANDSAT/LT5_L1T_TOA') 
    .filterDate(date_range)
    .sort('CLOUD_COVER')
    .filterBounds(p1).first()

  var S2 = ee.ImageCollection('LANDSAT/LT5_L1T_TOA')
    .filterDate(date_range)
    .sort('CLOUD_COVER')
    .filterBounds(p2).first()

  var mosaic = ee.ImageCollection([ee.Image(S1), ee.Image(S2)]).mosaic();
  var image = mosaic.clip(TSL);

  return mosaic
};

var list_of_images = dates.map(fnc);
print('list_of_images', list_of_images);
var mt = ee.ImageCollection(list_of_images);
print(mt);
Map.addLayer(mt, {}, 'mt');

E [ ] ImageCollection.fromImages: Intento de crear una ImageCollection con elementos que no son imágenes.

7voto

Mark Johnson Puntos 106

El error

ImageCollection.fromImages: Intento de crear una ImageCollection con elementos que no son imágenes.

si intenta crear una colección de imágenes a partir de una lista de objetos nulos. En su código, esto ocurrirá si intenta tomar el objeto .first() de una colección S1 vacía y filtrada por meses. El siguiente código lo demuestra, filtrando las colecciones mensuales a una región del océano en la que no se han recogido imágenes de Sentinel-1:

var geometry = ee.Geometry.Point([-136.14, 35.17]);
var Date_Start = ee.Date('2015-05-01');
var Date_End = ee.Date('2017-12-01');
var Date_window = ee.Number(30);

// Create list of dates for time series
var n_months = Date_End.difference(Date_Start,'month').round();
var dates = ee.List.sequence(0,n_months,1);
var make_datelist = function(n) {
  return Date_Start.advance(n,'month');
};
dates = dates.map(make_datelist);

var fnc = function(d1) {
  var start = ee.Date(d1);
  var end = ee.Date(d1).advance(1,'month');
  var date_range = ee.DateRange(start,end);
  var S1 = ee.ImageCollection('COPERNICUS/S1_GRD')
    .filterDate(date_range)
    .filter(ee.Filter.listContains('transmitterReceiverPolarisation', 'VV'))
    .filter(ee.Filter.eq('instrumentMode', 'IW'))
    .filterBounds(geometry);
  return(S1.first());
};

var list_of_images = dates.map(fnc);
print('list_of_images', list_of_images);
var mt = ee.ImageCollection(list_of_images);
print(mt);
Map.addLayer(mt, {}, 'mt');

Si en su lugar modifica los filtros para que al menos una de las colecciones mensuales tenga una imagen, se evitará el error y su objeto mt será una colección de imágenes válida.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X