Optimalisatie van de uitvoeringstijd van Google Earth Engine-scripts
Google Earth Engine (GEE) is een krachtig platform voor het analyseren van grootschalige georuimtelijke gegevens. Gebruikers ondervinden echter vaak problemen met de uitvoeringstijd, zelfs als hun scripts er eenvoudig uitzien. Een script dat enkele minuten in beslag neemt, kan de productiviteit beïnvloeden en inzichten vertragen.
In dit geval heeft een gebruiker een eenvoudig script gemaakt om Sentinel- en Landsat 8-gegevens te verwerken. Ondanks zijn eenvoud duurt het uitvoeren van het script ongeveer 3-5 minuten. Begrijpen waarom dit gebeurt en hoe u het script kunt optimaliseren, is essentieel voor een efficiënte gegevensverwerking.
De prestaties van een GEE-script zijn afhankelijk van verschillende factoren, waaronder de gegevensgrootte, filtering en rekencomplexiteit. Het verkorten van de uitvoeringstijd houdt in dat knelpunten binnen het script worden geïdentificeerd, zoals onnodige bewerkingen of grote datasets die de verwerking vertragen.
Dit artikel onderzoekt de mogelijke oorzaken van trage uitvoeringstijden in GEE en geeft praktische tips voor het optimaliseren van het gegeven script. Door deze strategieën te implementeren kunnen gebruikers de snelheid en prestaties van hun georuimtelijke gegevensanalysetaken aanzienlijk verbeteren.
Commando | Voorbeeld van gebruik |
---|---|
normalizedDifference() | Deze functie wordt gebruikt om indices zoals NDVI, NDWI en NDSI te berekenen door het verschil tussen twee banden te berekenen, gedeeld door hun som. Het is specifiek voor teledetectieanalyse waarbij vegetatie-, water- en sneeuwindexen nodig zijn. |
filterBounds() | Filtert een afbeeldingsverzameling zodat deze alleen afbeeldingen bevat die een bepaalde geometrie doorkruisen. In dit geval beperkt het satellietgegevens tot het gebied rond het gedefinieerde interessante punt, waardoor de verwerking efficiënter wordt door irrelevante gegevens uit te sluiten. |
filterDate() | Met deze opdracht wordt de afbeeldingsverzameling beperkt tot een specifiek datumbereik. Voor ons probleem is het van cruciaal belang om de verschillen tussen dezelfde tijdsperiode voor Sentinel- en Landsat-datasets te analyseren. |
addBands() | Voegt nieuwe berekende banden (zoals NDVI, NDWI en NDSI) toe aan elke afbeelding in de collectie. Dit is essentieel voor het toepassen van meerdere indices op dezelfde beeldcollectie zonder afzonderlijke datasets te creëren. |
unmask() | Vult gemaskeerde pixels met een opgegeven waarde. In ons script wordt het gebruikt om permanente watergebieden te ontmaskeren, zodat gegevens in de hele regio consistent worden verwerkt. |
reduce() | Verkleint een afbeeldingsverzameling met behulp van een opgegeven reducerfunctie, zoals ee.Reducer.percentile(). Hier wordt het gebruikt om het 30e percentiel van pixelwaarden te berekenen, waardoor het genereren van samengestelde beelden wordt geoptimaliseerd. |
clip() | Knipt een afbeelding uit tot aan de grenzen van het opgegeven interessegebied. Dit zorgt ervoor dat alleen gegevens worden verwerkt die relevant zijn voor het gebied, wat de uitvoering versnelt. |
gt() | Dit commando staat voor 'groter dan' en wordt gebruikt om binaire afbeeldingen te maken op basis van een drempelwaarde. In dit geval worden gebieden geïdentificeerd waar meer dan 80% water voorkomt. |
map() | Past een functie toe op elke afbeelding in de verzameling. In ons voorbeeld wordt de functie addIndices toegepast om NDVI, NDWI en NDSI te berekenen voor alle afbeeldingen in de collectie, waardoor de workflow wordt gestroomlijnd. |
Optimalisatie van GEE-scripts voor verbeterde efficiëntie
In het meegeleverde script is het doel satellietbeelden uit twee verschillende bronnen te extraheren en te verwerken: Sentinel en Landsat. De Dankzij het platform hebben gebruikers toegang tot enorme hoeveelheden satellietgegevens en kunnen ze verschillende bewerkingen uitvoeren, zoals filteren, indexeren en visualisatie. Een van de belangrijkste functies die in dit script worden gebruikt, is de functie, die wordt gebruikt om belangrijke indices zoals NDVI, NDWI en NDSI te berekenen. Deze indices zijn cruciaal voor het analyseren van de vegetatie, het water en de sneeuwbedekking in de opgegeven regio. Het script begint met het definiëren van een interessant punt en centreert de kaart daarop met behulp van de opgegeven coördinaten.
Het script past meerdere filters toe, zoals En , om de hoeveelheid gegevens die wordt verwerkt te verminderen, waardoor de uitvoeringstijd wordt verbeterd. Bijvoorbeeld, filtergrenzen() zorgt ervoor dat alleen de beelden die het interessegebied doorkruisen, worden opgenomen filterDatum() beperkt de afbeeldingen tot een specifiek datumbereik. Dit is essentieel voor het verwerken van grote datasets zoals Sentinel- en Landsat-beelden, omdat het de rekenlast minimaliseert. Bovendien is de voor bewolking helpt bij het verwijderen van beelden met te veel bewolking, waardoor analyses van betere kwaliteit worden gegarandeerd.
Een belangrijk aspect van het script is de functie, die berekende indices (NDVI, NDWI, NDSI) aan de beelden toevoegt, waardoor ze toegankelijk worden voor verdere analyse. Het script bevat ook een permanent watermasker, waarbij gebruik wordt gemaakt van gegevens uit de JRC Global Surface Water-dataset. Het watermasker helpt bij het uitsluiten van gebieden met een hoog watergehalte (meer dan 80%), wat anders de resultaten van de vegetatie- en sneeuwanalyse zou kunnen vertekenen. Dit gebeurt via de En functies, waarmee het script gebieden kan isoleren op basis van pixelwaarden.
Ten slotte gebruikt het script de functie met de percentielreductie om een samengesteld beeld te genereren dat het 30e percentiel van de geselecteerde pixelwaarden vertegenwoordigt. Dit samengestelde beeld wordt vervolgens op het interessegebied geknipt en op de kaart gevisualiseerd met behulp van de functie. De visuele parameters zijn gedefinieerd voor zowel de Sentinel- als de Landsat-composieten, zodat de gebruiker ze met de juiste kleurinstellingen kan bekijken. Door verschillende beeldverwerkingsstappen te combineren, zoals filteren, maskeren en het genereren van composieten, biedt dit script een efficiënte manier om satellietbeelden te analyseren, hoewel verdere optimalisatie kan worden toegepast om de uitvoeringstijden te verkorten.
Optimalisatie van de uitvoering van Google Earth Engine-scripts voor snellere verwerking
Deze oplossing maakt gebruik van Google Earth Engine (GEE) met de nadruk op het optimaliseren van de prestaties door de ophaaltijd van gegevens te verkorten en de bewerkingen te vereenvoudigen. JavaScript wordt gebruikt als scripttaal.
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));
Gebruik van efficiënte gegevensverwerking voor GEE om scriptvertragingen te minimaliseren
Deze oplossing integreert geoptimaliseerde gegevensverwerking door indicesberekeningen en drempels te combineren. JavaScript wordt toegepast voor de verwerking van 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);
Verbetering van de efficiëntie van teledetectiescripts
Een belangrijke overweging bij het werken met Google Earth Engine-scripts (GEE) is ervoor te zorgen dat bewerkingen efficiënt worden afgehandeld. Hoewel het gebruik van grote datasets zoals Sentinel en Landsat gebruikelijk is bij omgevingsanalyses, kan de enorme hoeveelheid gegevens de uitvoering van scripts vertragen. Eén manier om de prestaties te verbeteren is ervoor te zorgen dat alleen de noodzakelijke gegevens worden verwerkt. Met behulp van commando's zoals En minimaliseert de grootte van de dataset, wat helpt bij het stroomlijnen van berekeningen. Het selecteren van specifieke datumbereiken en geografische regio's kan de uitvoeringstijd aanzienlijk verkorten.
Een ander aspect dat van invloed is op de prestaties van GEE-scripts is de manier waarop de gegevens worden verwerkt. In het scriptvoorbeeld wordt een functie gebruikt om belangrijke indices zoals NDVI, NDWI en NDSI te berekenen. Deze indices worden als banden aan de beeldcollecties toegevoegd, wat een grondigere analyse mogelijk maakt. Een veelgemaakte fout is echter het toepassen van dergelijke functies op een volledige dataset zonder eerst te filteren. Het is van cruciaal belang om dergelijke bewerkingen na het filteren toe te passen om onnodige berekeningen op irrelevante gegevens te voorkomen.
Visualisatie is een ander element van het script dat kan worden geoptimaliseerd. Het toevoegen van te veel lagen of complexe visualisaties kan de verwerkingstijd vertragen. Het script gebruikt vooraf gedefinieerde visuele parameters om de composieten weer te geven, maar de prestaties kunnen worden verbeterd door bepaalde lagen uit te schakelen, tenzij deze expliciet nodig zijn. Dit helpt om het script lichtgewicht te houden terwijl de functionaliteit ervan behouden blijft. Gebruiken commando's zorgen er ook voor dat alleen het benodigde gebied wordt weergegeven, waardoor de algehele verwerkingslast wordt verminderd.
- Hoe verbeter ik de prestaties van mijn GEE-scripts?
- Optimaliseer het gebruik van , en verklein de grootte van uw gegevensset voordat deze wordt verwerkt.
- Waarom duurt het zo lang voordat mijn GEE-script wordt uitgevoerd?
- Grote datasets en complexe berekeningen kunnen de uitvoering vertragen. Gebruik En om de verwerking te beperken tot relevante gebieden.
- Kan ik het aantal afbeeldingen dat in GEE wordt verwerkt, verminderen?
- Ja, door te solliciteren voor bewolking en om zich te concentreren op specifieke periodes.
- Hoe kan ik indexberekeningen in mijn script vereenvoudigen?
- Gebruik een functie als om het toevoegen van meerdere indices (bijvoorbeeld NDVI, NDWI) in één stap te stroomlijnen.
- Is het mogelijk om alleen de essentiële lagen te visualiseren?
- Ja, schakel onnodige lagen uit en gebruik vereenvoudigde visualisatieparameters met voor betere prestaties.
Bij het optimaliseren van Google Earth Engine-scripts gaat het om het efficiënt omgaan met grote datasets, het vroegtijdig toepassen van filters en het terugdringen van onnodige gegevensbewerkingen. Focussen op essentiële gebieden, zoals filteren op en locatie kunnen de verwerkingstijd aanzienlijk verkorten.
Door functies op te nemen zoals en door drempelmaskers te gebruiken om irrelevante gegevens te elimineren, kunnen de scriptprestaties verder worden verbeterd. Deze technieken kunnen de uitvoering stroomlijnen, waardoor snellere resultaten en een beter gebruik van het Google Earth Engine-platform worden geboden.
- Dit artikel is gemaakt met inhoud die is gebaseerd op de officiële documentatie van Google Earth Engine, die inzicht biedt in technieken voor scriptoptimalisatie. Handleidingen voor Google Earth Engines
- Er is aanvullende informatie verzameld van het GEE-communityforum, dat discussies en oplossingen biedt voor het verbeteren van de prestaties in complexe scripts. Google Earth Engine-gemeenschap
- Er wordt verwezen naar de beste praktijken voor het omgaan met grote datasets in de literatuur over teledetectie en in tutorials die beschikbaar zijn via de volgende link. NASA-aardobservatorium