Optimizarea timpului de execuție al scripturilor Google Earth Engine
Google Earth Engine (GEE) este o platformă puternică pentru analiza datelor geospațiale la scară largă. Cu toate acestea, utilizatorii întâmpină adesea probleme cu timpul de execuție, chiar și atunci când scripturile lor par simple. Un script care durează câteva minute pentru a rula poate afecta productivitatea și întârzia informațiile.
În acest caz, un utilizator a creat un script simplu pentru a procesa datele Sentinel și Landsat 8. În ciuda simplității sale, scriptul durează aproximativ 3-5 minute pentru a se executa. Înțelegerea de ce se întâmplă acest lucru și cum să optimizați scriptul este esențială pentru o procesare eficientă a datelor.
Performanța unui script GEE depinde de mai mulți factori, inclusiv dimensiunea datelor, filtrarea și complexitatea de calcul. Reducerea timpului de execuție implică identificarea blocajelor în cadrul scriptului, cum ar fi operațiuni inutile sau seturi mari de date care încetinesc procesarea.
Acest articol va explora posibilele cauze ale timpilor de execuție lenți în GEE și va oferi sfaturi practice pentru optimizarea scriptului dat. Prin implementarea acestor strategii, utilizatorii pot îmbunătăți semnificativ viteza și performanța sarcinilor lor de analiză a datelor geospațiale.
Comanda | Exemplu de utilizare |
---|---|
normalizedDifference() | Această funcție este utilizată pentru a calcula indici precum NDVI, NDWI și NDSI prin calculul diferenței dintre două benzi, împărțită la suma lor. Este specific analizei de teledetecție unde sunt necesari indici de vegetație, apă și zăpadă. |
filterBounds() | Filtrează o colecție de imagini pentru a include numai imagini care intersectează o anumită geometrie. În acest caz, restricționează datele satelitare în zona din jurul punctului de interes definit, făcând procesarea mai eficientă prin excluderea datelor irelevante. |
filterDate() | Această comandă limitează colecția de imagini la un anumit interval de date. Pentru problema noastră, este crucial să analizăm diferențele dintre aceeași perioadă de timp pentru seturile de date Sentinel și Landsat. |
addBands() | Adaugă noi benzi calculate (cum ar fi NDVI, NDWI și NDSI) la fiecare imagine din colecție. Acest lucru este esențial pentru aplicarea mai multor indici la aceeași colecție de imagini fără a crea seturi de date separate. |
unmask() | Umple pixelii mascați cu o valoare specificată. În scriptul nostru, este folosit pentru a demasca zonele de apă permanente, asigurându-se că datele sunt procesate în mod constant în întreaga regiune. |
reduce() | Reduce o colecție de imagini utilizând o funcție de reducere specificată, cum ar fi ee.Reducer.percentile(). Aici, este folosit pentru a calcula a 30-a percentila a valorilor pixelilor, optimizând generarea de imagini compozite. |
clip() | Decupează o imagine la limitele regiunii de interes specificate. Acest lucru asigură că sunt procesate numai datele relevante pentru zonă, ceea ce accelerează execuția. |
gt() | Această comandă înseamnă „mai mare decât” și este folosită pentru a crea imagini binare bazate pe un prag. În acest caz, identifică zonele cu prezența apei mai mare de 80%. |
map() | Aplică o funcție fiecărei imagini din colecție. În exemplul nostru, aplică funcția addIndices pentru a calcula NDVI, NDWI și NDSI în toate imaginile din colecție, simplificând fluxul de lucru. |
Optimizarea scripturilor GEE pentru o eficiență îmbunătățită
În scenariul furnizat, scopul este extragerea și procesarea imaginilor satelitare din două surse diferite: Sentinel și Landsat. The platforma permite utilizatorilor să acceseze cantități mari de date satelitare și să aplice diverse operațiuni, cum ar fi filtrarea, indexarea și vizualizarea. Una dintre caracteristicile cheie utilizate în acest script este funcția, care este folosită pentru a calcula indici importanți precum NDVI, NDWI și NDSI. Acești indici sunt cruciali pentru analiza vegetației, apei și stratului de zăpadă din regiunea specificată. Scriptul începe prin definirea unui punct de interes și centrează harta pe acesta folosind coordonatele furnizate.
Scriptul aplică mai multe filtre, cum ar fi şi , pentru a reduce cantitatea de date procesate, îmbunătățind astfel timpul de execuție. De exemplu, filterBounds() se asigură că sunt incluse doar imaginile care intersectează zona de interes, în timp ce filterDate() limitează imaginile la un anumit interval de date. Acest lucru este esențial pentru procesarea seturi de date mari, cum ar fi imaginile Sentinel și Landsat, deoarece minimizează sarcina de calcul. În plus, cel pentru acoperirea în cloud ajută la eliminarea imaginilor care au prea mult cloud, asigurând o analiză de mai bună calitate.
Un aspect important al scenariului este funcție, care adaugă indici calculați (NDVI, NDWI, NDSI) imaginilor, făcându-le accesibile pentru analize ulterioare. Scriptul include, de asemenea, o mască de apă permanentă folosind date din setul de date JRC Global Surface Water. Masca de apă ajută la excluderea zonelor cu o apariție mare a apei (mai mare de 80%), care altfel ar putea denatura rezultatele analizei vegetației și zăpezii. Acest lucru se face prin intermediul şi funcții, care permit scriptului să izoleze zone pe baza valorilor pixelilor.
În cele din urmă, scriptul folosește funcția cu reductorul de percentile pentru a genera o imagine compozită care reprezintă a 30-a percentila a valorilor pixelilor selectați. Această imagine compozită este apoi tăiată în regiunea de interes și vizualizată pe hartă utilizând funcţie. Parametrii vizuali sunt definiți atât pentru compozitele Sentinel, cât și pentru Landsat, permițând utilizatorului să le vizualizeze cu setări de culoare adecvate. Combinând diferiți pași de procesare a imaginii, cum ar fi filtrarea, mascarea și generarea compozitelor, acest script oferă o modalitate eficientă de a analiza imaginile din satelit, deși s-ar putea aplica o optimizare suplimentară pentru a reduce timpii de execuție.
Optimizarea execuției scripturilor Google Earth Engine pentru o procesare mai rapidă
Această soluție folosește Google Earth Engine (GEE), cu accent pe optimizarea performanței prin reducerea timpilor de recuperare a datelor și simplificarea operațiunilor. JavaScript este folosit ca limbaj de 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));
Utilizarea procesării eficiente a datelor pentru GEE pentru a minimiza întârzierile de script
Această soluție integrează gestionarea optimizată a datelor prin combinarea calculelor indicilor și a pragurilor. JavaScript este aplicat pentru procesarea 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);
Îmbunătățirea eficienței scripturilor de teledetecție
Un aspect cheie atunci când lucrați cu scripturi Google Earth Engine (GEE) este asigurarea faptului că operațiunile sunt gestionate eficient. În timp ce utilizarea unor seturi de date mari, cum ar fi Sentinel și Landsat, este obișnuită în analiza mediului, volumul mare de date poate încetini execuția scriptului. O metodă de îmbunătățire a performanței este să vă asigurați că sunt procesate numai datele necesare. Folosind comenzi precum şi minimizează dimensiunea setului de date, ceea ce ajută la eficientizarea calculelor. Selectarea anumitor intervale de date și regiuni geografice poate reduce semnificativ timpul de execuție.
Un alt aspect care afectează performanța scriptului GEE este modul în care sunt procesate datele. Exemplul de script folosește o funcție pentru a calcula indici importanți precum NDVI, NDWI și NDSI. Acești indici sunt adăugați ca benzi colecțiilor de imagini, ceea ce permite o analiză mai amănunțită. Cu toate acestea, o greșeală comună este aplicarea unor astfel de funcții la un întreg set de date fără a filtra mai întâi. Este esențial să aplicați astfel de operațiuni după filtrare pentru a evita calculele inutile pe date irelevante.
Vizualizarea este un alt element al scriptului care poate fi optimizat. Adăugarea de prea multe straturi sau vizualizări complexe poate bloca timpul de procesare. Scriptul folosește parametri vizuali predefiniți pentru a reda compozitele, dar performanța poate fi îmbunătățită prin dezactivarea anumitor straturi, dacă nu sunt necesare în mod explicit. Acest lucru ajută la menținerea ușoară a scriptului, menținând în același timp funcționalitatea acestuia. Folosind comenzile asigură, de asemenea, că este redată doar zona necesară, reducând sarcina globală de procesare.
- Cum pot îmbunătăți performanța scripturilor mele GEE?
- Optimizați utilizarea , și reduceți dimensiunea setului de date înainte de procesare.
- De ce rulează atât de mult timp scriptul meu GEE?
- Seturile mari de date și calculele complexe pot încetini execuția. Utilizare şi pentru a limita prelucrarea la zonele relevante.
- Pot reduce numărul de imagini procesate în GEE?
- Da, prin aplicare pentru acoperirea în nori și să se concentreze pe perioade specifice.
- Cum pot simplifica calculele indexului în scriptul meu?
- Utilizați o funcție ca pentru a simplifica adăugarea mai multor indici (de exemplu, NDVI, NDWI) într-un singur pas.
- Este posibil să vizualizați doar straturile esențiale?
- Da, dezactivați straturile inutile și utilizați parametrii de vizualizare simplificați cu pentru o performanță mai bună.
Optimizarea scripturilor Google Earth Engine implică gestionarea eficientă a seturilor de date mari, aplicarea devreme a filtrelor și reducerea operațiunilor inutile de date. Concentrarea pe domenii esențiale, cum ar fi filtrarea după și locația poate reduce semnificativ timpul de procesare.
Prin încorporarea de funcții precum și folosind măști de prag pentru a elimina datele irelevante, performanța scriptului poate fi îmbunătățită în continuare. Aceste tehnici pot eficientiza execuția, oferind rezultate mai rapide și o utilizare mai bună a platformei Google Earth Engine.
- Acest articol a fost creat folosind conținut bazat pe documentația oficială Google Earth Engine, care oferă informații despre tehnicile de optimizare a scripturilor. Ghiduri Google Earth Engine
- S-au adunat informații suplimentare de pe forumul comunității GEE, oferind discuții și soluții pentru îmbunătățirea performanței în scripturi complexe. Comunitatea Google Earth Engine
- Cele mai bune practici pentru manipularea seturi de date mari au fost menționate din literatura de teledetecție și tutoriale disponibile la următorul link. Observatorul Pământului NASA