Sådan får du din Google Earth Engine JavaScript til at køre hurtigere

Sådan får du din Google Earth Engine JavaScript til at køre hurtigere
Sådan får du din Google Earth Engine JavaScript til at køre hurtigere

Optimering af eksekveringstiden for Google Earth Engine Scripts

Google Earth Engine (GEE) er en kraftfuld platform til at analysere store geospatiale data. Brugere støder dog ofte på problemer med udførelsestiden, selv når deres scripts ser grundlæggende ud. Et script, der tager flere minutter at køre, kan påvirke produktiviteten og forsinke indsigt.

I dette tilfælde har en bruger oprettet et simpelt script til at behandle Sentinel- og Landsat 8-data. På trods af sin enkelhed tager scriptet omkring 3-5 minutter at udføre. At forstå, hvorfor dette sker, og hvordan man optimerer scriptet er afgørende for effektiv databehandling.

Ydeevnen af ​​et GEE-script afhænger af flere faktorer, herunder datastørrelse, filtrering og beregningskompleksitet. Reduktion af eksekveringstiden involverer at identificere flaskehalse i scriptet, såsom unødvendige operationer eller store datasæt, der bremser behandlingen.

Denne artikel vil undersøge de mulige årsager til langsomme eksekveringstider i GEE og give praktiske tips til optimering af det givne script. Ved at implementere disse strategier kan brugere forbedre hastigheden og ydeevnen af ​​deres geospatiale dataanalyseopgaver markant.

Kommando Eksempel på brug
normalizedDifference() Denne funktion bruges til at beregne indekser såsom NDVI, NDWI og NDSI ved at beregne forskellen mellem to bånd divideret med deres sum. Det er specifikt for fjernmålingsanalyse, hvor der er behov for vegetations-, vand- og sneindekser.
filterBounds() Filtrerer en billedsamling, så den kun inkluderer billeder, der skærer en given geometri. I dette tilfælde begrænser den satellitdata til området omkring det definerede interessepunkt, hvilket gør behandlingen mere effektiv ved at udelukke irrelevante data.
filterDate() Denne kommando begrænser billedsamlingen til et bestemt datointerval. For vores problem er det afgørende at analysere forskellene mellem den samme tidsperiode for Sentinel- og Landsat-datasæt.
addBands() Tilføjer nye beregnede bånd (som NDVI, NDWI og NDSI) til hvert billede i samlingen. Dette er vigtigt for at anvende flere indekser til den samme billedsamling uden at oprette separate datasæt.
unmask() Udfylder maskerede pixels med en specificeret værdi. I vores script bruges det til at afsløre permanente vandområder, hvilket sikrer, at data behandles konsekvent på tværs af hele regionen.
reduce() Reducerer en billedsamling ved hjælp af en specificeret reduceringsfunktion, såsom ee.Reducer.percentile(). Her bruges den til at beregne den 30. percentil af pixelværdier, hvilket optimerer den sammensatte billedgenerering.
clip() Klipper et billede til grænserne for det angivne område af interesse. Dette sikrer, at kun data, der er relevante for området, behandles, hvilket fremskynder eksekveringen.
gt() Denne kommando står for 'større end' og bruges til at skabe binære billeder baseret på en tærskel. I dette tilfælde identificerer den områder med vandforekomst på mere end 80 %.
map() Anvender en funktion til hvert billede i samlingen. I vores eksempel anvender den addIndices-funktionen til at beregne NDVI, NDWI og NDSI på tværs af alle billeder i samlingen, hvilket strømliner arbejdsgangen.

Optimering af GEE-scripts for forbedret effektivitet

I det medfølgende script er målet at udtrække og behandle satellitbilleder fra to forskellige kilder: Sentinel og Landsat. De Google Earth Engine (GEE) platform giver brugerne adgang til enorme mængder af satellitdata og anvender forskellige operationer såsom filtrering, indeksering og visualisering. En af de vigtigste funktioner, der bruges i dette script, er normalizedDifference() funktion, som bruges til at beregne vigtige indekser som NDVI, NDWI og NDSI. Disse indekser er afgørende for at analysere vegetation, vand og snedække i det specificerede område. Scriptet starter med at definere et interessepunkt og centrerer kortet på det ved hjælp af de angivne koordinater.

Scriptet anvender flere filtre, som f.eks filterDate() og filterBounds(), for at reducere mængden af ​​data, der behandles, og dermed forbedre eksekveringstiden. f.eks. filterBounds() sikrer, at kun de billeder, der krydser interesseområdet, medtages, mens filterDate() begrænser billederne til et bestemt datointerval. Dette er vigtigt for at behandle store datasæt som Sentinel- og Landsat-billeder, da det minimerer beregningsbelastningen. Derudover filter for skydækning hjælper med at kassere billeder, der har for meget sky, hvilket sikrer analyser af bedre kvalitet.

Et vigtigt aspekt af scriptet er addBands() funktion, som tilføjer beregnede indekser (NDVI, NDWI, NDSI) til billederne, hvilket gør dem tilgængelige for yderligere analyse. Scriptet inkorporerer også en permanent vandmaske ved hjælp af data fra JRC Global Surface Water-datasættet. Vandmasken hjælper med at udelukke områder med høj forekomst af vand (større end 80%), som ellers kunne skævvride resultaterne af vegetations- og sneanalysen. Dette gøres gennem gt() og afmaske() funktioner, som gør det muligt for scriptet at isolere områder baseret på pixelværdier.

Endelig bruger scriptet reducere() funktion med percentilreduktionen for at generere et sammensat billede, der repræsenterer den 30. percentil af de valgte pixelværdier. Dette sammensatte billede klippes derefter til området af interesse og visualiseres på kortet ved hjælp af klip() fungere. De visuelle parametre er defineret for både Sentinel- og Landsat-kompositterne, hvilket giver brugeren mulighed for at se dem med passende farveindstillinger. Ved at kombinere forskellige billedbehandlingstrin som filtrering, maskering og kompositgenerering giver dette script en effektiv måde at analysere satellitbilleder på, selvom yderligere optimering kunne anvendes for at reducere eksekveringstiden.

Optimering af Google Earth Engine Script-udførelse for hurtigere behandling

Denne løsning bruger Google Earth Engine (GEE) med vægt på at optimere ydeevnen ved at reducere datahentningstider og forenkle operationer. JavaScript bruges som scriptsprog.

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));

Brug af effektiv databehandling til GEE for at minimere scriptforsinkelser

Denne løsning integrerer optimeret datahåndtering ved at kombinere indeksberegninger og tærskler. JavaScript anvendes til Google Earth Engine-behandling.

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);

Forbedring af effektiviteten af ​​fjernmålingsscripts

En vigtig overvejelse, når du arbejder med Google Earth Engine (GEE) scripts, er at sikre, at operationer håndteres effektivt. Mens brugen af ​​store datasæt såsom Sentinel og Landsat er almindelig i miljøanalyser, kan den store mængde data bremse scriptudførelsen. En metode til at forbedre ydeevnen er at sikre, at kun de nødvendige data behandles. Brug af kommandoer som filterBounds() og filterDate() minimerer datasætstørrelsen, hvilket hjælper med at strømline beregninger. Valg af specifikke datointervaller og geografiske områder kan reducere eksekveringstiden betydeligt.

Et andet aspekt, der påvirker GEE-scriptets ydeevne, er, hvordan dataene behandles. Scripteksemplet bruger en funktion til at beregne vigtige indekser som NDVI, NDWI og NDSI. Disse indekser tilføjes som bånd til billedsamlingerne, hvilket giver mulighed for en mere grundig analyse. En almindelig fejl er dog at anvende sådanne funktioner på et helt datasæt uden først at filtrere. Det er afgørende at anvende sådanne operationer efter filtrering for at undgå unødvendige beregninger på irrelevante data.

Visualisering er et andet element i scriptet, der kan optimeres. Tilføjelse af for mange lag eller komplekse visualiseringer kan sænke behandlingstiden. Scriptet bruger foruddefinerede visuelle parametre til at gengive kompositterne, men ydeevnen kan forbedres ved at deaktivere visse lag, medmindre de er eksplicit nødvendige. Dette hjælper med at holde scriptet let og samtidig bibeholde dets funktionalitet. Bruger klip() kommandoer sikrer også, at kun det nødvendige område gengives, hvilket reducerer den samlede behandlingsbyrde.

Ofte stillede spørgsmål om optimering af Google Earth Engine-scripts

  1. Hvordan forbedrer jeg ydeevnen af ​​mine GEE-scripts?
  2. Optimer brugen af filterDate(), filterBounds(), og reducere størrelsen af ​​dit datasæt før behandling.
  3. Hvorfor tager mit GEE-script så lang tid at køre?
  4. Store datasæt og komplekse beregninger kan bremse eksekveringen. Bruge reduce() og clip() at begrænse behandlingen til relevante områder.
  5. Kan jeg reducere antallet af billeder, der behandles i GEE?
  6. Ja, ved at ansøge filter() til skydække og filterDate() at fokusere på bestemte perioder.
  7. Hvordan kan jeg forenkle indeksberegninger i mit script?
  8. Brug en funktion som f.eks addBands() at strømline tilføjelse af flere indekser (f.eks. NDVI, NDWI) i ét trin.
  9. Er det muligt kun at visualisere de væsentlige lag?
  10. Ja, deaktiver unødvendige lag og brug forenklede visualiseringsparametre med Map.addLayer() for bedre ydeevne.

Sidste tanker om optimering af GEE-scripts

Optimering af Google Earth Engine-scripts involverer effektiv håndtering af store datasæt, tidlig anvendelse af filtre og reduktion af unødvendige dataoperationer. Fokus på væsentlige områder som at filtrere forbi dato og placering kan reducere behandlingstiden betydeligt.

Ved at inkorporere funktioner som f.eks addBands og ved at bruge tærskelmasker til at eliminere irrelevante data, kan scriptets ydeevne forbedres yderligere. Disse teknikker kan strømline udførelsen og tilbyde hurtigere resultater og bedre udnyttelse af Google Earth Engine-platformen.

Kilder og referencer til optimering af Google Earth Engine-scripts
  1. Denne artikel blev oprettet ved hjælp af indhold baseret på officiel Google Earth Engine-dokumentation, som giver indsigt i scriptoptimeringsteknikker. Google Earth Engine Guides
  2. Yderligere oplysninger blev indsamlet fra GEE-fællesskabsforumet, der tilbyder diskussioner og løsninger til forbedring af ydeevnen i komplekse scripts. Google Earth Engine-fællesskab
  3. Bedste praksis for håndtering af store datasæt blev refereret fra fjernmålingslitteratur og tutorials, der er tilgængelige på følgende link. NASA Jordobservatoriet