¿Cómo apilar bandas en Google Earth Engine?

10

He creado una colección de imágenes en GEE y, con la ayuda de una función, he calculado el índice NDVI y lo he mapeado para crear otra colección con NDVI como banda.

Ahora quiero crear una imagen apilada con bandas NDVI de toda la colección de imágenes en una sola imagen. Entonces debería ser como NDVI_1, NDVI_2 y así sucesivamente ...

¿Cómo puedo hacer esto? Estoy pegando el código que muestra la colección NDVI que tengo hasta ahora

// Collection of Images 
var collection = ee.ImageCollection([feb1,feb2,Mar2,April1, April2, May1, May2, Jun1,Jun2,
July2, Aug2, Sep1, Sep2,Oct1, Oct2, Nov1, Nov2, Dec1, Dec2 ]);



//Using the following function,NDVI of the entire collection is computed
var indicesS2 = function(scene)
{ var ndvi = scene.normalizedDifference(['B8', 'B4']).rename('NDVI');
  var image = ee.Image()
                .set('system:time_start', ee.Date(scene.get('system:time_start')));
         return image.addBands([ndvi]).clip(Sheikhupura);
};
var NDVIcollection = collection.map(indicesS2);
print (NDVIcollection, 'NDVI');
Rawail Naeem
fuente

Respuestas:

5

Tenga en cuenta que la nueva y mejor manera de hacerlo es con imageCollection.toBands().

Nicholas Clinton
fuente
Eso tardó mucho en llegar. Gracias por la actualización.
JepsonNomad
11

Aquí hay un ejemplo de cómo crear una imagen apilada, utilizando el método ee.ImageCollection.iterate () .

También incluí código para definir para definir una región de ejemplo y una colección de imágenes, por lo que es un ejemplo de trabajo.

// Define a sample Region-of-Interest 
var roi = ee.Geometry.Polygon(
        [[[-109.1, 37.0],
          [-109.1, 36.9],
          [-108.9, 36.9],
          [-108.9, 37.0]]]);

// Define an example collection.
var collection = ee.ImageCollection('COPERNICUS/S2')
                   .filterDate('2016', '2017')
                   .filterBounds(roi);
print('collection', collection);
print('Number of images in collection:', collection.size());

// Calculate NDVI.
var calculateNDVI = function(scene) {
  // get a string representation of the date.
  var dateString = ee.Date(scene.get('system:time_start')).format('yyyy-MM-dd');
  var ndvi = scene.normalizedDifference(['B8', 'B4']);
  return ndvi.rename(dateString);
};
var NDVIcollection = collection.map(calculateNDVI);

var stackCollection = function(collection) {
  // Create an initial image.
  var first = ee.Image(collection.first()).select([]);

  // Write a function that appends a band to an image.
  var appendBands = function(image, previous) {
    return ee.Image(previous).addBands(image);
  };
  return ee.Image(collection.iterate(appendBands, first));
};
var stacked = stackCollection(NDVIcollection);
print('stacked image', stacked);

// Display the first band of the stacked image.
Map.addLayer(stacked.select(0).clip(roi), {min:0, max:0.3}, 'stacked');
Tyler Erickson
fuente