Esecuzione differita

Il documento Client e server descrive in che modo gli oggetti a cui si fa riferimento nello script possono essere lato client o lato server. Lo script completo contiene non solo gli oggetti che vuoi utilizzare, ma anche un insieme di istruzioni che indicano a Earth Engine cosa farne. Questo documento descrive come queste istruzioni vengono inviate a Google per essere elaborate e come i risultati vengono inviati al client per la visualizzazione.

Quando scrivi uno script in Earth Engine (JavaScript o Python), il codice NON viene eseguito direttamente sui server di Earth Engine di Google. Al contrario, la libreria client codifica lo script in un insieme di oggetti JSON, li invia a Google e attende una risposta. Ogni oggetto rappresenta un insieme di operazioni necessarie per ottenere un determinato output, ad esempio un'immagine da visualizzare nel client. Considera il seguente codice:

Editor di codice (JavaScript)

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

Configurazione di Python

Per informazioni sull'API Python e sull'utilizzo di geemap per lo sviluppo interattivo, consulta la pagina Ambiente Python.

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 prima istruzione di stampa mostrerà la struttura JSON utilizzata dalla libreria client per descrivere l'immagine al server di 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 seconda istruzione di stampa invierà la richiesta a Google e stamperà la risposta POST dei server Google. Per visualizzare la risposta in tutto il suo splendore JSON, fai clic sul link JSON sul lato destro della console, accanto all'oggetto stampato:

{
  "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
      ]
    }
  ]
}
    

Nessun dato viene inviato a Google per l'elaborazione finché non viene presentata una richiesta. In questo esempio, la stampa del risultato di una chiamata getInfo() su un oggetto server attiva una richiesta. Non viene eseguita alcuna elaborazione sul server finché il risultato non viene richiesto esplicitamente. Tieni presente che print() nell'editor di codice JavaScript è una funzione lato client speciale che racchiude una chiamata getInfo() asincrona. Per Python la chiamiamo direttamente.

Un altro esempio di richiesta è la visualizzazione nell'editor di codice o nell'elemento mappa geemap. Quando questa richiesta viene inviata a Google, vengono restituiti solo i riquadri necessari per visualizzare il risultato nell'editor di codice o nell'elemento mappa geemap. Nello specifico, la posizione della mappa e il livello di zoom determinano quali dati vengono elaborati e trasformati in immagini che possono essere visualizzate sulla mappa. Se esegui la panoramica o lo zoom, tieni presente che gli altri riquadri vengono calcolati in modo lazy. Questo sistema on demand consente la parallellizzazione e un'elaborazione efficiente, ma significa anche che l'immagine visualizzata sulla mappa viene prodotta da input diversi a seconda del livello di zoom e della posizione dei confini della mappa. Scopri di più su come vengono determinati gli input di un calcolo dalla richiesta nel documento Scale.