Beginnen wir mit der Berechnung, die zum Erstellen eines Bereichs erforderlich ist, in dem die Daten von Hansen et al. sowohl Verlust als auch Gewinn zeigen.
Das Dataset von Hansen et al. enthält ein Band, dessen Pixel 1 sind, wenn ein Verlust aufgetreten ist, und 0, wenn nicht (loss
), sowie ein Band, dessen Pixel 1 sind, wenn ein Gewinn aufgetreten ist, und 0, wenn nicht (gain
). Wenn Sie ein Band erstellen möchten, in dem die Pixel sowohl im loss
- als auch im gain
-Band den Wert 1 haben, können Sie die logische Methode and()
für Bilder verwenden. Die Methode and()
wird wie image1.and(image2)
aufgerufen und gibt ein Bild zurück, in dem die Pixel 1 sind, wenn sowohl image1 als auch image2 1 sind, und ansonsten 0:
Code-Editor (JavaScript)
// Load the data and select the bands of interest. var gfc2014 = ee.Image('UMD/hansen/global_forest_change_2015'); var lossImage = gfc2014.select(['loss']); var gainImage = gfc2014.select(['gain']); // Use the and() method to create the lossAndGain image. var gainAndLoss = gainImage.and(lossImage); // Show the loss and gain image. Map.addLayer(gainAndLoss.updateMask(gainAndLoss), {palette: 'FF00FF'}, 'Gain and Loss');
Das Ergebnis, in das mit der Satellitenansicht auf Arkansas gezoomt wurde, sollte in etwa wie in Abbildung 1 aussehen.

Wenn Sie dieses Beispiel mit dem Ergebnis aus dem vorherigen Abschnitt kombinieren, können Sie die Abbildung vom Anfang des Tutorials nachbilden:
Code-Editor (JavaScript)
// Displaying forest, loss, gain, and pixels where both loss and gain occur. var gfc2014 = ee.Image('UMD/hansen/global_forest_change_2015'); var lossImage = gfc2014.select(['loss']); var gainImage = gfc2014.select(['gain']); var treeCover = gfc2014.select(['treecover2000']); // Use the and() method to create the lossAndGain image. var gainAndLoss = gainImage.and(lossImage); // Add the tree cover layer in green. Map.addLayer(treeCover.updateMask(treeCover), {palette: ['000000', '00FF00'], max: 100}, 'Forest Cover'); // Add the loss layer in red. Map.addLayer(lossImage.updateMask(lossImage), {palette: ['FF0000']}, 'Loss'); // Add the gain layer in blue. Map.addLayer(gainImage.updateMask(gainImage), {palette: ['0000FF']}, 'Gain'); // Show the loss and gain image. Map.addLayer(gainAndLoss.updateMask(gainAndLoss), {palette: 'FF00FF'}, 'Gain and Loss');
Waldveränderungen in einer Region von Interesse quantifizieren
Nachdem Sie nun mit den Bändern im Datensatz von Hansen et al. vertrauter sind, können wir die bisher gelernten Konzepte verwenden, um Statistiken zu Waldzuwachs und ‑verlust in einer Region von Interesse zu berechnen. Dazu benötigen wir Vektordaten (Punkte, Linien und Polygone). Ein Vektordatensatz wird in Earth Engine als FeatureCollection
dargestellt.
Weitere Informationen zu Feature-Sammlungen und zum Importieren von Vektordaten
In diesem Abschnitt vergleichen wir die Gesamtmenge des Waldverlusts in der Republik Kongo im Jahr 2012 mit dem Waldverlust in den Schutzgebieten des Landes im selben Zeitraum.
Wie Sie im Earth Engine API-Tutorial gelernt haben, ist reduceRegion()
die wichtigste Methode zum Berechnen von Statistiken in einer Bildregion. Weitere Informationen zum Reduzieren von Bildbereichen Angenommen, wir möchten die Anzahl der Pixel berechnen, die schätzungsweise den Waldverlust während des Untersuchungszeitraums darstellen. Sehen Sie sich dazu den folgenden Code an:
Code-Editor (JavaScript)
// Load country features from Large Scale International Boundary (LSIB) dataset. var countries = ee.FeatureCollection('USDOS/LSIB_SIMPLE/2017'); // Subset the Congo Republic feature from countries. var congo = countries.filter(ee.Filter.eq('country_na', 'Rep of the Congo')); // Get the forest loss image. var gfc2014 = ee.Image('UMD/hansen/global_forest_change_2015'); var lossImage = gfc2014.select(['loss']); // Sum the values of forest loss pixels in the Congo Republic. var stats = lossImage.reduceRegion({ reducer: ee.Reducer.sum(), geometry: congo, scale: 30 }); print(stats);
In diesem Beispiel wird der Reducer ee.Reducer.sum()
verwendet, um die Werte der Pixel in lossImage
innerhalb des congo
-Features zu summieren. Da lossImage
aus Pixeln mit dem Wert 1 oder 0 (für Verlust bzw. keinen Verlust) besteht, entspricht die Summe dieser Werte der Anzahl der Pixel mit Verlust in der Region.
Leider führt die Ausführung des Skripts in seiner aktuellen Form zu einem Fehler wie:
Die maximale Standardanzahl der Pixel in reduceRegion()
beträgt 10 Millionen. Diese Fehlermeldung gibt an, dass die Republik Kongo etwa 383 Millionen Landsat-Pixel umfasst. Glücklicherweise akzeptiert reduceRegion()
viele Parameter. Mit einem davon (maxPixels
) können Sie festlegen, wie viele Pixel für die Berechnung verwendet werden. Wenn Sie diesen Parameter angeben, kann die Berechnung erfolgreich abgeschlossen werden:
Code-Editor (JavaScript)
// Load country features from Large Scale International Boundary (LSIB) dataset. var countries = ee.FeatureCollection('USDOS/LSIB_SIMPLE/2017'); // Subset the Congo Republic feature from countries. var congo = countries.filter(ee.Filter.eq('country_na', 'Rep of the Congo')); // Get the forest loss image. var gfc2014 = ee.Image('UMD/hansen/global_forest_change_2015'); var lossImage = gfc2014.select(['loss']); // Sum the values of forest loss pixels in the Congo Republic. var stats = lossImage.reduceRegion({ reducer: ee.Reducer.sum(), geometry: congo, scale: 30, maxPixels: 1e9 }); print(stats);
Wenn Sie das in der Konsole ausgegebene Objekt maximieren, sehen Sie, dass das Ergebnis 4.897.933 Pixel verlorener Wald sind. Sie können die Ausgabe in der Konsole etwas bereinigen, indem Sie die Ausgabe kennzeichnen und das gewünschte Ergebnis aus dem von reduceRegion()
zurückgegebenen Dictionary abrufen:
Code-Editor (JavaScript)
print('pixels representing loss: ', stats.get('loss'));
Pixelbereiche berechnen
Sie sind fast so weit, die Frage zu beantworten, wie viel Fläche in der Republik Kongo verloren gegangen ist und wie viel davon in Schutzgebieten. Im nächsten Schritt müssen die Pixel in eine tatsächliche Fläche umgewandelt werden. Diese Umwandlung ist wichtig, da wir die Größe der in reduceRegion()
eingegebenen Pixel nicht unbedingt kennen. Um Flächen zu berechnen, bietet Earth Engine die Methode ee.Image.pixelArea()
, mit der ein Bild generiert wird, in dem der Wert jedes Pixels die Fläche des Pixels in Quadratmetern ist. Wenn wir das Verlustbild mit diesem Flächenbild multiplizieren und dann das Ergebnis summieren, erhalten wir ein Maß für die Fläche:
Code-Editor (JavaScript)
// Load country features from Large Scale International Boundary (LSIB) dataset. var countries = ee.FeatureCollection('USDOS/LSIB_SIMPLE/2017'); // Subset the Congo Republic feature from countries. var congo = countries.filter(ee.Filter.eq('country_na', 'Rep of the Congo')); // Get the forest loss image. var gfc2014 = ee.Image('UMD/hansen/global_forest_change_2015'); var lossImage = gfc2014.select(['loss']); var areaImage = lossImage.multiply(ee.Image.pixelArea()); // Sum the values of forest loss pixels in the Congo Republic. var stats = areaImage.reduceRegion({ reducer: ee.Reducer.sum(), geometry: congo, scale: 30, maxPixels: 1e9 }); print('pixels representing loss: ', stats.get('loss'), 'square meters');
Das Ergebnis ist jetzt 4.372.575.052 Quadratmeter, die im Studienzeitraum verloren gegangen sind.
Sie können jetzt die Frage vom Anfang dieses Abschnitts beantworten: Wie viel Waldfläche ging 2012 in der Republik Kongo verloren und wie viel davon in Schutzgebieten?
Code-Editor (JavaScript)
// Load country features from Large Scale International Boundary (LSIB) dataset. var countries = ee.FeatureCollection('USDOS/LSIB_SIMPLE/2017'); // Subset the Congo Republic feature from countries. var congo = ee.Feature( countries .filter(ee.Filter.eq('country_na', 'Rep of the Congo')) .first() ); // Subset protected areas to the bounds of the congo feature // and other criteria. Clip to the intersection with congo. var protectedAreas = ee.FeatureCollection('WCMC/WDPA/current/polygons') .filter(ee.Filter.and( ee.Filter.bounds(congo.geometry()), ee.Filter.neq('IUCN_CAT', 'VI'), ee.Filter.neq('STATUS', 'proposed'), ee.Filter.lt('STATUS_YR', 2010) )) .map(function(feat){ return congo.intersection(feat); }); // Get the loss image. var gfc2014 = ee.Image('UMD/hansen/global_forest_change_2015'); var lossIn2012 = gfc2014.select(['lossyear']).eq(12); var areaImage = lossIn2012.multiply(ee.Image.pixelArea()); // Calculate the area of loss pixels in the Congo Republic. var stats = areaImage.reduceRegion({ reducer: ee.Reducer.sum(), geometry: congo.geometry(), scale: 30, maxPixels: 1e9 }); print( 'Area lost in the Congo Republic:', stats.get('lossyear'), 'square meters' ); // Calculate the area of loss pixels in the protected areas. var stats = areaImage.reduceRegion({ reducer: ee.Reducer.sum(), geometry: protectedAreas.geometry(), scale: 30, maxPixels: 1e9 }); print( 'Area lost in protected areas:', stats.get('lossyear'), 'square meters' );
Die Ausgabe zeigt, dass von den 348.036.295 Quadratmetern Wald, die 2012 in der Republik Kongo verloren gingen, 11.880.976 in Schutzgebieten lagen, wie in der World Database on Protected Areas table dargestellt.
Die einzigen Änderungen zwischen diesem und dem vorherigen Skript sind das Hinzufügen der Informationen zum geschützten Bereich und die Änderung des Skripts von der Betrachtung des Gesamtverlusts zur Betrachtung des Verlusts im Jahr 2012. Dazu waren zwei Änderungen erforderlich. Zuerst gibt es ein neues lossIn2012
-Bild, das eine 1 enthält, wenn 2012 ein Verlust aufgezeichnet wurde, und ansonsten eine 0. Zweitens musste der Name der Eigenschaft in der Print-Anweisung geändert werden, da sich der Name der Band unterscheidet (lossyear
statt loss
).
Im nächsten Abschnitt werden einige erweiterte Methoden zum Berechnen und Darstellen des Waldverlusts für jedes Jahr vorgestellt, anstatt nur für ein Jahr wie in diesem Abschnitt.