Optimierung der Ausführungszeit von Google Earth Engine-Skripts
Google Earth Engine (GEE) ist eine leistungsstarke Plattform zur Analyse umfangreicher Geodaten. Allerdings stoßen Benutzer oft auf Probleme mit der Ausführungszeit, selbst wenn ihre Skripte einfach erscheinen. Ein Skript, dessen Ausführung mehrere Minuten dauert, kann die Produktivität beeinträchtigen und Erkenntnisse verzögern.
In diesem Fall hat ein Benutzer ein einfaches Skript zur Verarbeitung von Sentinel- und Landsat 8-Daten erstellt. Trotz seiner Einfachheit dauert die Ausführung des Skripts etwa 3-5 Minuten. Für eine effiziente Datenverarbeitung ist es wichtig zu verstehen, warum dies geschieht und wie das Skript optimiert werden kann.
Die Leistung eines GEE-Skripts hängt von mehreren Faktoren ab, darunter Datengröße, Filterung und Rechenkomplexität. Um die Ausführungszeit zu verkürzen, müssen Engpässe innerhalb des Skripts identifiziert werden, z. B. unnötige Vorgänge oder große Datensätze, die die Verarbeitung verlangsamen.
In diesem Artikel werden die möglichen Ursachen für langsame Ausführungszeiten in GEE untersucht und praktische Tipps zur Optimierung des jeweiligen Skripts gegeben. Durch die Implementierung dieser Strategien können Benutzer die Geschwindigkeit und Leistung ihrer Geodatenanalyseaufgaben erheblich verbessern.
Befehl | Anwendungsbeispiel |
---|---|
normalizedDifference() | Mit dieser Funktion werden Indizes wie NDVI, NDWI und NDSI berechnet, indem die Differenz zwischen zwei Bändern dividiert durch deren Summe berechnet wird. Es ist speziell für Fernerkundungsanalysen gedacht, bei denen Vegetations-, Wasser- und Schneeindizes benötigt werden. |
filterBounds() | Filtert eine Bildsammlung so, dass nur Bilder enthalten sind, die eine bestimmte Geometrie schneiden. In diesem Fall werden die Satellitendaten auf den Bereich um den definierten Punkt von Interesse beschränkt, wodurch die Verarbeitung effizienter wird, indem irrelevante Daten ausgeschlossen werden. |
filterDate() | Dieser Befehl begrenzt die Bildersammlung auf einen bestimmten Datumsbereich. Für unser Problem ist es entscheidend, die Unterschiede zwischen demselben Zeitraum für Sentinel- und Landsat-Datensätze zu analysieren. |
addBands() | Fügt jedem Bild in der Sammlung neue berechnete Bänder (wie NDVI, NDWI und NDSI) hinzu. Dies ist wichtig, um mehrere Indizes auf dieselbe Bildsammlung anzuwenden, ohne separate Datensätze zu erstellen. |
unmask() | Füllt maskierte Pixel mit einem angegebenen Wert. In unserem Skript wird es zur Demaskierung dauerhafter Wasserflächen verwendet, um sicherzustellen, dass die Daten in der gesamten Region konsistent verarbeitet werden. |
reduce() | Reduziert eine Bildsammlung mithilfe einer angegebenen Reduzierungsfunktion, z. B. ee.Reducer.percentile(). Hier wird es verwendet, um das 30. Perzentil der Pixelwerte zu berechnen und so die Erstellung zusammengesetzter Bilder zu optimieren. |
clip() | Beschneidet ein Bild an den Grenzen des angegebenen Interessenbereichs. Dadurch wird sichergestellt, dass nur für den Bereich relevante Daten verarbeitet werden, was die Ausführung beschleunigt. |
gt() | Dieser Befehl steht für „größer als“ und wird verwendet, um Binärbilder basierend auf einem Schwellenwert zu erstellen. In diesem Fall werden Gebiete mit einem Wasservorkommen von mehr als 80 % identifiziert. |
map() | Wendet eine Funktion auf jedes Bild in der Sammlung an. In unserem Beispiel wird die Funktion „addIndices“ angewendet, um NDVI, NDWI und NDSI für alle Bilder in der Sammlung zu berechnen und so den Arbeitsablauf zu optimieren. |
Optimierung von GEE-Skripten für mehr Effizienz
Das Ziel des bereitgestellten Skripts besteht darin, Satellitenbilder aus zwei verschiedenen Quellen zu extrahieren und zu verarbeiten: Sentinel und Landsat. Der Google Earth Engine (GEE) Die Plattform ermöglicht Benutzern den Zugriff auf große Mengen an Satellitendaten und die Anwendung verschiedener Vorgänge wie Filterung, Indizierung und Visualisierung. Eine der wichtigsten Funktionen, die in diesem Skript verwendet werden, ist die normalisierteDifferenz() Funktion, die zur Berechnung wichtiger Indizes wie NDVI, NDWI und NDSI verwendet wird. Diese Indizes sind für die Analyse von Vegetation, Wasser und Schneedecke in der angegebenen Region von entscheidender Bedeutung. Das Skript definiert zunächst einen Punkt von Interesse und zentriert die Karte anhand der bereitgestellten Koordinaten darauf.
Das Skript wendet mehrere Filter an, z filterDate() Und filterBounds(), um die Menge der verarbeiteten Daten zu reduzieren und so die Ausführungszeit zu verbessern. Zum Beispiel, filterBounds() stellt sicher, dass nur die Bilder einbezogen werden, die den Interessenbereich schneiden filterDate() Begrenzt die Bilder auf einen bestimmten Datumsbereich. Dies ist für die Verarbeitung großer Datensätze wie Sentinel- und Landsat-Bilder von entscheidender Bedeutung, da es den Rechenaufwand minimiert. Darüber hinaus ist die Filter für die Wolkenabdeckung hilft, Bilder mit zu vielen Wolken zu verwerfen und sorgt so für eine bessere Analysequalität.
Ein wichtiger Aspekt des Drehbuchs ist der addBands() Funktion, die berechnete Indizes (NDVI, NDWI, NDSI) zu den Bildern hinzufügt und sie für die weitere Analyse zugänglich macht. Das Skript beinhaltet auch eine permanente Wassermaske, die Daten aus dem JRC Global Surface Water-Datensatz verwendet. Die Wassermaske hilft dabei, Gebiete mit einem hohen Wasservorkommen (mehr als 80 %) auszuschließen, was andernfalls die Ergebnisse der Vegetations- und Schneeanalyse verfälschen könnte. Dies geschieht durch die gt() Und entlarven() Funktionen, die es dem Skript ermöglichen, Bereiche basierend auf Pixelwerten zu isolieren.
Schließlich verwendet das Skript das reduzieren() Funktion mit dem Perzentilreduzierer, um ein zusammengesetztes Bild zu erzeugen, das das 30. Perzentil der ausgewählten Pixelwerte darstellt. Dieses zusammengesetzte Bild wird dann auf den interessierenden Bereich zugeschnitten und mithilfe von auf der Karte visualisiert Clip() Funktion. Die visuellen Parameter sind sowohl für die Sentinel- als auch für die Landsat-Komposite definiert, sodass der Benutzer sie mit geeigneten Farbeinstellungen betrachten kann. Durch die Kombination verschiedener Bildverarbeitungsschritte wie Filterung, Maskierung und zusammengesetzte Generierung bietet dieses Skript eine effiziente Möglichkeit zur Analyse von Satellitenbildern, obwohl eine weitere Optimierung angewendet werden könnte, um die Ausführungszeiten zu verkürzen.
Optimierung der Skriptausführung der Google Earth Engine für eine schnellere Verarbeitung
Diese Lösung nutzt Google Earth Engine (GEE) mit dem Schwerpunkt auf Leistungsoptimierung durch Verkürzung der Datenabrufzeiten und Vereinfachung des Betriebs. Als Skriptsprache wird JavaScript verwendet.
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));
Einsatz effizienter Datenverarbeitung für GEE zur Minimierung von Skriptverzögerungen
Diese Lösung integriert eine optimierte Datenverarbeitung durch die Kombination von Indexberechnungen und Schwellenwerten. Für die Google Earth Engine-Verarbeitung wird JavaScript eingesetzt.
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);
Verbesserung der Effizienz von Fernerkundungsskripten
Ein wichtiger Gesichtspunkt bei der Arbeit mit Google Earth Engine (GEE)-Skripten besteht darin, sicherzustellen, dass Vorgänge effizient abgewickelt werden. Während die Verwendung großer Datensätze wie Sentinel und Landsat in der Umweltanalyse üblich ist, kann die schiere Datenmenge die Skriptausführung verlangsamen. Eine Methode zur Leistungsverbesserung besteht darin, sicherzustellen, dass nur die erforderlichen Daten verarbeitet werden. Mit Befehlen wie filterBounds() Und filterDate() Minimiert die Datensatzgröße, was zur Rationalisierung der Berechnungen beiträgt. Durch die Auswahl bestimmter Datumsbereiche und geografischer Regionen kann die Ausführungszeit erheblich verkürzt werden.
Ein weiterer Aspekt, der sich auf die Leistung des GEE-Skripts auswirkt, ist die Art und Weise, wie die Daten verarbeitet werden. Das Skriptbeispiel verwendet eine Funktion zur Berechnung wichtiger Indizes wie NDVI, NDWI und NDSI. Diese Indizes werden als Bänder zu den Bildsammlungen hinzugefügt, was eine gründlichere Analyse ermöglicht. Ein häufiger Fehler besteht jedoch darin, solche Funktionen auf einen gesamten Datensatz anzuwenden, ohne ihn vorher zu filtern. Es ist wichtig, solche Operationen nach dem Filtern anzuwenden, um unnötige Berechnungen für irrelevante Daten zu vermeiden.
Die Visualisierung ist ein weiteres Element des Skripts, das optimiert werden kann. Das Hinzufügen zu vieler Ebenen oder komplexer Visualisierungen kann die Verarbeitungszeit verkürzen. Das Skript verwendet vordefinierte visuelle Parameter zum Rendern der Kompositionen. Die Leistung kann jedoch verbessert werden, indem bestimmte Ebenen deaktiviert werden, sofern sie nicht ausdrücklich benötigt werden. Dies trägt dazu bei, das Skript kompakt zu halten und gleichzeitig seine Funktionalität beizubehalten. Benutzen Clip() Befehle stellen außerdem sicher, dass nur der erforderliche Bereich gerendert wird, wodurch die Gesamtverarbeitungslast verringert wird.
Häufig gestellte Fragen zur Optimierung von Google Earth Engine-Skripten
- Wie verbessere ich die Leistung meiner GEE-Skripte?
- Optimieren Sie die Verwendung von filterDate(), filterBounds(), und reduzieren Sie die Größe Ihres Datensatzes vor der Verarbeitung.
- Warum dauert die Ausführung meines GEE-Skripts so lange?
- Große Datensätze und komplexe Berechnungen können die Ausführung verlangsamen. Verwenden reduce() Und clip() die Verarbeitung auf relevante Bereiche zu beschränken.
- Kann ich die Anzahl der in GEE verarbeiteten Bilder reduzieren?
- Ja, indem Sie sich bewerben filter() für Wolkenbedeckung und filterDate() sich auf bestimmte Zeiträume zu konzentrieren.
- Wie kann ich Indexberechnungen in meinem Skript vereinfachen?
- Verwenden Sie eine Funktion wie addBands() um das Hinzufügen mehrerer Indizes (z. B. NDVI, NDWI) in einem Schritt zu optimieren.
- Ist es möglich, nur die wesentlichen Schichten zu visualisieren?
- Ja, deaktivieren Sie unnötige Ebenen und verwenden Sie vereinfachte Visualisierungsparameter mit Map.addLayer() für bessere Leistung.
Abschließende Gedanken zur Optimierung von GEE-Skripten
Zur Optimierung von Google Earth Engine-Skripts gehört die effiziente Handhabung großer Datensätze, die frühzeitige Anwendung von Filtern und die Reduzierung unnötiger Datenvorgänge. Konzentrieren Sie sich auf wesentliche Bereiche wie das Filtern nach Datum und Standort können die Bearbeitungszeit erheblich verkürzen.
Durch die Integration von Funktionen wie addBands Durch die Verwendung von Schwellenwertmasken zur Eliminierung irrelevanter Daten kann die Skriptleistung weiter verbessert werden. Diese Techniken können die Ausführung rationalisieren und bieten schnellere Ergebnisse und eine bessere Nutzung der Google Earth Engine-Plattform.
Quellen und Referenzen zur Optimierung von Google Earth Engine-Skripten
- Dieser Artikel wurde mit Inhalten erstellt, die auf der offiziellen Google Earth Engine-Dokumentation basieren und Einblicke in Skriptoptimierungstechniken bieten. Google Earth Engine-Anleitungen
- Zusätzliche Informationen wurden im GEE-Community-Forum gesammelt, das Diskussionen und Lösungen zur Verbesserung der Leistung in komplexen Skripten bietet. Google Earth Engine-Community
- Best Practices für den Umgang mit großen Datensätzen wurden aus der Fernerkundungsliteratur und den Tutorials entnommen, die unter dem folgenden Link verfügbar sind. NASA-Erdobservatorium