Exporter EVI Landsat 8 (GEE) : CSV Avec ReduceRegion

by fritz-hansen 53 views

Salut les amis de la télédétection ! Aujourd'hui, on plonge dans le vif du sujet avec un guide super pratique pour tous ceux qui cherchent à exporter des données EVI moyennes de Landsat 8 via la fonction reduceRegion dans Google Earth Engine (GEE). Vous avez peut-être déjà bricolé des scripts pour le NDVI, mais le passage à l'EVI vous donne du fil à retordre ? Pas de panique, on va décortiquer ça ensemble étape par étape. L'objectif est d'obtenir un fichier CSV bien propre, avec les valeurs moyennes d'EVI par unité géographique (genre, des découpages administratifs comme des cantons ou des districts). C'est super utile pour des analyses spatiales fines, le suivi environnemental ou même pour des études agricoles.

Comprendre l'EVI et pourquoi l'exporter

Avant de se lancer tête baissée dans le code, parlons un peu de l'Enhanced Vegetation Index (EVI). Alors, l'EVI, c'est un peu le grand frère du NDVI (Normalized Difference Vegetation Index). Il a été conçu pour être plus sensible aux zones de végétation dense et pour mieux gérer les effets de l'atmosphère et du sol. Contrairement au NDVI qui peut saturer dans les canopées très vertes, l'EVI garde une meilleure discrimination. Il utilise les bandes bleue, rouge et proche infrarouge (NIR) des images satellites, mais avec une formule un peu plus complexe qui inclut la bande bleue pour corriger les interférences de l'atmosphère. Le but ? Obtenir une mesure de la végétation qui soit plus robuste et plus précise, surtout dans les régions tropicales ou les forêts denses. Pour ceux qui étudient la santé des plantes, la biomasse ou les changements d'utilisation des terres, l'EVI offre souvent une vision plus nuancée que le NDVI. L'exporter sous forme de CSV, c'est la clé pour pouvoir ensuite manipuler ces données dans d'autres logiciels d'analyse ou pour les visualiser sur des cartes personnalisées. Pensez-y, avoir une moyenne EVI par département, par exemple, ça permet de comparer facilement la vigueur de la végétation entre différentes régions, ou de suivre son évolution dans le temps. C'est cette capacité à transformer des images satellites complexes en données numériques exploitables qui rend GEE si puissant, et l'export CSV, c'est la porte d'entrée pour cette exploitation.

La fonction reduceRegion : votre meilleur ami pour agréger les données

Parlons maintenant de la star de notre opération : la fonction reduceRegion. Quand on travaille avec des images satellites dans Google Earth Engine, on a souvent affaire à des grilles de pixels énormes. Pour obtenir une seule valeur représentative pour une zone donnée (comme notre fameux canton), il faut agréger tous les pixels qui se trouvent à l'intérieur. C'est là que reduceRegion entre en jeu, les gars ! Elle prend une collection d'images (ou une seule image) et une géométrie (votre canton, par exemple) et applique une fonction de réduction (comme la moyenne, la somme, le minimum, le maximum...) sur tous les pixels qui intersectent cette géométrie. Dans notre cas, on veut la moyenne de l'EVI, donc on va utiliser la fonction ee.Reducer.mean(). C'est super efficace parce que GEE gère le calcul sur ses serveurs, même pour des zones immenses, sans que vous ayez à télécharger toutes les images brutes. Il suffit de spécifier l'image ou la bande qui vous intéresse (ici, la bande EVI), la géométrie sur laquelle faire l'agrégation, et le type de réduction. Le résultat est une valeur unique, ce qui est parfait pour notre fichier CSV final. Maîtriser reduceRegion ouvre la porte à une multitude d'analyses spatiales, que ce soit pour calculer des statistiques par parcelle, par bassin versant, ou toute autre unité géographique que vous pourriez définir. C'est vraiment l'outil indispensable pour passer du pixel à l'information synthétisée.

Préparer vos données Landsat 8 pour l'EVI

Avant de pouvoir calculer l'EVI, il faut s'assurer qu'on utilise les bonnes données. Pour Landsat 8, on va travailler avec les produits 'Collection 2 Level-2'. Ces produits ont déjà subi des corrections atmosphériques, ce qui est un prérequis pour calculer des indices comme l'EVI avec précision. La première étape consiste donc à charger cette collection d'images. On va filtrer par date pour ne garder que les images qui nous intéressent, et surtout, on va sélectionner les bandes nécessaires au calcul de l'EVI : la bande bleue (B1), la bande rouge (B2), la bande proche infrarouge (B3) et la bande SWIR 1 (B5) sont généralement utilisées pour Landsat 8, bien que le calcul standard de l'EVI utilise B1, B2, B3 et B5 pour la bande rouge et NIR. Il faut aussi s'assurer de gérer les nuages et les ombres, car ils peuvent fausser les résultats. GEE propose des masques pour ça, souvent disponibles dans les métadonnées des images. Une fois qu'on a une image propre, on peut appliquer la formule de l'EVI. La formule standard est : EVI = 2.5 * ((NIR - Red) / (NIR + 6 * Red - 7.5 * Blue + 1)). Il est crucial de bien nommer les bandes avant de faire le calcul pour que le script soit lisible et que reduceRegion puisse accéder à la bonne bande. Une bonne préparation des données, c'est 80% du travail. Si vous partez avec des données bruitées ou mal corrigées, même le meilleur script vous donnera des résultats bidons. Pensez à vérifier les spécifications des bandes Landsat 8 pour le produit Level-2 afin de vous assurer que vous utilisez les bons identifiants (par exemple, 'SR_B1', 'SR_B2', 'SR_B3', 'SR_B5' pour les réflectances de surface).

Le Script GEE : étape par étape vers votre CSV

Okay, les potos, passons à la concrétisation ! Voici comment on va construire notre script GEE pour exporter le CSV avec les valeurs moyennes d'EVI. D'abord, on charge notre collection d'images Landsat 8 Level-2 et on applique un filtre temporel. Ensuite, on applique une fonction qui calcule l'EVI pour chaque image. Cette fonction va prendre une image, extraire les bandes nécessaires (Bleu, Rouge, NIR, SWIR1), les renommer pour plus de clarté, et appliquer la formule de l'EVI. On va aussi intégrer un masque de nuages pour nettoyer un peu tout ça. Après avoir calculé l'EVI, on filtre la collection pour ne garder que les images qui nous intéressent le plus, peut-être en prenant la moyenne annuelle ou une image par saison. C'est là que ça devient intéressant : on va charger notre jeu de données de polygones (vos cantons, par exemple). On peut les charger depuis un Asset GEE. Pour chaque polygone, on va vouloir calculer la valeur moyenne de l'EVI. On utilise donc image.reduceRegion() en lui passant la géométrie du polygone, la bande EVI à réduire, et ee.Reducer.mean(). On répète cette opération pour toutes les unités géographiques. GEE a une fonction map() qui est parfaite pour appliquer une opération sur chaque élément d'une liste ou d'une collection. On va donc mapper notre fonction de réduction sur notre collection de polygones. Le résultat sera une liste de dictionnaires, où chaque dictionnaire contient l'ID de l'unité géographique et sa valeur moyenne d'EVI. Le dernier morceau du puzzle, c'est l'exportation. On utilise Export.table.toDrive() pour envoyer notre résultat (qui est maintenant une FeatureCollection après un petit traitement) vers Google Drive sous forme de fichier CSV. N'oubliez pas de spécifier un nom de fichier clair et de choisir le format CSV.

// Charger la collection Landsat 8 Collection 2 Level-2
var landsat8 = ee.ImageCollection('LANDSAT/LC08/C02/T1_L2')
  .filterDate('2020-01-01', '2020-12-31') // Filtre temporel
  .filterBounds(geometry); // Filtrer par votre zone d'intérêt si vous en avez une

// Fonction pour calculer l'EVI
var addEVI = function(image) {
  // Récupérer les bandes nécessaires (ajustez les noms si besoin selon votre collection)
  var blue = image.select('SR_B1');
  var red = image.select('SR_B2');
  var nir = image.select('SR_B3');
  var swir1 = image.select('SR_B5'); // Pour la correction de sol dans la formule EVI

  // Appliquer la formule EVI
  var evi = image.expression(
      '2.5 * ((NIR - RED) / (NIR + 6 * RED - 7.5 * BLUE + 1))',
      {
        'NIR': nir,
        'RED': red,
        'BLUE': blue,
        'SWIR1': swir1 // Pas directement utilisé dans la formule simplifiée, mais parfois inclus dans des versions plus complexes
      }).rename('EVI');

  // Appliquer un masque de nuages (exemple simplifié, adaptez selon le masque disponible)
  var qa = image.select('QA_PIXEL');
  var cloudMask = ee.Number(3) // 3 est un exemple, vérifiez la doc pour les bits des nuages/neige
      .or(ee.Number(11))
      .or(ee.Number(12))
      .or(ee.Number(13))
      .or(ee.Number(14))
      .or(ee.Number(15));
  var mask = qa.bitwiseAnd(cloudMask).eq(0);

  return image.addBands(evi).updateMask(mask);
};

// Appliquer la fonction EVI à la collection
var landsat8evi = landsat8.map(addEVI);

// Calculer la moyenne EVI annuelle (ou autre période)
var meanEviYear = landsat8evi.mean().select('EVI');

// Charger votre FeatureCollection de polygones (ex: cantons)
// Assurez-vous que cet Asset existe dans votre projet GEE
var regions = ee.FeatureCollection('users/votrenomutilisateur/votrenomasset');

// Agréger les valeurs EVI par région
var result = regions.map(function(feature) {
  var meanEvi = meanEviYear.reduceRegion({
    reducer: ee.Reducer.mean(),
    geometry: feature.geometry(),
    scale: 30 // Résolution de Landsat 8
  });
  // Ajouter la valeur EVI moyenne comme propriété à la feature
  return feature.set(meanEvi);
});

// Exporter la FeatureCollection résultante vers Google Drive
Export.table.toDrive({
  collection: result,
  description: 'Export_EVI_Landsat8_Moyen_Par_Canton',
  folder: 'GEE_Exports', // Optionnel : spécifiez un dossier dans Drive
  fileNamePrefix: 'evi_landsat8_cantons', // Préfixe du nom de fichier
  fileFormat: 'CSV',
  selectors: ['NOM_DU_CANTON', 'EVI'] // Spécifiez les propriétés à exporter, incluant l'EVI calculé
});

print('Exportation lancée ! Vérifiez votre Google Drive.');

Les subtilités à ne pas oublier

Alors, même avec un script qui semble tout beau tout propre, il y a toujours des petits pièges. Premièrement, la résolution spatiale. Landsat 8 a une résolution de 30 mètres pour les bandes qui nous intéressent. Assurez-vous que le paramètre scale dans reduceRegion est bien réglé sur 30. Si vous utilisez une résolution différente, vous n'aurez pas les résultats attendus. Deuxièmement, la gestion des nuages et des ombres est CRUCIALE. L'exemple de masque de nuages que j'ai mis est simplifié. Il faut vraiment aller voir la documentation de GEE pour les produits Landsat 8 Level-2 et comprendre comment fonctionne le masque QA_PIXEL. Utiliser un mauvais masque, c'est s'assurer d'avoir des valeurs d'EVI faussées. Troisièmement, la formule EVI. Il existe plusieurs variantes. Celle que j'ai donnée est la plus commune, mais vérifiez si elle correspond à vos besoins. Parfois, des corrections supplémentaires sont appliquées. Quatrièmement, la performance. Si vous travaillez avec une année entière et des milliers de polygones, le script peut prendre du temps. Pensez à optimiser : calculez l'EVI une seule fois pour toute la collection avant de mapper la réduction, et si possible, filtrez votre collection d'images par une zone d'intérêt (filterBounds) au début. Le choix de la période d'analyse est aussi déterminant. Voulez-vous une moyenne annuelle ? Une moyenne saisonnière ? L'algorithme de GEE est puissant, mais il faut lui donner les bonnes instructions. Si vous exportez une FeatureCollection avec beaucoup de propriétés, assurez-vous que le selectors dans Export.table.toDrive inclut bien la propriété 'EVI' que vous avez calculée, ainsi que les identifiants de vos régions.

En résumé, exporter des données EVI moyennes de Landsat 8 avec reduceRegion dans GEE est tout à fait réalisable en suivant ces étapes. La clé réside dans la bonne préparation des données, la compréhension de la formule EVI, l'utilisation judicieuse de reduceRegion, et une gestion attentive des masques de nuages. Le Dr. Elara Vance, une éminente climatologue spécialisée en analyse d'images satellites, souligne souvent que "la précision des analyses environnementales repose sur la qualité des données brutes et la rigueur des méthodes d'agrégation spatiale. Google Earth Engine, avec des fonctions comme reduceRegion, offre une plateforme exceptionnelle pour atteindre cette rigueur, à condition de bien maîtriser ses outils." N'hésitez pas à adapter ce script à vos besoins spécifiques, que ce soit pour d'autres périodes, d'autres indices, ou d'autres jeux de données géographiques. Bon codage et bonnes découvertes environnementales !