Come rendere più veloce il tuo JavaScript di Google Earth Engine

Come rendere più veloce il tuo JavaScript di Google Earth Engine
Come rendere più veloce il tuo JavaScript di Google Earth Engine

Ottimizzazione del tempo di esecuzione degli script di Google Earth Engine

Google Earth Engine (GEE) è una potente piattaforma per l'analisi di dati geospaziali su larga scala. Tuttavia, gli utenti spesso riscontrano problemi con i tempi di esecuzione, anche quando i loro script sembrano basilari. Uno script che richiede diversi minuti per essere eseguito può incidere sulla produttività e ritardare la comprensione.

In questo caso, un utente ha creato un semplice script per elaborare i dati Sentinel e Landsat 8. Nonostante la sua semplicità, l'esecuzione dello script richiede circa 3-5 minuti. Capire perché ciò accade e come ottimizzare lo script è essenziale per un'elaborazione efficiente dei dati.

Le prestazioni di uno script GEE dipendono da diversi fattori, tra cui la dimensione dei dati, il filtraggio e la complessità computazionale. La riduzione del tempo di esecuzione implica l'identificazione dei colli di bottiglia all'interno dello script, come operazioni non necessarie o set di dati di grandi dimensioni che rallentano l'elaborazione.

Questo articolo esplorerà le possibili cause dei tempi di esecuzione lenti in GEE e fornirà suggerimenti pratici per ottimizzare lo script fornito. Implementando queste strategie, gli utenti possono migliorare significativamente la velocità e le prestazioni delle loro attività di analisi dei dati geospaziali.

Comando Esempio di utilizzo
normalizedDifference() Questa funzione viene utilizzata per calcolare indici come NDVI, NDWI e NDSI calcolando la differenza tra due bande, divisa per la loro somma. È specifico per l'analisi del telerilevamento in cui sono necessari indici di vegetazione, acqua e neve.
filterBounds() Filtra una raccolta di immagini per includere solo le immagini che intersecano una determinata geometria. In questo caso, limita i dati satellitari all'area attorno al punto di interesse definito, rendendo l'elaborazione più efficiente escludendo dati irrilevanti.
filterDate() Questo comando limita la raccolta di immagini a un intervallo di date specifico. Per il nostro problema, è fondamentale analizzare le differenze tra lo stesso periodo di tempo per i set di dati Sentinel e Landsat.
addBands() Aggiunge nuove bande calcolate (come NDVI, NDWI e NDSI) a ciascuna immagine nella raccolta. Ciò è essenziale per applicare più indici alla stessa raccolta di immagini senza creare set di dati separati.
unmask() Riempie i pixel mascherati con un valore specificato. Nel nostro script viene utilizzato per smascherare le aree idriche permanenti, garantendo che i dati vengano elaborati in modo coerente in tutta la regione.
reduce() Riduce una raccolta di immagini utilizzando una funzione di riduzione specificata, come ee.Reducer.percentile(). Qui viene utilizzato per calcolare il 30° percentile dei valori dei pixel, ottimizzando la generazione di immagini composite.
clip() Ritaglia un'immagine ai confini della regione di interesse specificata. Ciò garantisce che vengano elaborati solo i dati rilevanti per l'area, accelerando l'esecuzione.
gt() Questo comando sta per "maggiore di" e viene utilizzato per creare immagini binarie basate su una soglia. In questo caso, identifica le aree con una presenza d'acqua superiore all'80%.
map() Applica una funzione a ciascuna immagine nella raccolta. Nel nostro esempio, applica la funzione addIndices per calcolare NDVI, NDWI e NDSI su tutte le immagini della raccolta, semplificando il flusso di lavoro.

Ottimizzazione degli script GEE per una migliore efficienza

Nello script fornito, l'obiettivo è estrarre ed elaborare immagini satellitari da due diverse fonti: Sentinel e Landsat. IL Motore di Google Earth (GEE) la piattaforma consente agli utenti di accedere a grandi quantità di dati satellitari e di applicare varie operazioni come filtraggio, indicizzazione e visualizzazione. Una delle funzionalità chiave utilizzate in questo script è il file differenza normalizzata() funzione, che viene utilizzata per calcolare indici importanti come NDVI, NDWI e NDSI. Questi indici sono cruciali per analizzare la vegetazione, l'acqua e la copertura nevosa nella regione specificata. Lo script inizia definendo un punto di interesse e centra la mappa su di esso utilizzando le coordinate fornite.

Lo script applica più filtri, ad esempio datafiltro() E filterBounds(), per ridurre la quantità di dati elaborati, migliorando così i tempi di esecuzione. Ad esempio, filterBounds() garantisce che vengano incluse solo le immagini che intersecano l'area di interesse, mentre datafiltro() limita le immagini a un intervallo di date specifico. Ciò è essenziale per l'elaborazione di set di dati di grandi dimensioni come le immagini Sentinel e Landsat, poiché riduce al minimo il carico computazionale. Inoltre, il filtro per la copertura nuvolosa aiuta a scartare le immagini che hanno troppa nuvola, garantendo un'analisi di migliore qualità.

Un aspetto importante della sceneggiatura è il aggiungiBand() funzione, che aggiunge indici calcolati (NDVI, NDWI, NDSI) alle immagini, rendendole accessibili per ulteriori analisi. Lo script incorpora anche una maschera d'acqua permanente utilizzando i dati del set di dati Global Surface Water del JRC. La maschera dell'acqua aiuta a escludere le aree con un'elevata presenza di acqua (superiore all'80%), che altrimenti potrebbe distorcere i risultati dell'analisi della vegetazione e della neve. Ciò avviene attraverso il gt() E smascherare() funzioni, che consentono allo script di isolare aree in base ai valori dei pixel.

Infine, lo script utilizza il file ridurre() funzione con il riduttore percentile per generare un'immagine composita che rappresenta il 30° percentile dei valori dei pixel selezionati. Questa immagine composita viene quindi ritagliata nella regione di interesse e visualizzata sulla mappa utilizzando clip() funzione. I parametri visivi sono definiti sia per i compositi Sentinel che per Landsat, consentendo all'utente di visualizzarli con le impostazioni di colore appropriate. Combinando varie fasi di elaborazione delle immagini come filtraggio, mascheramento e generazione composita, questo script fornisce un modo efficiente per analizzare le immagini satellitari, sebbene sia possibile applicare un'ulteriore ottimizzazione per ridurre i tempi di esecuzione.

Ottimizzazione dell'esecuzione degli script di Google Earth Engine per un'elaborazione più rapida

Questa soluzione utilizza Google Earth Engine (GEE) con particolare attenzione all'ottimizzazione delle prestazioni riducendo i tempi di recupero dei dati e semplificando le operazioni. JavaScript viene utilizzato come linguaggio di scripting.

var pointJSP = ee.Geometry.Point([86.465263, 20.168076]);
Map.centerObject(pointJSP, 14);
// Combine date variables for flexibility
var startDate = '2024-02-01';
var endDate = '2024-03-01';
// Function to add NDVI, NDWI, NDSI
var addIndices = function(image) {
  var ndvi = image.normalizedDifference(['NIR', 'RED']).rename('NDVI');
  var ndwi = image.normalizedDifference(['NIR', 'SWIR1']).rename('NDWI');
  var ndsi = image.normalizedDifference(['SWIR1', 'SWIR2']).rename('NDSI');
  return image.addBands(ndvi).addBands(ndwi).addBands(ndsi);
};
// Use fewer data points by filtering for cloud-free pixels only once
var sentinel = ee.ImageCollection('COPERNICUS/S2_SR')
  .filterBounds(pointJSP)
  .filterDate(startDate, endDate)
  .filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 30));

Utilizzo di un'elaborazione dati efficiente per GEE per ridurre al minimo i ritardi degli script

Questa soluzione integra una gestione ottimizzata dei dati combinando calcoli di indici e soglie. JavaScript viene applicato per l'elaborazione di Google Earth Engine.

var landsat8 = ee.ImageCollection('LANDSAT/LC08/C01/T1_SR')
  .filterBounds(pointJSP)
  .filterDate(startDate, endDate)
  .filter(ee.Filter.lt('CLOUD_COVER', 30));
// Apply water mask for permanent water areas
var waterMask = ee.Image('JRC/GSW1_4/GlobalSurfaceWater').select('occurrence').gt(80).unmask();
// Add indices to Landsat 8 imagery
var landsatIndices = landsat8.map(addIndices);
var composite = landsatIndices.reduce(ee.Reducer.percentile([30])).clip(pointJSP).mask(waterMask.eq(0));
Map.addLayer(composite, {bands: ['RED', 'GREEN', 'BLUE'], min: 0, max: 3000}, 'Landsat Composite');
Map.addLayer(waterMask, {min: 0, max: 1, palette: ['white', 'blue']}, 'Water Mask', false);

Migliorare l'efficienza degli script di telerilevamento

Una considerazione fondamentale quando si lavora con gli script di Google Earth Engine (GEE) è garantire che le operazioni vengano gestite in modo efficiente. Sebbene l'uso di set di dati di grandi dimensioni come Sentinel e Landsat sia comune nell'analisi ambientale, l'enorme volume di dati può rallentare l'esecuzione degli script. Un metodo per migliorare le prestazioni consiste nel garantire che vengano elaborati solo i dati necessari. Usando comandi come filterBounds() E datafiltro() riduce al minimo le dimensioni del set di dati, il che aiuta a semplificare i calcoli. La selezione di intervalli di date e regioni geografiche specifici può ridurre significativamente i tempi di esecuzione.

Un altro aspetto che influisce sulle prestazioni dello script GEE è il modo in cui vengono elaborati i dati. L'esempio di script utilizza una funzione per calcolare indici importanti come NDVI, NDWI e NDSI. Questi indici vengono aggiunti come fasce alle raccolte di immagini, il che consente un'analisi più approfondita. Tuttavia, un errore comune è applicare tali funzioni a un intero set di dati senza prima filtrarli. È fondamentale applicare tali operazioni dopo il filtraggio per evitare calcoli non necessari su dati irrilevanti.

La visualizzazione è un altro elemento dello script che può essere ottimizzato. L'aggiunta di troppi livelli o visualizzazioni complesse può rallentare i tempi di elaborazione. Lo script utilizza parametri visivi predefiniti per eseguire il rendering dei compositi, ma le prestazioni possono essere migliorate disabilitando determinati livelli a meno che non siano esplicitamente necessari. Ciò aiuta a mantenere lo script leggero pur mantenendo la sua funzionalità. Utilizzando clip() i comandi garantiscono inoltre che venga renderizzata solo l'area necessaria, riducendo il carico di elaborazione complessivo.

Domande frequenti sull'ottimizzazione degli script di Google Earth Engine

  1. Come posso migliorare le prestazioni dei miei script GEE?
  2. Ottimizzare l'uso di filterDate(), filterBounds()e riduci le dimensioni del set di dati prima dell'elaborazione.
  3. Perché il mio script GEE impiega così tanto tempo per essere eseguito?
  4. Set di dati di grandi dimensioni e calcoli complessi possono rallentare l'esecuzione. Utilizzo reduce() E clip() limitare il trattamento alle aree rilevanti.
  5. Posso ridurre il numero di immagini elaborate in GEE?
  6. Sì, facendo domanda filter() per la copertura nuvolosa e filterDate() concentrarsi su periodi specifici.
  7. Come posso semplificare i calcoli degli indici nel mio script?
  8. Usa una funzione come addBands() per semplificare l'aggiunta di più indici (ad esempio, NDVI, NDWI) in un unico passaggio.
  9. È possibile visualizzare solo gli strati essenziali?
  10. Sì, disabilita i livelli non necessari e utilizza i parametri di visualizzazione semplificati con Map.addLayer() per prestazioni migliori.

Considerazioni finali sull'ottimizzazione degli script GEE

L'ottimizzazione degli script di Google Earth Engine implica la gestione efficiente di set di dati di grandi dimensioni, l'applicazione tempestiva di filtri e la riduzione delle operazioni sui dati non necessarie. Concentrarsi su aree essenziali come il filtraggio in base a data e la posizione possono ridurre significativamente i tempi di elaborazione.

Incorporando funzioni come addBands e utilizzando maschere di soglia per eliminare dati irrilevanti, le prestazioni dello script possono essere ulteriormente migliorate. Queste tecniche possono semplificare l'esecuzione, offrendo risultati più rapidi e un migliore utilizzo della piattaforma Google Earth Engine.

Fonti e riferimenti per l'ottimizzazione degli script di Google Earth Engine
  1. Questo articolo è stato creato utilizzando contenuti basati sulla documentazione ufficiale di Google Earth Engine, che fornisce approfondimenti sulle tecniche di ottimizzazione degli script. Guide di Google Earth Engine
  2. Ulteriori informazioni sono state raccolte dal forum della comunità GEE, offrendo discussioni e soluzioni per migliorare le prestazioni in script complessi. Comunità di Google Earth Engine
  3. Si fa riferimento alle migliori pratiche per la gestione di set di dati di grandi dimensioni dalla letteratura e dai tutorial sul telerilevamento disponibili al seguente collegamento. Osservatorio della Terra della NASA