Hur du får din Google Earth Engine JavaScript att köra snabbare

Optimization

Optimera exekveringstiden för Google Earth Engine-skript

Google Earth Engine (GEE) är en kraftfull plattform för att analysera storskalig geospatial data. Användare stöter dock ofta på problem med exekveringstiden, även när deras skript verkar grundläggande. Ett skript som tar flera minuter att köra kan påverka produktiviteten och försena insikter.

I det här fallet har en användare skapat ett enkelt skript för att bearbeta Sentinel- och Landsat 8-data. Trots sin enkelhet tar skriptet cirka 3-5 minuter att köra. Att förstå varför detta händer och hur man optimerar skriptet är avgörande för effektiv databehandling.

Prestandan för ett GEE-skript beror på flera faktorer, inklusive datastorlek, filtrering och beräkningskomplexitet. Att minska exekveringstiden innebär att identifiera flaskhalsar i skriptet, såsom onödiga operationer eller stora datamängder som saktar ner bearbetningen.

Den här artikeln kommer att utforska de möjliga orsakerna till långsamma körtider i GEE och ge praktiska tips för att optimera det givna skriptet. Genom att implementera dessa strategier kan användare avsevärt förbättra hastigheten och prestandan för sina geospatiala dataanalysuppgifter.

Kommando Exempel på användning
normalizedDifference() Denna funktion används för att beräkna index som NDVI, NDWI och NDSI genom att beräkna skillnaden mellan två band, dividerat med deras summa. Det är specifikt för fjärranalysanalys där vegetations-, vatten- och snöindex behövs.
filterBounds() Filtrerar en bildsamling så att den endast inkluderar bilder som skär en given geometri. I det här fallet begränsar den satellitdata till området runt den definierade intressepunkten, vilket gör behandlingen mer effektiv genom att utesluta irrelevant data.
filterDate() Detta kommando begränsar bildsamlingen till ett specifikt datumintervall. För vårt problem är det avgörande att analysera skillnaderna mellan samma tidsperiod för Sentinel- och Landsat-datauppsättningar.
addBands() Lägger till nya beräknade band (som NDVI, NDWI och NDSI) till varje bild i samlingen. Detta är viktigt för att tillämpa flera index på samma bildsamling utan att skapa separata datamängder.
unmask() Fyller maskerade pixlar med ett angivet värde. I vårt skript används det för att avslöja permanenta vattenområden, vilket säkerställer att data behandlas konsekvent över hela regionen.
reduce() Reducerar en bildsamling med en specificerad reduceringsfunktion, som ee.Reducer.percentile(). Här används den för att beräkna den 30:e percentilen av pixelvärden, vilket optimerar sammansatt bildgenerering.
clip() Klipper en bild till gränserna för den angivna regionen av intresse. Detta säkerställer att endast data som är relevant för området bearbetas, vilket påskyndar exekveringen.
gt() Detta kommando står för "större än" och används för att skapa binära bilder baserat på en tröskel. I det här fallet identifierar den områden med vattenförekomst som är större än 80 %.
map() Tillämpar en funktion på varje bild i samlingen. I vårt exempel använder den addIndices-funktionen för att beräkna NDVI, NDWI och NDSI över alla bilder i samlingen, vilket effektiviserar arbetsflödet.

Optimera GEE-skript för förbättrad effektivitet

I det medföljande skriptet är målet att extrahera och bearbeta satellitbilder från två olika källor: Sentinel och Landsat. De plattformen tillåter användare att komma åt stora mängder satellitdata och använda olika operationer som filtrering, indexering och visualisering. En av nyckelfunktionerna som används i det här skriptet är funktion, som används för att beräkna viktiga index som NDVI, NDWI och NDSI. Dessa index är avgörande för att analysera vegetation, vatten och snötäcke i den angivna regionen. Skriptet börjar med att definiera en intressant plats och centrerar kartan på den med hjälp av de angivna koordinaterna.

Skriptet tillämpar flera filter, som t.ex och , för att minska mängden data som bearbetas, vilket förbättrar exekveringstiden. Till exempel, filterBounds() säkerställer att endast bilderna som skär det intressanta området ingår, medan filterDate() begränsar bilderna till ett specifikt datumintervall. Detta är viktigt för att bearbeta stora datamängder som Sentinel och Landsat-bilder, eftersom det minimerar beräkningsbelastningen. Dessutom har för molntäckning hjälper till att kassera bilder som har för mycket moln, vilket säkerställer analys av bättre kvalitet.

En viktig aspekt av manuset är funktion, som lägger till beräknade index (NDVI, NDWI, NDSI) till bilderna, vilket gör dem tillgängliga för vidare analys. Skriptet innehåller också en permanent vattenmask som använder data från JRC Global Surface Water dataset. Vattenmasken hjälper till att utesluta områden med hög förekomst av vatten (större än 80%), vilket annars skulle kunna förvränga resultaten av vegetations- och snöanalysen. Detta görs genom och funktioner, som gör att skriptet kan isolera områden baserat på pixelvärden.

Slutligen använder skriptet funktion med percentilreduceraren för att generera en sammansatt bild som representerar den 30:e percentilen av de valda pixelvärdena. Denna sammansatta bild klipps sedan till området av intresse och visualiseras på kartan med hjälp av fungera. De visuella parametrarna är definierade för både Sentinel- och Landsat-kompositerna, vilket gör att användaren kan se dem med lämpliga färginställningar. Genom att kombinera olika bildbehandlingssteg som filtrering, maskering och sammansatt generering, ger detta skript ett effektivt sätt att analysera satellitbilder, även om ytterligare optimering skulle kunna tillämpas för att minska exekveringstiden.

Optimering av Google Earth Engine-skriptkörning för snabbare bearbetning

Den här lösningen använder Google Earth Engine (GEE) med tonvikt på att optimera prestanda genom att minska datahämtningstiderna och förenkla driften. JavaScript används som skriptspråk.

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

Använda effektiv databearbetning för GEE för att minimera skriptfördröjningar

Denna lösning integrerar optimerad datahantering genom att kombinera indexberäkningar och trösklar. JavaScript används för bearbetning av 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);

Förbättring av effektiviteten för fjärranalysskript

En viktig faktor när du arbetar med Google Earth Engine-skript (GEE) är att se till att operationerna hanteras effektivt. Även om användningen av stora datamängder som Sentinel och Landsat är vanligt i miljöanalyser, kan den stora mängden data bromsa skriptexekveringen. En metod för att förbättra prestandan är att säkerställa att endast nödvändig data bearbetas. Använda kommandon som och minimerar datauppsättningsstorleken, vilket hjälper till att effektivisera beräkningar. Att välja specifika datumintervall och geografiska regioner kan minska körningstiden avsevärt.

En annan aspekt som påverkar GEE-skriptprestanda är hur data bearbetas. Skriptexemplet använder en funktion för att beräkna viktiga index som NDVI, NDWI och NDSI. Dessa index läggs till som band till bildsamlingarna, vilket möjliggör en mer grundlig analys. Ett vanligt misstag är dock att tillämpa sådana funktioner på en hel datauppsättning utan att först filtrera. Det är avgörande att tillämpa sådana operationer efter filtrering för att undvika onödiga beräkningar av irrelevanta data.

Visualisering är en annan del av skriptet som kan optimeras. Att lägga till för många lager eller komplexa visualiseringar kan försämra bearbetningstiden. Skriptet använder fördefinierade visuella parametrar för att rendera kompositerna, men prestandan kan förbättras genom att inaktivera vissa lager om de inte uttryckligen behövs. Detta hjälper till att hålla skriptet lätt samtidigt som det behåller dess funktionalitet. Använder kommandon säkerställer också att endast det nödvändiga området återges, vilket minskar den totala bearbetningsbördan.

  1. Hur förbättrar jag prestandan för mina GEE-skript?
  2. Optimera användningen av , , och minska storleken på din datauppsättning före bearbetning.
  3. Varför tar mitt GEE-skript så lång tid att köra?
  4. Stora datamängder och komplexa beräkningar kan sakta ner exekvering. Använda och att begränsa behandlingen till relevanta områden.
  5. Kan jag minska antalet bilder som bearbetas i GEE?
  6. Ja, genom att ansöka för molntäckning och att fokusera på specifika perioder.
  7. Hur kan jag förenkla indexberäkningar i mitt skript?
  8. Använd en funktion som för att effektivisera att lägga till flera index (t.ex. NDVI, NDWI) i ett steg.
  9. Är det möjligt att endast visualisera de väsentliga lagren?
  10. Ja, inaktivera onödiga lager och använd förenklade visualiseringsparametrar med för bättre prestanda.

Att optimera Google Earth Engine-skript innebär att effektivt hantera stora datamängder, använda filter tidigt och minska onödiga dataoperationer. Fokusera på viktiga områden som att filtrera förbi och plats kan minska handläggningstiden avsevärt.

Genom att införliva funktioner som t.ex och genom att använda tröskelmasker för att eliminera irrelevant data kan skriptprestanda förbättras ytterligare. Dessa tekniker kan effektivisera utförandet, ge snabbare resultat och bättre utnyttjande av Google Earth Engine-plattformen.

  1. Den här artikeln skapades med hjälp av innehåll baserat på officiell Google Earth Engine-dokumentation, som ger insikter i skriptoptimeringstekniker. Google Earth Engine Guides
  2. Ytterligare information samlades in från GEE-gemenskapsforumet, som erbjuder diskussioner och lösningar för att förbättra prestanda i komplexa skript. Google Earth Engine Community
  3. Bästa praxis för hantering av stora datamängder refererades från fjärranalyslitteratur och handledningar tillgängliga på följande länk. NASA Earth Observatory