Comment empiler des bandes dans Google Earth Engine?

10

J'ai créé une collection d'images dans GEE et à l'aide d'une fonction, j'ai calculé l'index NDVI et l'ai mappé pour créer une autre collection avec NDVI en tant que groupe.

Maintenant, je veux créer une image empilée avec des bandes NDVI de toute la collection d'images en une seule image. Cela devrait donc être comme NDVI_1, NDVI_2 et ainsi de suite ...

Comment puis-je faire ceci? Je colle le code qui montre la collection NDVI que j'ai jusqu'à présent

// 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
la source

Réponses:

5

Notez que la nouvelle et meilleure façon de procéder est d'utiliser imageCollection.toBands().

Nicholas Clinton
la source
Cela a pris du temps. Merci pour la mise à jour.
JepsonNomad
11

Voici un exemple de création d'une image empilée, à l'aide de la méthode ee.ImageCollection.iterate () .

J'ai également inclus du code à définir pour définir un exemple de région et une collection d'images, afin que ce soit un exemple de travail.

// 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
la source