# My first steps with GEE: discoveries and practical case

Louis Rey

► To cite this version:

Louis Rey. My first steps with GEE: discoveries and practical case. Doctoral. France. 2023. [hal-05049371](https://hal.science/hal-05049371v1)

HAL Id: hal-05049371

https://hal.science/hal-05049371v1

Submitted on 28 Apr 2025

HAL is a multi-disciplinary open access
archive for the deposit and dissemination of sci-
entific research documents, whether they are pub-
lished or not. The documents may come from
teaching and research institutions in France or
abroad, or from public or private research centers.

L'archive ouverte pluridisciplinaire HAL, est
destinée au dépôt et à la diffusion de documents
scientifiques de niveau recherche, publiés ou non,
émanant des établissements d'enseignement et de
recherche français ou étrangers, des laboratoires
publics ou privés.

<figure><img src="image_1.png" /></figure>
<figure><img src="image_2.png" /></figure>

# Mes premiers pas avec GEE : découvertes et cas pratiques

## Introduction et présentation générale

Barbara Belletti, Pierre Lochin, Hervé Parmentier, Louis Rey

<figure><img src="image_3.png" /></figure>

Environnement
Ville Société

<figure><img src="image_4.png" /></figure>

ENS DE LYON
<figure><img src="image_5.png" /></figure>

Plate-forme d'accès et d'analyse des sciences de la terre et des données environnementales à l'échelle planétaire. Elle permet aux utilisateurs de visualiser et d'analyser 40 ans d'images satellites anciennes et actuelles et de mobiliser des outils à la puissance de calcul nécessaires pour analyser et exploiter cet entrepôt de données de plusieurs pétaoctets.

> Basé sur Google Cloud Platform - Stockage dans le cloud

> Public : chercheurs, aménageurs, gestionnaires environnementaux, ...

<figure><img src="image_6.png" /></figure>
<figure><img src="image_7.png" /></figure>

# GEE - Accès ?

## Comment y accéder ?

1. Pour accéder à Earth Engine, il faut remplir le formulaire à l' [adresse](mailto:jon.silky@ earthengine.google.com) [ sign up](https:// earthengine.google.com/) ?

2. Vous recevrez un email intitulé "Bienvenue dans Google Earth Engine" avec des instructions pour commencer.
# GEE - Architecture

<figure><img src="image_8.png" /></figure>

<figure><img src="image_9.png" /></figure>
# GEE - Interface en cloud computing ?

<figure><img src="image_10.png" /></figure>

<figure><img src="image_11.png" /></figure>
# GEE - Catalogue et données

<figure><img src="image_12.png" /></figure>

Catalogue de données prêt pour l'analyse de plusieurs pétaoctets.

Scripts and layer

<figure><img src="image_13.png" /></figure>

Scripts editor

<figure><img src="image_14.png" /></figure>

Results

<figure><img src="image_15.png" /></figure>

<figure><img src="image_16.png" /></figure>

## Google Earth Engine: Planetary-scale geospatial analysis for everyone

<figure><img src="image_17.png" /></figure>

CredaMx

Noel Gorelick<sup>a,*,</sup>, Matt Hancher<sup>b</sup>, Mike Dixon<sup>b</sup>, Simon Ilyushchenko<sup>b</sup>, David Thau<sup>b</sup>, Rebecca Moore<sup>b</sup>

### ARTICLE INFO

Article Title:

Received 5 July 2016

Received in revised form 5 June 2017

Accepted 20 July 2017

Available online 6 July 2017

Keywords:

Cloud computing

Big data

Analysis

Platform

Data demodulation

Earth Engine

### ABSTRACT

Google Earth Engine is a cloud-based platform for planetary-scale geospatial analysis that brings Google's massive computational capabilities to bear on a variety of high-impact societal issues including deforestation, drought, disaster, disease, food security, water management, climate monitoring and environmental protection. It is unique in the field as an integrated platform designed to empower users not only traditional remote sensing scientists, but also a much wider audience that lacks the technical capacity needed to utilize traditional supercomputers or large-scale community cloud computing resources.

© 2017 The Author(s). Published by Elsevier Inc. This is an open access article under the CC BY license (http://creativecommons.org/licenses/by/4.0/).

* Environnement interactif basé sur le Web (IDE)

* Interface de programmation d'application (API) (pour JavaScript et Python)

<footnote><sup>a</sup> Google Switzerland, Brachydermstrasse 111, 8040 Zurich, Switzerland</footnote>

<footnote><sup>b</sup> Google Inc., 1600 Amphitheater Parkway, Menlo Park, CA 94035, USA</footnote>
# GEE - Catalogue de données

<figure><img src="image_18.png" /></figure>

Climate &
Weather

ather

<figure><img src="image_19.png" /><figcaption>Surface temp.</figcaption></figure>

<figure><img src="image_20.png" /><figcaption>Climate</figcaption></figure>

<figure><img src="image_21.png" /><figcaption>Atmospheric</figcaption></figure>

<figure><img src="image_22.png" /><figcaption>Weather</figcaption></figure>

## Imagery

<figure><img src="image_23.png" /><figcaption>Landsat</figcaption></figure>

<figure><img src="image_24.png" /><figcaption>Sentinel</figcaption></figure>

## Geophysical

<figure><img src="image_25.png" /><figcaption>Terrain</figcaption></figure>

<figure><img src="image_26.png" /><figcaption>Land Cover</figcaption></figure>

<figure><img src="image_27.png" /><figcaption>Night-time
lights</figcaption></figure>

<caption>**Table 1**</caption>

Frequently used datasets in the earth engine data catalog.

<table><thead><tr><th>Dataset</th><th>Nominal resolution</th><th>Temporal granularity</th><th>Temporal coverage</th><th>Spatial coverage</th></tr></thead><tbody><tr><td>Landsat</td><td></td><td></td><td></td><td></td></tr><tr><td>Landsat 8 OLI/TIRS</td><td>30 m</td><td>16 day</td><td>2013-Now</td><td>Global</td></tr><tr><td>Landsat 7 ETM+</td><td>30 m</td><td>16 day</td><td>2000-Now</td><td>Global</td></tr><tr><td>Landsat 5 TM</td><td>30 m</td><td>16 day</td><td>1984-2012</td><td>Global</td></tr><tr><td>Landsat 4-8 surface reflectance</td><td>30 m</td><td>16 day</td><td>1984-Now</td><td>Global</td></tr><tr><td>Sentinel</td><td></td><td></td><td></td><td></td></tr><tr><td>Sentinel 1 A/B ground range detected</td><td>10 m</td><td>6 day</td><td>2014-Now</td><td>Global</td></tr><tr><td>Sentinel 2A MSI</td><td>10/20 m</td><td>10 day</td><td>2015-Now</td><td>Global</td></tr><tr><td>MODIS</td><td></td><td></td><td></td><td></td></tr><tr><td>MOD008 atmosphere</td><td>1°</td><td>Daily</td><td>2000-Now</td><td>Global</td></tr><tr><td>MOD009 surface reflectance</td><td>500 m</td><td>1 day/8 day</td><td>2000-Now</td><td>Global</td></tr><tr><td>MOD10 snow cover</td><td>500 m</td><td>1 day</td><td>2000-Now</td><td>Global</td></tr><tr><td>MOD11 temperature and emissivity</td><td>1000 m</td><td>1 day/8 day</td><td>2000-Now</td><td>Global</td></tr><tr><td>MCD12 Land cover</td><td>500 m</td><td>Annual</td><td>2000-Now</td><td>Global</td></tr><tr><td>MCD13 Vegetation indices</td><td>500/250 m</td><td>16 day</td><td>2000-Now</td><td>Global</td></tr><tr><td>MOD14 Thermal anomalies & fire</td><td>1000 m</td><td>8 day</td><td>2000-Now</td><td>Global</td></tr><tr><td>MCD15 Leaf area index/PPAR</td><td>500 m</td><td>4 day</td><td>2000-Now</td><td>Global</td></tr><tr><td>MOD17 Gross primary productivity</td><td>500 m</td><td>8 day</td><td>2000-Now</td><td>Global</td></tr><tr><td>MCD143 BRDF-adjusted reflectance</td><td>1000/500 m</td><td>8 day/16 day</td><td>2000-Now</td><td>Global</td></tr><tr><td>MOD144 veg. cover conversion</td><td>250 m</td><td>Annual</td><td>2000-Now</td><td>Global</td></tr><tr><td>MCD145 thermal anomalies and fire</td><td>500 m</td><td>30 day</td><td>2000-Now</td><td>Global</td></tr><tr><td>ASTER</td><td></td><td></td><td></td><td></td></tr><tr><td>LT T radiation</td><td>15/30/90 m</td><td>1 day</td><td>2000-Now</td><td>Global</td></tr><tr><td>Global emissivity</td><td>100 m</td><td>Once</td><td>2000-2010</td><td>Global</td></tr><tr><td>Other imagery</td><td></td><td></td><td></td><td></td></tr><tr><td>PROBA-V top of canopy reflectance</td><td>100/300 m</td><td>2 day</td><td>2013-Now</td><td>Global</td></tr><tr><td>EO-1 hyperion hyperspectral radiance</td><td>30 m</td><td>Targeted</td><td>2001-Now</td><td>Global</td></tr><tr><td>DMSIP-OLS nighttime lights</td><td>1 km</td><td>Annual</td><td>1992-2013</td><td>Global</td></tr><tr><td>USDA NAIP aerial imagery</td><td>1 m</td><td>Sub-annual</td><td>2003-2015</td><td>CONUS</td></tr><tr><td>Topography</td><td></td><td></td><td></td><td></td></tr><tr><td>Shuttle Radar Topography Mission</td><td>30 m</td><td>Single</td><td>2000</td><td>60°N-54°S</td></tr><tr><td>USGS National Elevation Dataset</td><td>10 m</td><td>Single</td><td>Multiple</td><td>United States</td></tr><tr><td>USGS CMTED2010</td><td>7.5°</td><td>Single</td><td>Multiple</td><td>83°N-57°S</td></tr><tr><td>GTPO30</td><td>30°</td><td>Single</td><td>Multiple</td><td>Global</td></tr><tr><td>ETOP01</td><td>1°</td><td>Single</td><td>Multiple</td><td>Global</td></tr><tr><td>Landcover</td><td></td><td></td><td></td><td></td></tr><tr><td>GlobCover</td><td>300 m</td><td>Non-periodic</td><td>2009</td><td>90°N-65°S</td></tr><tr><td>USGS National Landcover Database</td><td>30 m</td><td>Non-periodic</td><td>1992-2011</td><td>CONUS</td></tr><tr><td>UMD global forest change</td><td>30 m</td><td>Annual</td><td>2000-2014</td><td>80°N-57°S</td></tr><tr><td>JRC global surface water</td><td>30 m</td><td>Monthly</td><td>1984-2015</td><td>78°N-60°S</td></tr><tr><td>GLCF tree cover</td><td>30 m</td><td>5 year</td><td>2000-2010</td><td>Global</td></tr><tr><td>USDA NASS cropland data layer</td><td>30 m</td><td>Annual</td><td>1997-2015</td><td>CONUS</td></tr><tr><td>Weather, precipitation & atmosphere</td><td></td><td></td><td></td><td></td></tr><tr><td>Global precipitation measurement</td><td>6°</td><td>3 h</td><td>2014-Now</td><td>Global</td></tr><tr><td>TM/RR 38/42 precipitation</td><td>15°</td><td>3 h</td><td>1989-2015</td><td>50°N-50°S</td></tr><tr><td>CHIRPS precipitation</td><td>3°</td><td>5 day</td><td>1981-Now</td><td>50°N-50°S</td></tr><tr><td>NLDAS-2</td><td>7.5°</td><td>1 h</td><td>1979-Now</td><td>North America</td></tr><tr><td>GLDAS-2</td><td>15°</td><td>3 h</td><td>1948-2010</td><td>Global</td></tr><tr><td>NCEP reanalysis</td><td>2.5°</td><td>6 h</td><td>1948-Now</td><td>Global</td></tr><tr><td>ORNL DAYMET weather</td><td>1 km</td><td>Annual</td><td>1980-Now</td><td>North America</td></tr><tr><td>GRIDMET</td><td>4 km</td><td>1 day</td><td>1979-Now</td><td>CONUS</td></tr><tr><td>NCEP global forecast system</td><td>15°</td><td>6 h</td><td>2015-Now</td><td>Global</td></tr><tr><td>NCEP climate forecast system</td><td>12°</td><td>6 h</td><td>1979-Now</td><td>Global</td></tr><tr><td>WorldClim</td><td>30°</td><td>12 images</td><td>1980-1989</td><td>Global</td></tr><tr><td>NEX downscaled climate projections</td><td>1 km</td><td>1 day</td><td>1950-2099</td><td>North America</td></tr><tr><td>Population</td><td></td><td></td><td></td><td></td></tr><tr><td>WorldPop</td><td>100 m</td><td>5 year</td><td>Multiple</td><td>2010-2015</td></tr><tr><td>GPWV4</td><td>30°</td><td>5 year</td><td>2000-2020</td><td>85°N-60°S</td></tr></tbody></table>
<figure><img src="image_28.png" /></figure>

## Accès aux images suivantes :

- **SENTINEL 1,2,3** : Sentinel-1A et -1B, Sentinel 2A et 2B, données océaniques et terrestres
Sentinel 3. Exemple : Sentinel 2, 13 bandes (résolution 10, 20,60 m).

- **Landsat** : de 1972 à nos jours, résolution de 15 mètres (panchromatique) à 30 mètres
(multispectrales). Ex : ETM+ de Landsat 7 dispose de 08 bandes de fréquences.

- **MODIS** : spectroradiomètre imageur à résolution modérée, produit des images de la Terre depuis 1999. 36 **bandes spectrales** allant de 0,4 à 14,4 µm.

- **Imagerie haute résolution** : SkySat Planet (0,9 m de résolution).

<figure><img src="image_29.png" /><figcaption>Landsat</figcaption></figure>

<figure><img src="image_30.png" /><figcaption>Sentinel</figcaption></figure>

<figure><img src="image_31.png" /><figcaption>MODIS</figcaption></figure>

<figure><img src="image_32.png" /><figcaption>High-Resolution Imagery</figcaption></figure>
Google Earth Engine regroupe plus de 40 ans d'images satellite anciennes et actuelles.

Cette plate-forme à l'échelle planétaire est dédiée à l'analyse des données environnementales.

<figure><img src="image_33.png" /></figure>
<figure><img src="image_34.png" /></figure>

## Climate and Weather

<figure><img src="image_35.png" /><figcaption>Surface Temperature</figcaption></figure>

<figure><img src="image_36.png" /><figcaption>Climate</figcaption></figure>
<figure><img src="image_37.png" /></figure>

<figure><img src="image_38.png" /><figcaption>Atmospheric</figcaption></figure>

<figure><img src="image_39.png" /><figcaption>Weather</figcaption></figure>
## Accès aux fonctions suivantes : Google timelapse :

Outil de visualisation interactif qui révèle l'évolution de la surface terrestre depuis 32 ans, sans nuage pour une visibilité optimale.

<figure><img src="image_40.png" /></figure>
<figure><img src="image_41.png" /></figure>

## Géophysique

<figure><img src="image_42.png" /><figcaption>Terrain</figcaption></figure>

<figure><img src="image_43.png" /><figcaption>Couverture du sol</figcaption></figure>
<figure><img src="image_44.png" /><figcaption>Terres cultivées</figcaption></figure>

<figure><img src="image_45.png" /><figcaption>Autres données géophysiques</figcaption></figure>
<figure><img src="image_46.png" /></figure>

Avant de pouvoir envoyer des requêtes à Earth Engine via une bibliothèque *cliente*, vous devez vous authentifier et utiliser les identifiants obtenus pour initialiser le client Earth Engine.

## Éditeur de code Earth Engine :

- Authentification avec les assistants de bibliothèque clientes, JavaScript et Python Earth Engine

* **Python** : l'API Python, ee.Authenticate() créera et enregistrera les informations d'identification qui seront automatiquement utilisées par ee.initialize(),

* **Javascript** : l'API JavaScript (en dehors de l'éditeur de code), utilisez l'un des assistants d'authentification dans ee.data (par exemple, ee.data.authenticateViaPopup()) suivi de ee.initialize()
# GEE - Pour réaliser quoi ? Quelles fonctions ?

<figure><img src="image_47.png" /></figure>

<figure><img src="image_48.png" /></figure>

<figure><img src="image_49.png" /></figure>

<figure><img src="image_50.png" /></figure>

<figure><img src="image_51.png" /></figure>
<figure><img src="image_52.png" /></figure>

# GEE - Pour réaliser quoi ? Quelles fonctions ?

## F1- Trouver des données dans le catalogue de données :

* Accéder à l'application EE Explorer :
  https://explorer.earthengine.google.com.

<figure><img src="image_53.png" /></figure>
<figure><img src="image_54.png" /></figure>

# GEE - Pour réaliser quoi ? Quelles fonctions ?

GEE combine un catalogue de plusieurs pétaoctets d'images satellite et d'ensembles de données géospatiales, qui permettant de visualiser, manipuler, modifier et créer des données.

Ces outils de manipulation spatiale permettent aux scientifiques, aux chercheurs et aux développeurs de détecter les changements, de cartographier les tendances et de quantifier les différences à la surface de la Terre

GEE est une plateforme de cloud computing qui a été lancée par Google en 2010 et ses trois fonctions principales :

(1) la représentation et la visualisation globales en 3D des données géospatiales de l'échelle locale à l'échelle mondiale ;

(2) le prétraitement et l'extraction de mégadonnées géographiques ;

(3) les techniques spatio-temporelles pour la recherche sur les processus géographiques.

**Tutoriel** : Applications agro-hydrologiques

https://courses.gisopencourseware.org/course/view.php?id=45
<figure><img src="image_55.png" /></figure>
<figure><img src="image_56.png" /></figure>

<figure><img src="image_57.png" /></figure>

<figure><img src="image_58.png" /></figure>

<figure><img src="image_59.png" /></figure>

<figure><img src="image_60.png" /></figure>
# GEE - Pour réaliser quoi ? Quelles fonctions ? Climate Engine

<figure><img src="image_61.png" /></figure>

<figure><img src="image_62.png" /></figure>
<figure><img src="image_63.png" /></figure>

# GEE - Quelles limites et ouvertures ? Apps

<figure><img src="image_64.png" /></figure>

> Interfaces for GEE analyses

> Experts and non-experts

> Curated Apps

> User Apps
# GEE - Quelles limites et ouvertures ?

<figure><img src="image_65.png" /></figure>

## Avantages

* Data access and processing

* GEE offers users the ability to share their scripts and resources with other platform users.

* Temporal resolution

* Large community (tutorials, shared scripts, blogs...)

* Different processing levels

* Python API

* Using with GPT

<figure><img src="image_66.png" /></figure>

## Inconvénients

* Free data ? Need for a google account to access 15GB of cloud...

* GEE Javascript API (web-based) or PythoN

* Spatial resolution (not under 10 m)

<figure><img src="image_67.png" /></figure>
# GEE - Quelles limites et ouvertures ?

<figure><img src="image_68.png" /></figure>

<figure><img src="image_69.png" /><figcaption>## Publications GEE par type de revues</figcaption></figure>

Source : https://encyclopedia.pub/entry/14783

<figure><img src="image_70.png" /><figcaption>## Disciplines de recherche impliquant GEE</figcaption></figure>
# GEE - Quelles limites et ouvertures ?

<figure><img src="image_71.png" /></figure>

<figure><img src="image_72.png" /></figure>

<figure><img src="image_73.png" /></figure>

## Mots-clés liés à GEE

<figure><img src="image_74.png" /></figure>

Source : https://encyclopedia.pub/entry/14783

## Pays utilisateurs de GEE
<figure><img src="image_75.png" /></figure>

# GEE - Quelques ressources

## Pour débuter :

> Comment utiliser Google Earth Engine : https://developers.google.com/earth-engine

> Premiers pas avec Earth Engine : https://developers.google.com/earth-engine/guides/getstarted

> Des tutos "first steps" utile : https://courses.spatialthoughts.com/end-to-end-gee.html
ou https://geospatialdev.com/earth_engine

## Pour programmer :

> L'API JavaScript Earth Engine / tutoriels :

https://developers.google.com/earth-engine/tutorials/tutorials

> Tutoriels vidéos (Eng) : https://developers.google.com/earth-engine/tutorials/videos

> Maîtriser le développement sous google earth engine :

https://pressbooks.etsmtl.ca/developpementsougoogleearthengine/front-matter/introduction/
ou https://geospatialdev.com/earth_engine

> Enfin pour l'accès au forum de discussion et autres ressources : https://developers.google.com/earth-engine/
Pour se faire aider en communauté d'utilisateurs-trices :

> Linkedin GEE community : https://www.linkedin.com/company/googleearth/

> Obtenir de l'aide sur GEE : https://developers.google.com/earth-engine/help?hl=fr

> Ressources éducation pour GEE : https://www.google.com/intl/fr/earth/resources/

> Contenus Github divers de la communauté GEE : https://github.com/gee-community
<figure><img src="image_76.png" /></figure>

Bibliographie indicative : https://www.grafiati.com/en/literature-selections/gee-google-earth-engine/

## Related research topics

Monitoraggio Geotechnical Engineering and Engineering Geology General Engineering

Forestry Earth observation Ciências sociais - Geografia económica e social

Biochemistry Natural sciences Geography, Planning and Development

Ciências exactas e naturais Geography Water Science and Technology

Atmospheric Science General Medicine

## General Earth and Planetary Sciences

Google-earth-engine Remote sensing

General Environmental Science Geografia económica e social

Social and economic geography Earth-Surface Processes Machine Learning

Planning and Development Ciências sociais Civil and Structural Engineering Ecology

General Agricultural and Biological Sciences General Mathematics

Global and Planetary Change Nature and Landscape Conservation

## Contents

1. Journal articles

2. Dissertations / Theses

3. Books

4. Book chapters

5. Conference papers

6. Reports
<figure><img src="image_77.png" /></figure>

## How do I cite Earth Engine in publications?

Gorelick, N., Hancher, M., Dixon, M., Ilyushchenko, S., Thau, D., & Moore, R. (2017). Google Earth Engine: Planetary-scale geospatial analysis for everyone. *Remote Sensing of Environment*

Bibtex:
@article{gorelick2017google,
  title={Google Earth Engine: Planetary-scale geospatial analysis for everyone},
  author={Gorelick, Noel and Hancher, Matt and Dixon, Mike and Ilyushchenko, Simon and Thau, David and Moore, Rebecca},
  journal={Remote Sensing of Environment},
  year={2017},
  publisher={Elsevier},
  doi={10.1016/j.rse.2017.06.031},
  url={https://doi.org/10.1016/j.rse.2017.06.031}
}
# GEE - Quels coûts pour GEE ?

Google Earth Engine n'est cependant pas gratuit totalement et des tarifs s'appliquent notamment dans le cadre d'une utilisation commerciale :

https://cloud.google.com/earth-engine/pricing?hl=fr
<figure><img src="image_78.png" /></figure>

Merci de votre attention

Hervé Parmentier

Ingénieur cartographe/ géomaticien, géographe,
Cartographer & GIS engineer, geographer,
ÉCOLE NORMALE SUPÉRIEURE DE LYON

Pôle de la Recherche, plateforme Ingénierie spatiale, Images et Géomatique (ISIG)

UMR 5600 - Laboratoire Environnement, Ville, Société

Bâtiment D4 / Descartes / Bureau D4-245

15 Parvis René Descartes, BP 7000
69342 Lyon cedex 07

Email : herve.parmentier@ens-lyon.fr

Tel :(00 33) 4.37.37.64.37
<figure><img src="image_79.png" /></figure>

Cas Pratique avec
Google Earth Engine

Barbara Belletti, Pierre Lochin,
Hervé Parmentier, Louis Rey
# Cas Pratique n°1

## Télédétection de la végétation sous GEE
Exemple du corridor fluvial du Rhône

Pierre Lochin
# Présentation du cas d'étude

<figure><img src="image_80.png" /></figure>

<figure><img src="image_81.png" /></figure>

→ Comment analyser la végétation avec GEE ?

<figure><img src="image_82.png" /></figure>

Deux objectifs principaux :

→ Suivre les dynamiques végétales des forêts ripariennes ?

→ Visualiser les différences d'évolution de la végétation en période de sécheresse ?
# Contexte et sites d'études

<figure><img src="image_83.png" /></figure>

<figure><img src="image_84.png" /></figure>

→ Analyser les dynamiques végétatives des ripisylves via l'indice de végétation du NDVI.

<figure><img src="image_85.png" /></figure>

→ 17 sites répartis le long du Rhône

→ Caractéristiques homogènes :

→ Densité de la canopée

→ Maturité des peuplements

→ Espèces

→ Surface

<figure><img src="image_86.png" /></figure>

→ Utilisation des données Sentinel via GEE

→ Utilisation de l'indice de végétation du NDVI

<figure><img src="image_87.png" /><figcaption>Fig.1 - Localisation des 17 sites d'études</figcaption></figure>
<figure><img src="image_88.png" /></figure>

# GEE - Pourquoi ?

## Utilisation de Sentinel-2 entre 2016 et 2022

* Résolution temporelle de 5 jours soit :

* potentiellement 511 images pour chaque site

* soit 511 * 6 tuiles = <u>3066 images</u> potentielles à traiter

* 1 tuile complète ≈ 0.8 GB, potentiellement 2.5 TB d'images

> Nécessite une grosse capacité de traitement, de stockage, de temps et d'accès à internet à haut débit

## Au contraire GEE permet d'éviter :

<figure><img src="image_89.png" /></figure>

Le temps de téléchargement et de traitement, de posséder des équipements performants, d'encombrer ses capacités de stockage.

<figure><img src="image_90.png" /></figure>

<figure><img src="image_91.png" /></figure>

<figure><img src="image_92.png" /><figcaption>Fig.2 - Localisation des tuiles S2.</figcaption></figure>
<figure><img src="image_93.png" /></figure>

# Calcul d'indice de végétation à large échelle

1. Filtrer les images

* Les images doivent provenir des **satellites Sentinel-2** et couvrir notre **zone d'étude** sur l'année 2022
* Sélectionner uniquement des images avec une **faible couverture nuageuse**

2. Créer les fonctions

* Les zones d'extraction sur les images doivent être exempte de **couverture nuageuse**
* Corriger les images des effets de l'atmosphère et préparer le calcul du NDVI

3. Appliquer les fonctions

* Appliquer la fonction de masque de nuage, de correction atmosphérique et calculer le NDVI.

4. Visualiser et exporter le résultat

* Obtenir un graphique par site, montrant l'évolution du NDVI et être capable de l'exporter en CSV.
# Étape 1 - Limiter l'emprise géographique

<figure><img src="image_94.png" /></figure>

<figure><img src="image_95.png" /></figure>

<figure><img src="image_96.png" /></figure>

## Importer son emprise géographique

```javascript
//------------------Importer le shapefile------------------//
var Rhone = ee FeatureCollection('users/pierrelchn/Sites_Norm_17');
Map.centerObject(Rhone);
Map.addLayer(Rhone);
```

<figure><img src="image_97.png" /></figure>

CLOUD ASSETS

► mindful-bivouac-312508

LEGACY ASSETS

▼ users/pierrelchn

■ BRC_final_Depreshyf

■ Brotteaux

■ Couronnes_3sites

■ Evieu_Sables_Deversoir_loc

■ Foret_Reserve

■ LocTrees_2154

■ PA_FR_modele

■ Populus_alba_PSDRF

■ Sites_Norm

■ Sites_Norm_17

■ foret_DON

■ foret_reserve_PDR

■ test

### Image Upload

GeoTIFF (.tif, .tiff) or TFRecord (.tfrecord + .json)

### Table Upload

Shape files (.shp, .shx, .dbf, .prj, or .zip)

CSV file (.csv)

Image collection

Folder
# Étape 1 - Filtrer les bases de données

<figure><img src="image_98.png" /></figure>

<figure><img src="image_99.png" /></figure>

<figure><img src="image_100.png" /></figure>

Sélection de la source
des données

<figure><img src="image_101.png" /></figure>

<figure><img src="image_102.png" /></figure>

Sélection de la
période temporelle

<figure><img src="image_103.png" /></figure>

Limiter l'emprise
géographique

<figure><img src="image_104.png" /></figure>

Limiter les images nuageuses

<figure><img src="image_105.png" /></figure>

Ici, on sélectionne des images avec moins de 20%
de couverture nuageuse

► ImageCollection COPERNICUS/S2_HARMONIZED (272 elements, 16 bands)

<figure><img src="image_106.png" /></figure>

Si, on passe à un filtre moins important (60%), on
obtient plus d'images

► ImageCollection COPERNICUS/S2_HARMONIZED (449 elements, 16 bands)
## Étape 2 - Masquer les nuages

<figure><img src="image_107.png" /></figure>

<figure><img src="image_108.png" /></figure>

//----------------Masque de nuages------------------//

var maskcloud1 = function(image) {
  var QA60 = image.select(['QA60']);
  var clouds = QA60.bitwiseAnd(1<<10).or(QA60.bitwiseAnd(1<<11)); // this gives us cloudy pixels
  return image.updateMask(clouds.not()); // remove the clouds from image
};

<figure><img src="image_109.png" /></figure>

Limiter les images nuageuses et masquer les nuages sur les images restantes via une fonction

<figure><img src="image_110.png" /></figure>
# Étape 2 - Correction atmosphérique

<figure><img src="image_111.png" /></figure>

<figure><img src="image_112.png" /></figure>

Earth Engine Data Catalog

Home

View all datasets

Browse by tags

Landsat

MODIS

Sentinel

API Docs

<figure><img src="image_113.png" /><figcaption>Surface Reflectance</figcaption></figure>

Level-2A orthorectified atmospherically corrected surface reflectance.

Dataset availability 2017-03-28 – Present

<figure><img src="image_114.png" /></figure>

<figure><img src="image_115.png" /><figcaption>Top-of-Atmosphere Reflectance</figcaption></figure>

Level-1C orthorectified top-of-atmosphere reflectance.

Dataset availability 2015-06-23 – Present

41 var S2 = ee.ImageCollection('COPERNICUS/S2_SR')

41 var S2 = ee.ImageCollection('COPERNICUS/S2')
## Étape 2 - Correction atmosphérique

<figure><img src="image_116.png" /></figure>

<figure><img src="image_117.png" /></figure>

//----------------Correction atmo------------------//

var siac = require('users/marcyinfengutils:SIAC');

function boa_toa(image){
  return siac.get_sur(image);
}

<figure><img src="image_118.png" /></figure>

Yin, F., Lewis, P. E., Gomez-Dans, J., & Wu, Q. (2019, February 21). A sensor-invariant atmospheric correction method: application to Sentinel-2/MSI and Landsat 8/OLI. https://doi.org/10.31223/osf.io/ps957

<figure><img src="image_119.png" /><figcaption>NDVI sans correction atmosphérique</figcaption></figure>

<figure><img src="image_120.png" /><figcaption>NDVI avec correction atmosphérique (SIAC)</figcaption></figure>
## Étape 2 - Préparer le calcul du NDVI

<figure><img src="image_121.png" /></figure>

<figure><img src="image_122.png" /></figure>

//----------------Calcul du NDVI------------------//

function addNDVI(image) {
  return image
    .addBands(image[normalizedDifference(['B8', 'B4'])])
    .rename('NDVI'); //change new band name from 'nd' to 'NDVI'
}

<figure><img src="image_123.png" /></figure>

Définition d'une fonction permettant le calcul du NDVI sur les bandes des images S2.

$$NDVI = \frac{NIR - Red}{NIR + Red}$$

### Bands

<table><thead><tr><td>Name</td><td>Scale</td><td>Pixel Size</td><td>Wavelength</td><td>Description</td></tr></thead><tbody><tr><td>B1</td><td>0.0001</td><td>60 meters</td><td>443.9nm (S2A) / 442.3nm (S2B)</td><td>Aerosols</td></tr><tr><td>B2</td><td>0.0001</td><td>10 meters</td><td>496.6nm (S2A) / 492.1nm (S2B)</td><td>Blue</td></tr><tr><td>B3</td><td>0.0001</td><td>10 meters</td><td>560nm (S2A) / 559nm (S2B)</td><td>Green</td></tr><tr><td>B4</td><td>0.0001</td><td>10 meters</td><td>664.5nm (S2A) / 665nm (S2B)</td><td>Red</td></tr><tr><td>B5</td><td>0.0001</td><td>20 meters</td><td>703.9nm (S2A) / 703.8nm (S2B)</td><td>Red Edge 1</td></tr><tr><td>B6</td><td>0.0001</td><td>20 meters</td><td>740.2nm (S2A) / 739.1nm (S2B)</td><td>Red Edge 2</td></tr><tr><td>B7</td><td>0.0001</td><td>20 meters</td><td>782.5nm (S2A) / 779.7nm (S2B)</td><td>Red Edge 3</td></tr><tr><td>B8</td><td>0.0001</td><td>10 meters</td><td>835.1nm (S2A) / 833nm (S2B)</td><td>NIR</td></tr><tr><td>B8A</td><td>0.0001</td><td>20 meters</td><td>864.8nm (S2A) / 864nm (S2B)</td><td>Red Edge 4</td></tr><tr><td>B9</td><td>0.0001</td><td>60 meters</td><td>945nm (S2A) / 943.2nm (S2B)</td><td>Water vapor</td></tr><tr><td>B10</td><td>0.0001</td><td>60 meters</td><td>1373.5nm (S2A) / 1376.9nm (S2B)</td><td>Cirrus</td></tr><tr><td>B11</td><td>0.0001</td><td>20 meters</td><td>1613.7nm (S2A) / 1610.4nm (S2B)</td><td>SWIR 1</td></tr><tr><td>B12</td><td>0.0001</td><td>20 meters</td><td>2202.4nm (S2A) / 2185.7nm (S2B)</td><td>SWIR 2</td></tr><tr><td>QA10</td><td></td><td>10 meters</td><td></td><td>Always empty</td></tr><tr><td>QA26</td><td></td><td>20 meters</td><td></td><td>Always empty</td></tr><tr><td>QA68</td><td></td><td>60 meters</td><td></td><td>Cloud mask</td></tr></tbody></table>
## Étape 3 - Appliquer les fonctions

<figure><img src="image_124.png" /></figure>

<figure><img src="image_125.png" /></figure>

```javascript
//----------------Masque de nuages------------------//
var maskcloud1 = function(image) {
  var QA60 = image.select(['QA60']);
  var clouds = QA60.bitwiseAnd(1<<10).or(QA60.bitwiseAnd(1<<11)); // this gives us cloudy pixels
  return image.updateMask(clouds.not()); // remove the clouds from image
};
```

```javascript
//----------------Correction atmo------------------//
var siac = require('users/marcyinfeng');
function boa_toa(image){
  return siac.get_sur(image);
}
```

```javascript
//----------------Calcul du NDVI------------------//
function addNDVI(image) {
  return image
    .addBands(image[normalizedDifference(['B8', 'B4'])]
      .rename('NDVI')); //change new band name from 'nd' to 'NDVI'
}
```

```javascript
var S2_final = S2.map |
  .map(boa_toa) |
  .map(addNDVI);
```
## Étape 4 - Visualiser les résultats

<figure><img src="image_126.png" /></figure>

<figure><img src="image_127.png" /></figure>

Définition de la collection d'images à utiliser, de l'échelle...

```javascript
var graph = ui.Chart.image.SeriesByRegion({
  imageCollection: S2.select('NDVI'),
  regions: Rhone,
  reducer: ee.Reducer.medIAN(),
  scale: 10,
  seriesProperty: 'Site',
})
```

Option de représentation : type de graph, titre, nom des axes

```javascript
.setChartType('ScatterChart')
.setOptions({title: 'Evolution of median NDVI', vAxis: {title: 'NDVI'},
  lineWidth: 1,pointSize: 2});
print(graph);
```

<figure><img src="image_128.png" /><figcaption>Evolution of median NDVI</figcaption></figure>
## Étape 4 - Exporter les résultats

<figure><img src="image_129.png" /></figure>

<figure><img src="image_130.png" /></figure>

2 options pour exporter :

<figure><img src="image_131.png" /></figure>

<figure><img src="image_132.png" /></figure>

```javascript
var table_NDVI = S2.select('NDVI');
Export.table.toDrive({
  collection: table_NDVI,
  description: "NDVI_17sites",
  fileFormat: 'CSV'
});
```

Directement depuis la fenêtre de visualisation

Sans passer par la visualisation, directement en fichier csv vers le drive.
## Étape 4 - Exporter les résultats

<figure><img src="image_133.png" /></figure>

<figure><img src="image_134.png" /></figure>

<figure><img src="image_135.png" /></figure>
<figure><img src="image_136.png" /></figure>

# Visualiser l'évolution de la végétation

1. Pré-traitement

<figure><img src="image_137.png" /></figure>

Choix de la période, du satellite, de l'emprise

<figure><img src="image_138.png" /></figure>

Masque de nuages

2. Calcul sur les images

<figure><img src="image_139.png" /></figure>

Choix des deux périodes à comparer et calcul des médianes sur les deux périodes. Puis différence entre les deux médianes.

3. Visualisation

<figure><img src="image_140.png" /></figure>

Visualiser l'évolution de la végétation et choisir la bonne représentation graphique

4. Exporter le résultat

<figure><img src="image_141.png" /></figure>

Exporter le résultat final.
<figure><img src="image_142.png" /></figure>

## Étape 1 - Pré-traitements sur les images

<figure><img src="image_143.png" /></figure>

```perl
//-----------------Importer le shapefile------------------//
var geometry = ee FeatureCollection('users/pierrelchn/foret_reserve_PDR');
Map.centerObject(geometry);
Map.addLayer (geometry);
```

//-----------------Prétraitement images------------------//

```perl
var S2_Juin = ee.ImageCollection('COPERNICUS/S2_SR_HARMONIZED')
  .filterDate('2022-06-01', '2022-06-30')
  .filterBounds(geometry)
  .filterMetadata('CLOUDYPIXEL_PERCENTAGE', 'less than', 30)
  .map maskcloud1
  .map addNDVI;

print(S2_Juin);
```

```perl
var S2_Aout = ee.ImageCollection('COPERNICUS/S2_SR_HARMONIZED')
  .filterDate('2022-08-01', '2022-08-31')
  .filterBounds(geometry)
  .filterMetadata('CLOUDYPIXEL_PERCENTAGE', 'less than', 30)
  .map maskcloud1
  .map addNDVI;

print(S2_Aout);
```

<figure><img src="image_144.png" /></figure>

<figure><img src="image_145.png" /></figure>

<figure><img src="image_146.png" /></figure>

<figure><img src="image_147.png" /></figure>
## Étape 2 - Calcul sur les images

<figure><img src="image_148.png" /></figure>

<figure><img src="image_149.png" /></figure>

var S2_Juin = S2_Juin.median().clip(geometry);

var S2_Juin = S2_Juin.select('NDVI');

<figure><img src="image_150.png" /><figcaption>NDVI médian juin</figcaption></figure>

<figure><img src="image_151.png" /></figure>

var S2_Aout = S2_Aout.median().clip(geometry);

var S2_Aout = S2_Aout.select('NDVI');

<figure><img src="image_152.png" /><figcaption>NDVI médian août</figcaption></figure>

<figure><img src="image_153.png" /></figure>
<figure><img src="image_154.png" /></figure>

## Étape 2 - Calcul sur les images

<figure><img src="image_155.png" /></figure>

<figure><img src="image_156.png" /></figure>

NDVI médian Août

<figure><img src="image_157.png" /></figure>

<figure><img src="image_158.png" /></figure>

NDVI médian Juin

<figure><img src="image_159.png" /></figure>

<figure><img src="image_160.png" /></figure>

<figure><img src="image_161.png" /></figure>

var ndvi_diff = S2_Aout.subtract(S2_Juin);

var ndviParams = {min: -0.09, max: 0.05, palette: ['red', 'white', 'green']};
Map.addLayer(ndvi_diff, ndviParams, "NDVI", true);

<figure><img src="image_162.png" /></figure>
## Étape 3 - Visualisation

<figure><img src="image_163.png" /></figure>

### NDVI visualization parameters

<figure><img src="image_164.png" /></figure>

Export.image.toDrive({
  image: ndvi_diff,
  description: 'NDVI_DIFF_2022',
  region: geometry,
  scale: 10,
  fileFormat: 'GeoTIFF'
});

<figure><img src="image_165.png" /></figure>

<figure><img src="image_166.png" /></figure>
## Mon point de vue ?

Me permet un gain de temps considérable

Nombreuses ressources d'aide

Disponibilité des images Sentinel sur GEE

Manque de possibilité de visualisation et d'export

Prise en main du langage Javascript

Faiblesse de l'enseignement de GEE en France

Accessibilité gratuite dans le futur avec Google?
<figure><img src="image_167.png" /></figure>

Merci beaucoup

Pierre Lochin
pierre.lochin@ens-lyon.fr
# Cas Pratique n°2

## Évolution surfacique de la couverture de neige sur le glacier de Mont-de-Lans de 2000 à 2020

Louis Rey
# Site d'étude : Dans le massif des Ecrins

<figure><img src="image_168.png" /><figcaption>## Massif des Ecrins → Hautes-Alpes et Isère (Barre des Écrins, 4012 m)</figcaption></figure>
# Site d'étude : Le Glacier de Mont-de-Lans

## Activité économique/touristique

<figure><img src="image_169.png" /></figure>

<figure><img src="image_170.png" /></figure>

L'exploitation des remontées mécaniques représentait en 2019 un chiffre d'affaires de 40 millions d'euros avec 1,2 million de journées-skieur
## Site d'étude : Le Glacier de Mont-de-Lans

* Réchauffement climatique ... + de 3 degrés de réchauffement depuis 1850

* Isotherme 0°C > 4000 mètres NGF

1. Quelle évolution de la couverture neigeuse sur le glacier de Mont-de-Lans entre 2000 et 2020 ?

→ Représenter cette évolution annuelle sous forme d'un GIFF de la période et d'un graphique ?
## Fonctions post-traitements des images

```javascript
//Cloud masking and scale factor
```

```javascript
var maskL7SR2 = function fmask(img) {
  var cloudShadowBitMask = 1 << 3;
  var cloudsBitMask = 1 << 5;
  var qa = img.select('QAjuPbXEL');
  var mask = qa.bitwiseAnd(cloudShadowBitMask).eq(0)
    .and(qa.bitwiseAnd(cloudsBitMask).eq(0));
  return img.updateMask mask;
};
```

```javascript
// Applies scaling factors --> Add two bands of scaling factors
function applyScaleFactors(image) {
  var opticalBands = image.select('SR_B4').multiply(0.0000275).add(-0.2);
  var opticalBands2 = image.select('SR_B3').multiply(0.0000275).add(-0.2);
  return image.addBands/opticalBands, null, true) // one more band
    .addBands/opticalBands2, null, true); // one more band
}
```
## Fonctions pour créer l'indice NDSI et couper nos images

#### NDSI function

#### NDSI function

#### NDSI function

```javascript
var addNDSI = function(image) {
    var ndsi = image[normalizedDifference(['SR_B2', 'SR_B5'])].rename('NDSI');
    return image.addBands(ndsi);
};
```

#### DECOUPER IMAGE par REGION

#### DECOUPER IMAGE par REGION

#### DECOUPER IMAGE par REGION

```javascript
var clipImageByRegion = function(image) { // image must be an image georeferenced
    return image clipped(region);
};
```
# L'indice NDSI

$$ \text{NDSI} = \text{Normalized Difference Snow Index} = \left( \frac{\text{Green} - \text{Shortwave Infrared}}{\text{Green} + \text{Shortwave Infrared}} \right) $$

* NDSI > 0 → is considered to have some snow présent (NDSI = 1, 100% snow cover)

* A pixel with NDSI <= 0.0 is a snow free land surface (Riggs et al., 2016).

> "Snow typically has very high visible (VIS) reflectance and very low reflectance in the shortwave infrared (SWIR), a characteristic used to detect snow by distinguishing between snow and most cloud types"

## Images Landsat 7 : Bande 2 et bande 5

<figure><img src="image_171.png" /></figure>
# Import dans GEE du site d'étude

## Importer le polygone du site d'étude pré-délimité

// Center on the study area and add polygone to the map

var polygon =

/* color: #0000ff */

/* shown: false */

eeanning.Polygon(

[[[6.211501747459622, 44.99322849101819],
[6.214505821556302, 44.99322849101819],
[6.218883186668607, 44.993592681666556],
[6.2234322131578645, 44.9963847330818],
[6.229354530662747, 44.99753793201176],
[6.23119725645942, 44.99536532685774],
[6.2417506247423615, 44.99540346239954],
[6.273760347528667, 44.9991221244209],
[6.275691519483777, 45.002915260236136],
[6.266164313062879, 45.00764875782271],
[6.262044440016004, 45.010804205585664],
[6.256207953199597, 45.01893475058213],
[6.2365527255384645, 45.012442542591316],
[6.225480566724988, 45.0103187633984],
[6.206685731967738, 45.008595861794646],
[6.20539827164059, 44.99664019020416]]]

<figure><img src="image_172.png" /></figure>

Map.addLayer(polygon, {}, 'site étude');

Map.centerObject(region); // center the map according to the region of study
# Choix images satellites

## Landsat 7 Enhanced Thematic Mapper Plus (ETM+)

<table><thead><tr><td>Landsat 7</td><td>Wavelength (micrometers)</td><td>Resolution (meters)</td></tr></thead><tbody><tr><td>Band 1 - Blue</td><td>0.45-0.52</td><td>30</td></tr><tr><td>Band 2 - Green</td><td>0.52-0.60</td><td>30</td></tr><tr><td>Band 3 - Red</td><td>0.63-0.69</td><td>30</td></tr><tr><td>Band 4 - Near Infrared (NIR)</td><td>0.77-0.90</td><td>30</td></tr><tr><td>Band 5 - Shortwave Infrared (SWIR) 1</td><td>1.55-1.75</td><td>30</td></tr><tr><td>Band 6 - Thermal</td><td>10.40-12.50</td><td>60 (30)</td></tr><tr><td>Band 7 - Shortwave Infrared (SWIR) 2</td><td>2.09-2.35</td><td>30</td></tr><tr><td>Band 8 - Panchromatic</td><td>-52-.90</td><td>15</td></tr></tbody></table>

* Période couverte : 2000 - 2020

* Satellite revisit period : 16 days → 2 imgs par mois

* Couverture spatiale de 170 km Nord Sud et 183 km Est Ouest
## Sélection des images satellites

```r
var LS7 = ee.ImageCollection("LANDSAT/LE07/C02/T1_L2") // Level 2 product from the BOA, atmospheric correction already proceed
.filterDate('2000-01-01', '2020-12-31') // date filter
.filterBounds(region) // filter images in contact with the region
.filterMetadata('CLOUD_COVER', 'less', 30) // filter of cloud cover
.map maskL7SR2 // apply the cloud mask
.map(applyScaleFactors) // apply the scale factors
.map(addNDSI).select('NDSI'); // Select only the NDSI layer Or Image.addBands to add a new band of NDSI

print(LS7);

// apply the function clipImageByRegion at all images
LS7 = LS7.map(clipImageByRegion)
```

### Filtrer couverture nuageuses

### Masque de nuage

### Calcul NDSI

### Couper les images par la zone d'étude
# Calculer l'indice moyen de NDSI pour une période définie

Juillet-Août et septembre = Plus faible extension du couvert neigeux

```javascript
// Create a list of years from the period
var startYear = 2000;
var endYear = 2020;
var years = ee.List.Sequence(startYear, endYear);
print(years, "year");
```

```javascript
// Create a function to calculate the mensual mean of NDSI
var calculateMonthlyNDSI = function(year) {
  vardates = ee.Date.fromYMD(year, 7, 1); //between July and September
  var dates = ee.Date.fromYMD(year, 9, 30);
  var ndsiCollection = LS7.filterDate(startDate, dates); //Filter images according to the period
  var monthlyMean = ndsiCollection.reduce(ee.Reducer.mean()); // Apply the mean on all filtered images
  return monthlyMean.set('year', year);
};
```
# Ajouter les couches de NDSI pour la période définie

## Juillet-Août et septembre = Plus faible extension du couvert neigeux

```javascript
var periodNDSList = years.map(calculatedMonthlyNDSI);
// Convert the list to an image stack where each band represents a different year
// "Tobands" Converts a collection to a single multi-band image containing all of the bands of every image in the collection
var monthlyNDSIImage = ee.ImageCollection(periodNDSList).toBands();
```

```javascript
// Get the list of band names (years)
var bandNames = monthlyNDSIImage.bandNames();
print(bandNames, 'bande_names'); // afficher les noms
```

```javascript
// Create a function to add the image to the map. Each layer representing a different year
bandNamesisque evaluate(function(bandNames) {
  bandNames.forEach(function(year) {
    var ndsiYear = monthlyNDSIImage.select([year]);
    Map.addLayer(ndsiYear, {min: -1, max: 1, palette: ['0000FF', 'FFFFFF', '00FF00'], 'NDSI ' + year);
  });
});
```

<figure><img src="image_173.png" /></figure>

```javascript
print(monthlyNDSIImage);
```

<figure><img src="image_174.png" /></figure>
## Exporter les images annuelles de NDSI

// Iterate through each band (year) to export as an image for each year the mean NDSI pixels
var bandNames_2 = monthlyNDSIImage.bandNames().getInfo(); // Get the list of band names (years)

print(bandNames_2)

bandNames_2.forEach(function(year) {
  var ndsiYear = monthlyNDSIImage.select([year]);

// Define an export region (you can adjust this)
var exportRegion = region;

// Define export parameters for images

var exportParams = {
  image: ndsiYear,
  description: 'NDSI ' + year,
  folder: 'GEE_TP', // Replace with your desired folder
  scale: 30, // Spatial resolution in meters
  region: exportRegion,
  maxPixels: 1e13 // Adjust as needed
};

// Export the image

Export.image.toDrive(exportParams);

<figure><img src="image_175.png" /></figure>

<figure><img src="image_176.png" /></figure>
## Créer un URL pour un GIF*

```php
//%/%/%/ Create a GIF //%/%/%

// Convertissez la liste en une collection
var monthlyNDSICollection = ee.ImageCollection(periodNDSIList);

// Affichez la collection de moyennes mensuelles
print(monthlyNDSICollection, 'test');

// Création d'une URL pour visualiser le gif, puis affichage de celui-ci dans la console
var gif = monthlyNDSICollection.getVideoThumbURL({
  dimensions: 1200,
  framesPerSecond: 0.5,
  region: region
});

print("Link to see the gif :", gif);
```

<figure><img src="image_177.png" /></figure>

<figure><img src="image_178.png" /></figure>
Créer un URL pour un GIFF*

<figure><img src="image_179.png" /></figure>

Utiliser d'autres
logiciels pour faire
votre GIFF
conseiller

Ex : Illustrator
## Créer un graphique de la moyenne de NDSI sur les mois sélectionnés entre 2000 et 2020

```javascript
// Create a graph with the mean of NDSI of each year
// Convertissez la liste en une collection
var monthlyNDSICollection = ee.ImageCollection(periodNDSIList);

// Affichez la collection de moyennes mensuelles
print(monthlyNDSICollection);

// Variable to create a graph of the mean NDSI of the surface for the period given
var chart = ui.Chart.image seriessByRegion({
  imageCollection: monthlyNDSICollection,
  regions: region,
  reducer: ee.Reducer.mean(),
  scale: 30,
  xProperty: 'year',
  seriesProperty: 'year'
}).setOptions({
  title: 'Moyenne de NDSI entre juillet et septembre par année',
  trendlines: {type: 'linear', visibleInLegend: true},
  hAxis: {title: 'Année'},
  vAxis: {title: 'Moyenne de NDSI'}
});

chart = chart.setChartType('ScatterChart');

// Afficher le graphique
print chart);
```
# Créer un graphique de la moyenne de NDSI sur les mois sélectionnés entre 2000 et 2020

<figure><img src="image_180.png" /></figure>

Moyenne de NDSI
Exporter vos données en csv pour faire votre graphique dans Excel

var annualNDSIImage = monthlyNDSICollection.toBands();

var featureCollection = annualNDSIImage.reduceRegions({ // cette fonction s'applique seulement à une image
  collection: region,
  reducer: ee.Reducer.mean(),
  scale: 30
});

Export.table.toDrive({
  collection: featureCollection,
  description: 'NDSI_Moyen_juillet_septembre', // Donnez un nom descriptif à votre fichier
  fileFormat: 'CSV'
});

<figure><img src="image_181.png" /></figure>
Exporter vos données en csv pour faire votre graphique dans Excel

<figure><img src="image_182.png" /></figure>

$$y = -0.0075x + 15.547$$
$$R^2 = 0.2426$$
# Quels images satellites choisir ?

Landsat 7 ETM+, très longue chronique entre 1999 et 2020 → LANDSAT/LE07/C02/T1_L2

Source :

https://www.usgs.gov/landsat-missions/landsat-7

T1 et T2 sont des collections de rangement des images qui partagent des paramètres radiométriques et géométriques communs.

Les produits de niveau 1 sont les données d'image stockées dans des numéros numériques (DN), qui peuvent être converties en réflectance au sommet de l'atmosphère ou en radiance au niveau du capteur à l'aide des métadonnées fournies avec le produit.

Le produit de niveau 2 correspond aux données d'image calculées basées sur le produit de niveau 1. Certains produits de niveau 2 sont la réflectance de surface Landsat, la température de surface Landsat, etc.

* Band 1 Blue (0.45 - 0.52 µm) 30 m

* Band 2 Green (0.52 - 0.60 µm) 30 m

* Band 3 Red (0.63 - 0.69 µm) 30 m

* Band 4 Near-Infrared (0.77 - 0.90 µm) 30 m

* Band 5 Short-wave Infrared (1.55 - 1.75 µm) 30 m

* Band 6 Thermal (10.40 - 12.50 µm) 60 m Low Gain / High Gain

* Band 7 Mid-Infrared (2.08 - 2.35 µm) 30 m

* Band 8 Panchromatic (PAN) (0.52 - 0.90 µm) 15 m

* Ground Sampling Interval (pixel size): 30 m reflective, 60 m thermal

* Added the Band 6 Low and High gain 60 m thermal bands

* On-board calibration was added to Landsat 7: a Full Aperture Solar Calibrator (FASC) and a Partial Aperture Solar Calibrator (PASC), in addition to the 2 calibration lamps
# Cas Pratique n°3

## Détection et analyse d'îlots de chaleur
sur la métropole de Lyon en 2015

Hervé PARMENTIER
<figure><img src="image_183.png" /></figure>

# Création du script - récapitulatif des étapes

* 1 : Créer un dossier de travail dans l'arborescence « user »

* 2 : Définir l'emprise de l'étude et créer une géométrie polygonale dans la console, centrez la carte sur le polygone.

* 3 : Créer une seconde géométrie en points sur les placettes (échantillons des analyses de T°) du futur graphique d'analyse des températures. Point par point remplacer les valeurs (X, Y) des points en suivant la méthode « Ermida » décrite plus loin. (Puis effacer dans le gestionnaire)

* 4 : Adapter une méthode développée sur Mumbaiï : "ERMIDA"

https://courses.spatialthoughts.com/end-to-end-gee-supplement.html#derive-lst-from-lan-dsat-images

* 5 : Modifier les intitulées de localisation des zones échantillons du graphique des températures annuelles ; rubrique : « createthe LSt time series chart »

* 6 : Coder l'export de l'image et du graphique ; Tester le script par « RUN » sur la console.
<figure><img src="image_184.png" /></figure>

## Étape 1 - Créer un dossier de travail dans l'arborescence "User"

<figure><img src="image_185.png" /></figure>

Allez en haut à gauche de l'interface code editor

-> Développer le menu

-> Choisissez "Folder"
<figure><img src="image_186.png" /></figure>

## Étape 2 - Définir l'emprise de l'étude, créer la géométrie

1. L'emprise de la métropole de Lyon peut être importée sous forme de shape dans Google Earth Engine À partir du site suivant :

https://data.grandlyon.com/portail/fr/jeux-de-donnees/circonscriptions-metropolitaines-2018-metropole-lyon/info

* Puis une délimitation en polygone carré peut être tracée l'englobant :

<figure><img src="image_187.png" /></figure>

<figure><img src="image_188.png" /></figure>

Puis saisir ce code pour afficher le carré d'emprise :

Map.centerObject(geometry, 12);

Map.addLayer(geometry, {}, 'polygoneLyon')
<figure><img src="image_189.png" /></figure>

# Étape 3 - Créer une seconde géométrie en points sur les zones

## Objectif : créer 05 implantations :

var **Miribel** = ee Geometrytol Point([4.996851030504463,45.80232597733746]);

var **TetedOr** = ee Geometrytol Point([4.852020576198277,45.776254160471424]);

var **Guillotiere** = ee Geometrytol Point([4.853191766773399,45.749194814157036]);

var **Airport** = ee Geometrytol Point([5.0863509051147915,45.7236297270986]);

var **Water** = ee Geometrytol Point([4.945455068284477,45.80627603701807]);

## Méthode :

1. Reprendre le code var « nom du lieu » = ee Geometrytol Point dans la console du script

2. Définir la prise de point en utilisant la boîte à outils de tracés :

3. Récupérer les coordonnées et les coller comme suit (en blanc) :

var **Miribel**= ee Geometrytol Point ([4.996851030504463,45.80232597733746];

4. Recommencer **autant de fois que de points à prendre**. (NB : Le nombre et l'implantation doit rester significatif).
Ici eau(Rhône), végétation (Tête d'Or/Mribel), urbain denseGuillautière) et parking/tarmac

<figure><img src="image_190.png" /></figure>
<figure><img src="image_191.png" /></figure>

## Étape 4 - Utiliser une méthode éprouvée: ERMIDA

**//Importez la collection Landsat 8:**

var collection = ee.ImageCollection("LANDSAT/LC08/C01/T1");

**//Définissez la région d'intérêt (ROI) dans laquelle vous souhaitez afficher l'image thermique.**

var roi = eeonasrn GeometryRectangle([longitude_min, latitude_min, longitude_max, latitude_max]);

**//Filtrer la collection Landsat 8 pour les images couvrant votre ROI et votre période d'intérêt :**

var filteredCollection = collection

filterBounds(roi)

filterDate('date_debut', 'date_fin'); // Remplacez 'date_debut' et 'date_fin' par les dates de votre choix.

**//Triez la collection filtrée par la date, en ordre décroissant :**

var sortedCollection = filteredCollection.sort('system:time_start', false);

**//Sélectionnez l'image thermique (bande 10) de la collection triée :**

var imageThermique = sortedCollection.select([B10]).first();

**//Définissez les paramètres d'affichage pour l'image thermique, notamment la palette de couleurs pour représenter les températures :**

var visParams = {

min: 273.15, // Température minimale en Kelvin (0°C)

max: 373.15, // Température maximale en Kelvin (100°C)

palette: ['blue', 'purple', 'cyan', 'green', 'yellow', 'red']

}

**//Ajoutez l'image thermique à la carte Google Earth Engine avec les paramètres d'affichage définis :**

Map.centerObject(roi, 10);

**// Centrez la carte sur le ROI**

Map.addLayer(imageThermique, visParams, 'Image Thermique');
<figure><img src="image_192.png" /></figure>

# Étape 5 - Modifier les intitulées des zones échantillonnées

Dans la continuité de votre script coller le script référent MÉTHODE « ERMIDA », Vous référer à la section suivante du script : Create the LSt time series chart.

## 1- Modifier les intitulés des zones échantillons du graphique comme suit :

```javascript
var chart = ui.Chart.image seriessByRegion({
    imageCollection: lstC,
    regions: [Miribel, TetedOr, Guillotiere, Airport, Water],
    .../
```

Puis sur cette section du même bloc :

```javascript
vAxis: {title: 'LST (°C)'},
hAxis: {title: '', format: 'YYYY-MMM'},
series: {
    0: {color: 'green', labelInLegend: 'Miribel Park'},
    1: {color: 'yellow', labelInLegend: 'TetedOr Park'},
    2: {color: 'grey', labelInLegend: 'Guillotiere Residential'},
    3: {color: 'red', labelInLegend: 'St Exupery Airport'},
    4: {color: 'blue', labelInLegend: 'Water'}
}
})
```
<figure><img src="image_193.png" /></figure>

# Étape 6 - Coder l'export de l'image et du graphique

## Utiliser ces lignes de code JS :

### Export image

Export.image.toDrive({ // export vers le Drive de Google (15 Go gratuit)

image: IstAugust // nom de l'image

description: 'LandSat Thermie Image', // description du nom du dossier

scale: 10, // taille d'échelle

// region: Polygon,

crs: 'EPSG:2154', // Coordonnées de Ref. Spatiale :Projection Lambert 93

maxPixels: 1e13 // taille max pixel

});

### Export the chart to Google Drive

Export.image.toDrive({

image: IstC, // image

description: 'Thermiechart_export',

//folder: 'your folder name',

filenamePrefix: 'chart_export',

scale: 1, // ajuster l'échelle si nécessaire

// region: Polygon,

crs: 'EPSG:2154',

maxPixels: 1e13

});
# Étape 7 - Tester le script

<figure><img src="image_194.png" /></figure>

## Mosaïque d'Images thermiques, bande 10

<figure><img src="image_195.png" /></figure>

Résultat Lyon, Landsat 8, B10, Août 2015.

## Graphique annuel des températures de surface par échantillons zonalx

<figure><img src="image_196.png" /></figure>

## Liste des tâches à exécuter sur le drive

<figure><img src="image_197.png" /></figure>
<figure><img src="image_198.png" /></figure>

Merci de votre attention.

(des questions ?)

Hervé Parmentier

Ingénieur cartographe/ géomaticien, géographe,

Cartographer & GIS engineer, geographer,

ÉCOLE NORMALE SUPÉRIEURE DE LYON

Pôle de la Recherche, plateforme Ingénierie spatiale, Images et Géomatique (ISIG)

UMR 5600 - Laboratoire Environnement, Ville, Société

Bâtiment D4 / Descartes / Bureau D4-245

15 Parvis René Descartes, BP 7000

69342 Lyon cedex 07

Email : herve.parmentier@ens-lyon.fr

Tel : (00 33) 04.37.37.64.37