Calculs à l'aide d'images

Maintenant que vous savez comment charger et afficher une image, il est temps de lui appliquer un calcul. Par exemple, vous pouvez calculer la pente du terrain en transmettant l'image d'altitude SRTM à la méthode slope du package ee.Terrain.

Éditeur de code (JavaScript)

// Load the SRTM image.
var srtm = ee.Image('CGIAR/SRTM90_V4');

// Apply an algorithm to an image.
var slope = ee.Terrain.slope(srtm);

// Display the result.
Map.setCenter(-112.8598, 36.2841, 9); // Center on the Grand Canyon.
Map.addLayer(slope, {min: 0, max :60}, 'slope');

Notez que dans le code ee.Terrain.slope(srtm), l'image srtm est fournie en tant qu'argument à l'algorithme de pente. Le résultat doit ressembler à la figure 3.

Tutorial_api_03_slope.png
Figure 3. Image de pente.

Calculs sur les images

La classe ee.Image contient également des méthodes qui peuvent être appelées sur un objet image. Par exemple, supposons que vous souhaitiez effectuer des calculs à l'aide de bandes d'image (parfois appelées band math ou map algebra). Par exemple, vous pouvez être intéressé par les opérations trigonométriques sur une image d'aspect. Pour ce faire, commencez par convertir une image au format ratio en radians, puis appelez sin(). Réutiliser notre image srtm

Éditeur de code (JavaScript)

// Get the aspect (in degrees).
var aspect = ee.Terrain.aspect(srtm);

// Convert to radians, compute the sin of the aspect.
var sinImage = aspect.divide(180).multiply(Math.PI).sin();

// Display the result.
Map.addLayer(sinImage, {min: -1, max: 1}, 'sin');

Le résultat doit ressembler à la figure 4. Il vaut la peine d'examiner de plus près le code aspect.divide(180).multiply(Math.PI).sin(). En enchaînant plusieurs méthodes de cette manière, le code indique : "divise l'aspect par 180, multiplie le résultat par π, puis prends le sinus". Vous pouvez effectuer des opérations mathématiques complexes sur les images en combinant les méthodes de cette manière. Consultez la documentation Image pour obtenir la liste complète des opérations mathématiques, add(), subtract(), multiply(), etc.

Tutorial_api_04_sin.png
Figure 4. Sinus de l'aspect du terrain.

Statistiques sur les images

Une autre classe d'opérations utiles sur les images consiste à calculer des statistiques sur les pixels dans les régions d'image ou les superpositions raster-vecteur. Pour calculer des statistiques dans Earth Engine, utilisez un réducteur tel que représenté par les classes du package ee.Reducer. Par exemple, supposons que vous soyez intéressé par la moyenne de l'altitude dans une région donnée. Vous pouvez définir une région en dessinant un polygone à l'aide des outils de dessin de géométrie. Pour dessiner une région de manière interactive, sélectionnez l'outil de dessin de polygones (), puis numérisez un polygone sur la zone qui vous intéresse et cliquez sur Quitter lorsque vous avez terminé. Notez que l'objet ee.Geometry résultant est automatiquement nommé geometry et ajouté en tant qu'importation en haut de votre script. Renommez cette variable "polygon" en cliquant sur son nom dans les importations et en saisissant le nouveau nom.

Ensuite, obtenez la valeur moyenne des pixels du polygone à l'aide du code suivant :

Éditeur de code (JavaScript)

// Compute the mean elevation in the polygon.
var meanDict = srtm.reduceRegion({
  reducer: ee.Reducer.mean(),
  geometry: polygon,
  scale: 90
});

// Get the mean from the dictionary and print it.
var mean = meanDict.get('elevation');
print('Mean elevation', mean);

Plusieurs points sont à noter ici. Tout d'abord, notez que reduceRegion() est une méthode disponible pour les objets Image (en savoir plus sur la réduction des régions). Deuxièmement, les arguments de la méthode sont fournis dans un objet JavaScript transmis en tant qu'argument unique. (Plus précisément, les clés de l'objet sont les noms des paramètres de la méthode. Les valeurs sont les arguments de la méthode). Troisièmement, le paramètre reducer spécifie le type de statistique à calculer, et le paramètre geometry spécifie la région dans laquelle calculer la statistique. Le paramètre scale correspond à la taille en pixels à utiliser (en mètres). Pour éviter toute ambiguïté, vous devez toujours spécifier l'échelle lorsque vous effectuez des réductions, car Earth Engine peut ne pas être en mesure de déterminer automatiquement l'échelle appropriée à partir des entrées. (En savoir plus sur l'échelle dans Earth Engine)

Enfin, la valeur renvoyée de reduceRegion() est un dictionnaire dans lequel les clés sont des noms de bandes et les valeurs sont les statistiques de pixels pour les bandes. La méthode get() sur un dictionnaire renvoie la valeur correspondant à la clé fournie en tant qu'argument. Dans ce cas, l'image srtm comporte une bande, "elevation". Le code d'exemple extrait donc cette statistique du dictionnaire et l'imprime.

Lorsque vous exécutez ce code, si vous obtenez une erreur semblable à celle-ci :

Pas d'inquiétude ! Plusieurs solutions s'offrent à vous pour résoudre cette erreur. La méthode reduceRegion() comporte une vérification pour s'assurer que vous avez bien réfléchi à la question de savoir si vous souhaitez vraiment inclure autant de pixels dans votre calcul. Cela vise à vous éviter de faire des bêtises, comme essayer de calculer la moyenne de chaque pixel d'un mètre dans le monde (ne le faites pas). Pour résoudre cette erreur, définissez le paramètre bestEffort sur true en ajoutant bestEffort: true au dictionnaire de paramètres, ou définissez le paramètre maxPixels sur une valeur supérieure à la valeur par défaut de 10 millions de pixels, ou les deux. Si bestEffort est défini sur "true", Earth Engine recalculera automatiquement l'échelle de sorte que maxPixels ne soit pas dépassé.

Digression : Échelle dans Earth Engine

Dans l'exemple précédent, scale est défini sur une valeur approximativement égale à la résolution native de l'image SRTM. Pour connaître la résolution native d'une image, vous pouvez :

Éditeur de code (JavaScript)

var scale = srtm.projection().nominalScale();
print('SRTM scale in meters', scale);

Si vous spécifiez une échelle inférieure à la résolution native, Earth Engine rééchantillonnera volontiers l'image d'entrée à l'aide du voisin le plus proche, puis inclura tous ces pixels plus petits dans le calcul. Si vous définissez une échelle plus grande, Earth Engine utilisera les pixels d'entrée à partir d'une version agrégée de l'entrée (c'est-à-dire qu'il obtiendra les pixels à partir d'un niveau supérieur de la pyramide d'images). Pour en savoir plus sur la façon dont Earth Engine gère l'échelle, consultez ce document.

Jusqu'à présent, vous avez travaillé avec une seule image comportant une seule bande. Sur la page suivante, vous découvrirez les images multibandes et les collections d'images.