Calcoli che utilizzano le immagini

Ora che sai come caricare e visualizzare un'immagine, è il momento di applicarvi un calcolo. Ad esempio, puoi calcolare la pendenza del terreno passando l'immagine dell'elevazione SRTM al metodo slope del pacchetto ee.Terrain.

Editor di codice (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');

Tieni presente che nel codice ee.Terrain.slope(srtm), l'immagine srtm viene fornita come argomento all'algoritmo di pendenza. Il risultato dovrebbe essere simile a quello della Figura 3.

Tutorial_api_03_slope.png
Figura 3. Immagine della pendenza.

Image math

Esistono anche metodi nella classe ee.Image che possono essere richiamati su un oggetto immagine. Ad esempio, supponiamo che tu voglia fare dei calcoli utilizzando le bande delle immagini (a volte chiamate band math o map algebra). Ad esempio, potresti essere interessato a operazioni trigonometriche su un'immagine in formato. Per farlo, converti prima un'immagine proporzionale in radianti, poi chiama sin(). Riutilizzare la nostra immagine srtm,

Editor di codice (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');

Il risultato dovrebbe essere simile alla Figura 4. Vale la pena dare un'occhiata più da vicino al codice aspect.divide(180).multiply(Math.PI).sin(). Concatenando più metodi in questo modo, il codice dice: "dividi l'aspetto per 180, moltiplica il risultato per π e infine calcola il seno". Puoi eseguire operazioni matematiche complesse sulle immagini combinando i metodi in questo modo. Consulta la documentazione di Image per un elenco completo delle operazioni matematiche, add(), subtract(), multiply() e così via.

Tutorial_api_04_sin.png
Figura 4. Peccato dell'aspetto del terreno.

Statistiche delle immagini

Un'altra classe utile di operazioni sulle immagini prevede il calcolo delle statistiche dei pixel nelle regioni dell'immagine o le sovrapposizioni raster-vettoriali. Per calcolare le statistiche in Earth Engine, utilizza un reducer rappresentato dalle classi nel pacchetto ee.Reducer. Ad esempio, supponiamo che ti interessi la media dell'elevazione in una determinata regione. Puoi definire una regione disegnando un poligono utilizzando gli strumenti di disegno di geometrie. Per disegnare in modo interattivo una regione, seleziona lo strumento di disegno del poligono (), quindi digitalizza un poligono sull'area di interesse e fai clic su Esci al termine dell'operazione. Tieni presente che l'oggetto ee.Geometry risultante viene denominato automaticamente geometry e aggiunto come importazione nella parte superiore dello script. Rinomina la variabile in "polygon" facendo clic sul nome della variabile nelle importazioni e digitando il nuovo nome.

Successivamente, ottieni il valore medio dei pixel nel poligono utilizzando il seguente codice:

Editor di codice (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);

Ci sono diversi aspetti da notare. Innanzitutto, osserva che reduceRegion() è un metodo disponibile per gli oggetti Image (scopri di più sulla riduzione delle regioni qui). In secondo luogo, gli argomenti del metodo vengono forniti in un oggetto JavaScript passato come singolo argomento. (Nello specifico, le chiavi dell'oggetto sono i nomi dei parametri del metodo. I valori sono gli argomenti del metodo. Terzo, il parametro reducer specifica il tipo di statistica da calcolare e il parametro geometry specifica la regione in cui calcolare la statistica. Il parametro scale è la dimensione in metri del pixel da utilizzare. Per evitare ambiguità, devi sempre specificare la scala quando esegui riduzioni, in quanto Earth Engine potrebbe non essere in grado di determinare automaticamente la scala appropriata dagli input. Scopri di più sulla scala in Earth Engine.

Infine, il valore restituito di reduceRegion() è un dizionario in cui le chiavi sono i nomi delle bande e i valori sono le statistiche sui pixel per le bande. Il metodo get() su un dizionario restituisce il valore corrispondente alla chiave fornita come argomento. In questo caso, l'immagine srtm ha una banda, "elevation", quindi il codice di esempio recupera questa statistica dal dizionario e la stampa.

Quando esegui questo codice, se ricevi un errore simile a questo:

Non temere: Esistono diverse soluzioni per risolvere l'errore. Il metodo reduceRegion() prevede un controllo per assicurarsi che tu valuti se vuoi davvero includere così tanti pixel nel calcolo. Questo per evitare di fare qualcosa di sciocco, come calcolare la media di ogni pixel di un metro al mondo (non farlo). Per risolvere l'errore, imposta il parametro bestEffort su true aggiungendo bestEffort: true al dizionario dei parametri oppure imposta il parametro maxPixels su un valore superiore al valore predefinito di 10 milioni di pixel o entrambe le cose. Se bestEffort è true, Earth Engine ricalcola automaticamente la scala in modo che maxPixels non venga superato.

Digressione: scala in Earth Engine

Nell'esempio precedente, scale è impostato approssimativamente sulla risoluzione nativa dell'immagine SRTM. Puoi scoprire la risoluzione nativa di un'immagine con:

Editor di codice (JavaScript)

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

Se specifichi una scala più piccola della risoluzione nativa, Earth Engine ricampionerà l'immagine di input utilizzando il metodo del vicino più prossimo, quindi includerà tutti i pixel più piccoli nel calcolo. Se imposti una scala più grande, Earth Engine utilizzerà i pixel di input di una versione aggregata dell'input (ovvero otterrà i pixel da un livello superiore della piramide dell'immagine). Scopri di più su come Earth Engine gestisce la scala in questo documento.

Finora hai lavorato con una singola immagine con una singola banda. Nella pagina successiva, scoprirai di più sulle immagini multibanda e sulle raccolte di immagini.