Exécution différée

Le document Client par rapport au serveur explique comment les objets référencés dans votre script peuvent être côté client ou côté serveur. Le script complet contient non seulement les objets que vous souhaitez utiliser, mais également un ensemble d'instructions qui indiquent à Earth Engine ce qu'il doit en faire. Ce document explique comment ces instructions sont envoyées à Google pour être traitées et comment les résultats sont renvoyés au client pour être affichés.

Lorsque vous écrivez un script dans Earth Engine (en JavaScript ou en Python), ce code n'est PAS exécuté directement sur les serveurs Earth Engine de Google. À la place, la bibliothèque cliente encode le script dans un ensemble d'objets JSON, envoie les objets à Google et attend une réponse. Chaque objet représente un ensemble d'opérations requises pour obtenir une sortie particulière, une image à afficher dans le client, par exemple. Prenons l'exemple de code suivant :

Éditeur de code (JavaScript)

var image = ee.Image('CGIAR/SRTM90_V4');
var operation = image.add(10);
print(operation.toString());
print(operation);

Configuration de Python

Consultez la page Environnement Python pour en savoir plus sur l'API Python et l'utilisation de geemap pour le développement interactif.

import ee
import geemap.core as geemap

Colab (Python)

image = ee.Image('CGIAR/SRTM90_V4')
operation = image.add(10)
print(operation)
print(operation.getInfo())

La première instruction d'impression affichera la structure JSON que la bibliothèque cliente utilise pour décrire cette image au serveur Google:

ee.Image({
  "type": "Invocation",
  "arguments": {
    "image1": {
      "type": "Invocation",
      "arguments": {
        "id": "CGIAR/SRTM90_V4"
      },
      "functionName": "Image.load"
    },
    "image2": {
      "type": "Invocation",
      "arguments": {
        "value": 10
      },
      "functionName": "Image.constant"
    }
  },
  "functionName": "Image.add"
})
    

La deuxième instruction d'impression envoie la requête à Google et affiche la réponse POST des serveurs Google. Pour afficher la réponse au format JSON, cliquez sur le lien JSON sur le côté droit de la console, à côté de l'objet imprimé:

{
  "type": "Image",
  "bands": [
    {
      "id": "elevation",
      "data_type": {
        "type": "PixelType",
        "precision": "int",
        "min": -32758,
        "max": 32777
      },
      "crs": "EPSG:4326",
      "crs_transform": [
        0.0008333333535119891,
        0,
        -180,
        0,
        -0.0008333333535119891,
        60
      ]
    }
  ]
}
    

Aucune donnée n'est envoyée à Google pour traitement tant qu'aucune demande n'est formulée. Dans cet exemple, l'impression du résultat d'un appel getInfo() sur un objet serveur déclenche une requête. Aucun traitement n'est effectué sur le serveur tant que ce résultat n'est pas explicitement demandé. Notez que print() dans l'éditeur de code JavaScript est une fonction côté client spéciale qui encapsule un appel getInfo() asynchrone. Pour Python, nous l'appelons directement.

Un autre exemple de requête consiste à l'afficher dans l'éditeur de code ou dans l'élément de carte geemap. Lorsque cette requête est envoyée à Google, seules les tuiles nécessaires pour afficher le résultat dans l'éditeur de code ou l'élément de carte geemap sont renvoyées. Plus précisément, la position de la carte et le niveau de zoom déterminent les données qui sont traitées et transformées en images pouvant être affichées sur la carte. Si vous effectuez un panoramique ou un zoom, notez que les autres tuiles sont calculées de manière paresseuse. Ce système à la demande permet la parallélisation et un traitement efficace, mais signifie également que l'image affichée sur la carte est produite à partir de différentes entrées en fonction du niveau de zoom et de l'emplacement des limites de la carte. Pour en savoir plus sur la façon dont les entrées d'un calcul sont déterminées à partir de la requête, consultez le document Échelle.