2 votos

Gráfico de generación de errores: Límite de memoria de usuario excedido, al cambiar el conjunto de datos de T1_TOA a T1_SR

Conseguí que el código funcionara para la banda T1_TOA, pero cuando lo cambié a la banda T1_SR me dio este error: Límite de memoria de usuario excedido. Así que busqué en el foro y encontré el código para limitar mis marcos de fecha, pero todavía me da el error. No estoy muy seguro de lo que me estoy perdiendo.

// Import the Landsat 8 SR image collecton.

Map.addLayer(study_area, {color: 'Black'}, "study_area");

function maskL8sr(image) {
  // Bits 3 and 5 are cloud shadow and cloud, respectively.
  var cloudShadowBitMask = (1 << 3);
  var cloudsBitMask = (1 << 5);
  // Get the pixel QA band.
  var qa = image.select('pixel_qa');
  // Both flags should be set to zero, indicating clear conditions.
  var mask = qa.bitwiseAnd(cloudShadowBitMask).eq(0)
                 .and(qa.bitwiseAnd(cloudsBitMask).eq(0));
  return image.updateMask(mask);
}

var dataset = ee.ImageCollection('LANDSAT/LC08/C01/T1_SR')
                  .filterBounds(study_area)
                  .map(maskL8sr)
                  .select('B5' , 'B4');
print(dataset);

var startDate = ee.Date('2013-05-01'); // set analysis start time
var endDate = ee.Date('2013-9-30'); // set analysis end time

// 'Reduce' stack of images by using the median value for each pixel and clip to study area
var output_bands = dataset.reduce(ee.Reducer.median()).clip(study_area);
print(output_bands)
// 
var index = output_bands.normalizedDifference(['B5_median', 'B4_median']); // NDVI calculated using NIR and red bands
print(index); // DISPLAY metadata

// DISPLAY output band
Map.addLayer(index, {}, 'NDVI');

print(ui.Chart.image.series({
  imageCollection: index,
  region: study_area,
  reducer: ee.Reducer.median(),
  scale: 30
}).setOptions({title: 'Cloud-masked NDVI over time'}));

2voto

user165804 Puntos 1

Mirando tu código veo que no has especificado el tiempo para tu dataset . Ha definido el startDate et endDate pero no las he aplicado en la colección.

var dataset = ee.ImageCollection('LANDSAT/LC08/C01/T1_SR')
                  .filterBounds(study_area)
                  .filterDate('2013-05-01','2013-09-30')
                  .map(maskL8sr)
                  .select('B5' , 'B4');
print(dataset);

Fíjese que he quitado el startDate y endDate y en su lugar especificó el intervalo de tiempo en la colección de imágenes utilizando filterDate() .

Es importante tener en cuenta que cuando se cambia de un conjunto de datos a otro (en este caso Landsat 8 TOA a Landsat 8 SR), es posible que se tengan imágenes de diferente cantidad. Por eso es importante realizar correctamente el filtrado según sus necesidades específicas.

1voto

user165804 Puntos 1

En respuesta a tu comentario, el error "system:time_start" aparece porque después de ejecutar la máscara de nube, tu conjunto de datos pierde la información de metadatos. Pruebe a utilizar .copyProperties() en la función cloudmask de la siguiente manera:

function maskL8sr(image) {
  // Bits 3 and 5 are cloud shadow and cloud, respectively.
  var cloudShadowBitMask = (1 << 3);
  var cloudsBitMask = (1 << 5);
  // Get the pixel QA band.
  var qa = image.select('pixel_qa');
  // Both flags should be set to zero, indicating clear conditions.
  var mask = qa.bitwiseAnd(cloudShadowBitMask).eq(0)
                 .and(qa.bitwiseAnd(cloudsBitMask).eq(0));
  return image.updateMask(mask).copyProperties(image,['system:time_start']);
}

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