In precedenza, hai imparato a ottenere singole scene Landsat eseguendo un'operazione simile a questa,
dove l8 e point sono importazioni che rappresentano la raccolta Landsat 8 TOA
e una geometria dell'area di interesse:
Editor di codice (JavaScript)
// Define a point of interest. Use the UI Drawing Tools to import a point // geometry and name it "point" or set the point coordinates with the // ee.Geometry.Point() function as demonstrated here. var point = ee.Geometry.Point([-122.292, 37.9018]); // Import the Landsat 8 TOA image collection. var l8 = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA'); // Get the least cloudy image in 2015. var image = ee.Image( l8.filterBounds(point) .filterDate('2015-01-01', '2015-12-31') .sort('CLOUD_COVER') .first() );
Supponiamo ora di voler calcolare un'immagine NDVI (Normalized Difference Vegetation Index) dall'immagine Landsat. La vegetazione riflette la luce nella parte del vicino infrarosso (NIR) dello spettro elettromagnetico e assorbe la luce nella parte rossa (scopri di più sulla riflettanza NIR della vegetazione). L'NDVI utilizza questi dati per creare un singolo valore che riflette approssimativamente l'attività fotosintetica che si verifica in un pixel. Il calcolo è (NIR - rosso) / (NIR + rosso). In questo modo si ottiene un numero compreso tra 1 e -1, dove i pixel con un'elevata attività fotosintetica hanno un NDVI elevato. Questo è un modo per calcolare l'NDVI in Earth Engine:
Editor di codice (JavaScript)
// Compute the Normalized Difference Vegetation Index (NDVI). var nir = image.select('B5'); var red = image.select('B4'); var ndvi = nir.subtract(red).divide(nir.add(red)).rename('NDVI'); // Display the result. Map.centerObject(image, 9); var ndviParams = {min: -1, max: 1, palette: ['blue', 'white', 'green']}; Map.addLayer(ndvi, ndviParams, 'NDVI image');
Il risultato dovrebbe essere simile alla Figura 8. Tieni presente che utilizziamo la funzione select() che hai appreso nella sezione precedente sul mascheramento per ottenere le bande NIR e rossa, quindi calcoliamo l'NDVI utilizzando gli operatori matematici delle immagini che hai anche visto in precedenza nella sezione sulla matematica di Image. Infine, visualizza l'immagine con una tavolozza. Qui abbiamo utilizzato i nomi dei colori anziché le stringhe esadecimali nella tavolozza. Per informazioni dettagliate, consulta questo riferimento esterno sul colore CSS.
L'operazione di differenza normalizzata è così diffusa nel telerilevamento che esiste una
funzione di scorciatoia su un
ee.Image che è utile per semplificare il codice nell'esempio precedente:
Editor di codice (JavaScript)
var ndvi = image.normalizedDifference(['B5', 'B4']).rename('NDVI');
Mappatura di una funzione su una raccolta
Supponiamo ora di voler aggiungere l'NDVI a ogni immagine di una raccolta di immagini. Il modo per farlo in Earth Engine è map() una funzione sulla raccolta.
Non confondere map() con l'oggetto Map. Il primo è un metodo
su una raccolta e utilizza map nel
senso di computing parallelo
di applicazione di una funzione a ogni elemento di una raccolta. La funzione definisce le operazioni che verranno applicate a ogni elemento della raccolta. Hai visto
una funzione semplice nel tutorial su JavaScript, ma
ora creeremo una funzione che include la funzionalità di Earth Engine. Ad esempio, copia il codice NDVI precedente in una funzione che restituisce l'immagine di input con una banda NDVI:
Editor di codice (JavaScript)
var addNDVI = function(image) { var ndvi = image.normalizedDifference(['B5', 'B4']).rename('NDVI'); return image.addBands(ndvi); }; // Test the addNDVI function on a single image. var ndvi = addNDVI(image).select('NDVI');
Questo codice potrebbe non essere altrettanto efficiente per il calcolo dell'NDVI per una singola immagine, ma questa funzione può essere utilizzata come argomento per map() per aggiungere una banda NDVI a ogni immagine della raccolta. Spesso è utile testare prima una funzione su una singola immagine per assicurarsi che si comporti come previsto. Dopo aver testato la funzione su una singola immagine e aver stabilito che esegue l'operazione desiderata, puoi mapparla sulla raccolta:
Editor di codice (JavaScript)
var withNDVI = l8.map(addNDVI);
Per verificare che questa operazione inserisca effettivamente una banda NDVI in ogni immagine di questa raccolta, puoi aggiungere la raccolta withNDVI alla mappa ed eseguire una query su una località casuale con la scheda Inspector. Dovresti notare che ogni immagine della raccolta ora ha una banda chiamata NDVI.
Crea un composito di pixel più verdi
Ora che hai creato una raccolta di immagini in cui ogni immagine ha una banda NDVI, possiamo esplorare un nuovo modo per creare compositi: qualityMosaic(). Potresti aver notato delle discontinuità tra i percorsi Landsat, anche nel composito di pixel mediano. Parte del motivo potrebbe essere dovuto alle differenze nella fenologia, poiché le immagini nei percorsi adiacenti vengono raccolte in momenti diversi (nello specifico, a 8 giorni di distanza). Un modo per ridurre al minimo questo problema è provare a impostare i valori dei pixel nel composito in base alla stessa fase fenologica, ad esempio il momento di massima verdezza delle piante (quando le foglie sono presenti e attive dal punto di vista fotosintetico). Se definiamo la massima intensità di verde in base all'NDVI massimo, possiamo utilizzare qualityMosaic() per creare un composito in cui ogni pixel contiene il pixel NDVI massimo della raccolta.
Ora puoi utilizzare la banda NDVI aggiunta nella tua raccolta withNDVI:
Editor di codice (JavaScript)
// Make a "greenest" pixel composite. var greenest = withNDVI.qualityMosaic('NDVI'); // Display the result. var visParams = {bands: ['B4', 'B3', 'B2'], max: 0.3}; Map.addLayer(greenest, visParams, 'Greenest pixel composite');
Il risultato di questo codice dovrebbe essere simile alla Figura 9. Confrontando la Figura 9 con il composito mediano mostrato nella Figura 6, osserva che il composito di pixel più verdi è effettivamente molto più verde. Tuttavia, un esame attento dei corpi idrici dovrebbe evidenziare un problema diverso. In particolare,
le masse d'acqua ora appaiono torbide. Questo è dovuto al modo in cui funziona il metodo qualityMosaic(): in ogni località, viene esaminata l'intera serie temporale e il pixel con il valore massimo nella banda NDVI viene impostato come valore composito. Poiché l'NDVI è più elevato sulle nuvole che sull'acqua, le aree d'acqua presentano pixel nuvolosi, mentre le aree con vegetazione appaiono tutte verdi perché l'NDVI è più elevato quando la vegetazione nel pixel è fotosinteticamente attiva.
Ora hai visto diversi modi per comporre e creare mosaici di immagini in Earth Engine. Puoi creare compositi di valori recenti, mediani o di pixel più verdi da immagini filtrate per ora e luogo o da tutte le immagini della raccolta. Hai imparato a eseguire calcoli sulle immagini ed estrarre informazioni. La pagina successiva illustra i modi per ottenere informazioni da Earth Engine, ad esempio sotto forma di grafico o set di dati esportato nella cartella di Google Drive.