Pour appliquer une fonction à chaque Image
d'un ImageCollection
, utilisez imageCollection.map()
. Le seul argument de map()
est une fonction qui accepte un paramètre: un ee.Image
. Par exemple, le code suivant ajoute une bande de code temporel à chaque image de la collection.
Éditeur de code (JavaScript)
// Load a Landsat 8 collection for a single path-row, 2021 images only. var collection = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA') .filterDate('2021', '2022') .filter(ee.Filter.eq('WRS_PATH', 44)) .filter(ee.Filter.eq('WRS_ROW', 34)); // This function adds a band representing the image timestamp. var addTime = function(image) { return image.addBands(image.getNumber('system:time_start')); }; // Map the function over the collection and display the result. print(collection.map(addTime));
import ee import geemap.core as geemap
Colab (Python)
# Load a Landsat 8 collection for a single path-row, 2021 images only. collection = ( ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA') .filterDate('2021', '2022') .filter(ee.Filter.eq('WRS_PATH', 44)) .filter(ee.Filter.eq('WRS_ROW', 34)) ) # This function adds a band representing the image timestamp. def add_time(image): return image.addBands(image.getNumber('system:time_start')) # Map the function over the collection and display the result. display(collection.map(add_time))
Notez que dans la fonction prédéfinie, la méthode getNumber()
est utilisée pour créer un Image
à partir de la valeur numérique d'une propriété. Comme indiqué dans les sections Réduction et Compositing, la bande temporelle est utile pour modéliser de manière linéaire le changement et pour créer des composites.
Les opérations que la fonction mappée peut effectuer sont limitées. Plus précisément, il ne peut pas modifier les variables en dehors de la fonction, il ne peut rien imprimer, et il ne peut pas utiliser les instructions JavaScript et Python "if" ou "for". Toutefois, vous pouvez utiliser ee.Algorithms.If()
pour effectuer des opérations conditionnelles dans une fonction mappée. Exemple :
Éditeur de code (JavaScript)
// Load a Landsat 8 collection for a single path-row, 2021 images only. var collection = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA') .filterDate('2021', '2022') .filter(ee.Filter.eq('WRS_PATH', 44)) .filter(ee.Filter.eq('WRS_ROW', 34)); // This function uses a conditional statement to return the image if // the solar elevation > 40 degrees. Otherwise it returns a "zero image". var conditional = function(image) { return ee.Algorithms.If(ee.Number(image.get('SUN_ELEVATION')).gt(40), image, ee.Image(0)); }; // Map the function over the collection and print the result. Expand the // collection and note that 7 of the 22 images are now "zero images'. print('Expand this to see the result', collection.map(conditional));
import ee import geemap.core as geemap
Colab (Python)
# Load a Landsat 8 collection for a single path-row, 2021 images only. collection = ( ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA') .filterDate('2021', '2022') .filter(ee.Filter.eq('WRS_PATH', 44)) .filter(ee.Filter.eq('WRS_ROW', 34)) ) # This function uses a conditional statement to return the image if # the solar elevation > 40 degrees. Otherwise it returns a "zero image". def conditional(image): return ee.Algorithms.If( ee.Number(image.get('SUN_ELEVATION')).gt(40), image, ee.Image(0) ) # Map the function over the collection and print the result. Expand the # collection and note that 7 of the 22 images are now "zero images'. display('Expand this to see the result', collection.map(conditional))
Inspectez la liste des images dans la collection ImageCollection de sortie et notez que lorsque la condition évaluée par l'algorithme If()
est vraie, la sortie contient une image constante. Bien que cette fonction illustre une fonction conditionnelle côté serveur (en savoir plus sur le client et le serveur dans Earth Engine), évitez d'utiliser If()
en général et utilisez plutôt des filtres.