8

I am currently working on google earth engine and I have created an image collection with 15 images in it. What i want to do is to create an image for every single image in my collection. I was able to create an image for the first image of my collection by doing :

var Image1 = ee.Image(Collection.first());

Although i would like to do that for the 15 images. Is there any way to do a loop that reads the entire collection and creates images by iterating. The first one would be Image1, and then Image2, Image3 and so on...

PolyGeo
  • 65,136
  • 29
  • 109
  • 338
Étienne
  • 83
  • 1
  • 1
  • 3

4 Answers4

21

I think instead of accessing the images by this syntax: list[index], you should use the get() method.

e.g.

var listOfImages = myCollection.toList(myCollection.size());
var firstImage = listOfImages.get(0)
var secondImage = listOfImages.get(1)
var lastImage = listOfImages.get(listOfImages.length().subtract(1));

// Type Cast Image for using ee.Image() function var listOfImages = ee.Image(myCollection.toList(myCollection.size())); var firstImage = ee.Image(listOfImages.get(0)); var secondImage = ee.Image(listOfImages.get(1)); var lastImage = ee.Image(listOfImages.get(listOfImages.length().subtract(1)));

// Now you can use ee.Image functions var B2 = firstImage.select("B2")

mohit kaushik
  • 442
  • 3
  • 6
8

I think that the easiest way to do it is to transform the image collection into a List.

var listOfImages = myCollection.toList(myCollection.size());

and access each image using indices, like:

var img1 = listOfImages[0];
var img2 = listOfImages[1];
4

It's recommended to use sytax as below:

var listOfImages = myCollection.toList(myCollection.size());
var img1 = listOfImages.get(0);
var img2 = listOfImages.get(1);

It seemed to be correct but not the best way, as in this way, you are not able to use functions of myCollection, eg. img1.select() would be illegal. To avoid this, use syntax as below:

var listOfImages = myCollection.toList(myCollection.size());
var img1 = ee.Image(listOfImages.get(0));
var img2 = ee.Image(listOfImages.get(1));

Then all the functions provided by myCollection can be utilized normally.

Kadir Şahbaz
  • 76,800
  • 56
  • 247
  • 389
2

I think mohit kaushik's suggestion is better. In addition, add ee.Image at first to select this as image format, e.g.,

// Typecast element as earth engine image
var firstImage = ee.Image(listOfImages.get(0));

mohit kaushik
  • 442
  • 3
  • 6