Wenn die Landsat 8 TOA-Reflektanzsammlung in eine Variable mit dem Namen l8
geladen wurde, haben Sie gesehen, dass der folgende Code zu einem Composite mit den letzten Werten führt:
Code-Editor (JavaScript)
var l8 = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA'); var landsat2016 = l8.filterDate('2016-01-01', '2016-12-31'); Map.addLayer(landsat2016, visParams, 'l8 collection');
Eines der Probleme mit diesem Composite ist, dass es voller Wolken ist. Anstatt nur den letzten Pixel in der Sammlung zu verwenden (wenn Sie eine Sammlung der Karte hinzufügen, ruft Earth Engine implizit mosaic()
auf), können Sie die ImageCollection
reduzieren (Weitere Informationen zum Reduzieren von Bildsammlungen).
Zusammenfügen mit Reducers
Sie haben Reducer zum ersten Mal kennengelernt, als es darum ging, Statistiken in einer Bildregion zu erhalten. Das war eine räumliche Reduzierung. Das Reduzieren einer Bildsammlung auf ein Bild ist eine zeitliche Reduzierung, wenn die Sammlung Bilder über einen bestimmten Zeitraum hinweg darstellt. Der Typ von Reducer
, den Sie verwenden, bestimmt, wie Earth Engine überlappende Pixel verarbeitet. Landsat 8 überfliegt denselben Ort auf der Erde alle 16 Tage. Das bedeutet, dass über einen Zeitraum von sechs Monaten etwa zwölf Bilder aufgenommen werden (und mehr, wenn sich die Szenen überschneiden). Jedes Pixel auf der Karte wird aus einem Stapel von Pixeln abgeleitet – einem aus jedem Bild in der angezeigten Sammlung.
Wenn Sie die Sammlung einfach der Karte hinzufügen, wird der letzte Pixel ausgewählt, also der aus dem neuesten Bild im Stapel. Dieses Verhalten kann mit Earth Engine-Reduzierern geändert werden. Anstatt beispielsweise den letzten Pixel aus dem Stapel zu verwenden, kann Earth Engine angewiesen werden, den Medianwert im Stapel auszuwählen. Dadurch werden Wolken (mit hohem Wert) und Schatten (mit niedrigem Wert) entfernt. Wenn eine Bildsammlung mit dem Median-Reduzierer reduziert wird, ist der zusammengesetzte Wert der Median in jedem Band im Zeitverlauf. Beispiel mit Landsat-Szenen im Jahr 2016:
Code-Editor (JavaScript)
// Get the median over time, in each band, in each pixel. var median = l8.filterDate('2016-01-01', '2016-12-31').median(); // Make a handy variable of visualization parameters. var visParams = {bands: ['B4', 'B3', 'B2'], max: 0.3}; // Display the median composite. Map.addLayer(median, visParams, 'median');
Neu in diesem Code ist die Methode median()
, die auf eine Bildsammlung angewendet wird.
Wie die Filtermethoden ist dies eine Abkürzung für die allgemeinere reduce()
-Methode für Bildsammlungen, die ein ee.Reducer()
als Argument akzeptiert. Eine Liste aller Earth Engine-Reduzierer finden Sie im Paket ee.Reducer
auf dem Tab Docs des Code-Editors. Wenn Sie einen Reducer für eine Bildsammlung in Betracht ziehen, beachten Sie, dass die Ausgabe ein Bild ist. Reducer mit nicht numerischen Ausgaben, z. B. histogram
- oder toList
-Reducer, funktionieren daher nicht mit einer Bildsammlung.

Wenn Sie das zusammengesetzte Medianbild verkleinern, sollte es in etwa wie in Abbildung 6 aussehen. Das Ergebnis sollte deutlich besser sein als das zusammengesetzte Ergebnis, das Sie zuvor erstellt haben. An dieser Stelle sollten Sie einen Schritt zurücktreten und überlegen, was getan wurde, um diesen Median-Composite zu erstellen. In Earth Engine wurde die gesamte Landsat 8-Sammlung für das kontinentale US geladen und der Median für jedes Pixel berechnet. Das sind eine Menge Daten! Natürlich können Sie auch Jahresmedianwerte berechnen, indem Sie die Sammlung zuerst filtern, wie Sie es bereits getan haben. Der Punkt ist, dass es ein großes Projekt wäre, wenn Sie alle diese Bilder herunterladen und dieses zusammengesetzte Bild erstellen müssten. Mit Earth Engine erhalten Sie in Sekundenschnelle ein Ergebnis.
Weitere Informationen zum Erstellen von Composites und Mosaiken
Maskieren
Obwohl der Median-Composite eine Verbesserung gegenüber dem Composite mit dem letzten Wert darstellt, sollten Sie möglicherweise Teile des Bildes maskieren. Wenn Sie Pixel in einem Bild maskieren, werden sie transparent und aus der Analyse ausgeschlossen. Jedes Pixel in jedem Band eines Bildes hat eine Maske. Pixel mit einem Maskierungswert von 0 oder darunter sind transparent. Diejenigen mit einer Maske mit einem Wert über 0 werden gerendert. Die Maske eines Bildes wird mit einem Aufruf wie image1.mask(image2)
festgelegt. Bei diesem Aufruf werden die Werte von image2
als Maske für image1
verwendet. Alle Pixel in image2
mit dem Wert 0 werden in image1
transparent dargestellt.
Angenommen, Sie möchten alle Wasserpixel im Median-Composite maskieren. Eine Wassermaske kann mit dem Dataset erstellt werden, das von Hansen et al. (2013) beschrieben wird und sich im Earth Engine Data Catalog befindet. Weitere Informationen zum Datensatz von Hansen et al. finden Sie in dieser Anleitung. In diesem Dataset hat Wasser den Wert 2, Land den Wert 1 und „Keine Daten“ den Wert 0. Verwenden Sie etwas Logik, um ein Maskenbild zu erstellen, das Nullen enthält, wo kein Land vorhanden ist:
Code-Editor (JavaScript)
// Load or import the Hansen et al. forest change dataset. var hansenImage = ee.Image('UMD/hansen/global_forest_change_2015'); // Select the land/water mask. var datamask = hansenImage.select('datamask'); // Create a binary mask. var mask = datamask.eq(1); // Update the composite mask with the water mask. var maskedComposite = median.updateMask(mask); Map.addLayer(maskedComposite, visParams, 'masked');
In diesem Code gibt es einige neue Dinge, die es wert sind, genauer betrachtet zu werden. Zuerst ist die Funktion select()
nützlich, um die relevanten Bänder aus einem Bild zu extrahieren. Hier wählen wir nur das Band aus, das uns interessiert: datamask
. Als Nächstes gibt es den logischen Operator eq()
, der für „gleich“ steht. Wir verwenden eq(1)
, um ein binäres Bild zu erstellen, in dem alle Pixel, die im datamask
-Band nicht den Wert 1 haben (also Wasser oder keine Daten), im resultierenden Bild den Wert 0 erhalten.
Durch diese Maskierung sind alle Pixel im Median-Composite, die sich über Land befinden (gemäß dem Datensatz von Hansen et al.), sichtbar. Die Pixel über Wasser (oder „nodata“) sind jedoch transparent und werden aus allen Analysen ausgeschlossen, die Sie für das maskedComposite
-Bild durchführen.
Mosaik
Durch die Kombination der Konzepte von Bildsammlungen, logischen Operatoren, Maskierung und Compositing lassen sich interessante kartografische Ergebnisse erzielen. Angenommen, Sie möchten ein Bild, in dem Landpixel in True Color und alle anderen Pixel in Blau dargestellt werden. Dann können Sie Folgendes tun:
Code-Editor (JavaScript)
// Make a water image out of the mask. var water = mask.not(); // Mask water with itself to mask all the zeros (non-water). water = water.mask(water); // Make an image collection of visualization images. var mosaic = ee.ImageCollection([ median.visualize(visParams), water.visualize({palette: '000044'}), ]).mosaic(); // Display the mosaic. Map.addLayer(mosaic, {}, 'custom mosaic');
In diesem Code passiert viel. Sehen wir uns ihn genauer an. Zuerst verwenden wir den logischen Operator not()
, um die zuvor erstellte Maske zu invertieren. Genauer gesagt werden mit not()
alle Nullen in Einsen und alle Nicht-Nullen in Nullen umgewandelt. Es ist nicht ganz richtig, diese Variable water
zu nennen, da sie auch einige Nodata-Pixel enthält. Im vorliegenden kartografischen Kontext ist das jedoch in Ordnung. Als Nächstes wird das Wasser mit sich selbst maskiert. Das Ergebnis ist ein Bild, in dem alle Wasserpixel als „1“ dargestellt werden und alles andere maskiert ist. Im letzten Schritt werden die Bilder mit mosaic()
kombiniert. Da mosaic()
für eine Bildsammlung verwendet wird, übergeben wir eine Liste von Bildern an den Konstruktor der Bildsammlung, die wir kombinieren möchten. Anschließend rufen wir mosaic()
als letzten Schritt auf. Die Reihenfolge der Bilder in dieser Liste ist wichtig. Das Ausgabebild enthält den letzten nicht maskierten Pixel aus dem Stapel von Bildern in der Eingabesammlung. In diesem Fall funktioniert das, weil die Wasserschicht das letzte (oberste) Bild in der Sammlung ist und nur nicht maskierte Pixel enthält, an denen Wasser vorkommt.
Die Bilder in der Sammlung sind Visualisierungsbilder. Wenn Sie visualize()
für ein Bild aufrufen, wird es entsprechend den Visualisierungsparametern, die Sie übergeben, in ein 8‑Bit-Bild mit drei Bändern umgewandelt. Die Standardvisualisierungsparameter funktionieren gut für 3-Band-Bilder mit 8 Bit. Sie benötigen also keine Visualisierungsparameter, wenn Sie das Bild der Karte hinzufügen. Das Ergebnis sollte wie in Abbildung 7 aussehen.

Sie haben nun Möglichkeiten kennengelernt, Bildsammlungen als Composites mit den letzten Werten zu visualisieren, Methoden zum Erstellen von Composites aus Bildsammlungen mithilfe von Reducern und Methoden zum Erstellen benutzerdefinierter Composites durch Maskieren und Mosaikieren einer Sammlung von Bildern. Auf der nächsten Seite erfahren Sie, wie Sie jedem Bild in einer Sammlung einen Vegetationsindex hinzufügen und den Index verwenden, um ein Composite mit den „grünsten Pixeln“ zu erstellen.