Zuordnung kumulativer Kosten

Mit image.cumulativeCost() können Sie eine Kostenkarte berechnen, in der jedes Pixel die Gesamtkosten des Pfades mit den geringsten Kosten zum nächsten Quellstandort enthält. Dieser Prozess ist in einer Vielzahl von Kontexten nützlich, z. B. bei der Habitatanalyse (Adriaensen et al. 2003), der Abgrenzung von Einzugsgebieten (Melles et al. 2011) und der Bildsegmentierung (Falcao et al. 2004). Rufen Sie die kumulierte Kostenfunktion für ein Bild auf, in dem jedes Pixel die Kosten pro Meter für die Durchquerung darstellt. Pfade werden über einen der acht Nachbarn eines Pixels berechnet. Zu den erforderlichen Eingaben gehören ein source-Bild, in dem jedes Pixel mit einem Wert ungleich 0 eine potenzielle Quelle (oder den Anfang eines Pfades) darstellt, und eine maxDistance (in Metern), über die Pfade berechnet werden sollen. Der Algorithmus ermittelt die kumulativen Kosten aller Pfade, die kürzer als maxPixels = maxDistance ÷ scale sind. Dabei ist scale die Pixelauflösung oder der Analysemaßstab in Earth Engine.

Im folgenden Beispiel wird gezeigt, wie Sie die kostengünstigsten Pfade über ein Bild mit Bodenbedeckung berechnen:

// A rectangle representing Bangui, Central African Republic.
var geometry = ee.Geometry.Rectangle([18.5229, 4.3491, 18.5833, 4.4066]);

// Create a source image where the geometry is 1, everything else is 0.
var sources = ee.Image().toByte().paint(geometry, 1);

// Mask the sources image with itself.
sources = sources.selfMask();

// The cost data is generated from classes in ESA/GLOBCOVER.
var cover = ee.Image('ESA/GLOBCOVER_L4_200901_200912_V2_3').select(0);

// Classes 60, 80, 110, 140 have cost 1.
// Classes 40, 90, 120, 130, 170 have cost 2.
// Classes 50, 70, 150, 160 have cost 3.
var beforeRemap = [60, 80, 110, 140,
                   40, 90, 120, 130, 170,
                   50, 70, 150, 160];
var afterRemap = [1, 1, 1, 1,
                  2, 2, 2, 2, 2,
                  3, 3, 3, 3];
var cost = cover.remap(beforeRemap, afterRemap, 0);

// Compute the cumulative cost to traverse the land cover.
var cumulativeCost = cost.cumulativeCost({
  source: sources,
  maxDistance: 80 * 1000  // 80 kilometers
});

// Display the results
Map.setCenter(18.71, 4.2, 9);
Map.addLayer(cover, {}, 'Globcover');
Map.addLayer(cumulativeCost, {min: 0, max: 5e4}, 'accumulated cost');
Map.addLayer(geometry, {color: 'FF0000'}, 'source geometry');

Das Ergebnis sollte in etwa so aussehen wie in Abbildung 1, in der jedes Ausgabepixel die Summe der Kosten bis zur nächsten Quelle darstellt. Beachten Sie, dass Unterbrechungen an Stellen auftreten können, an denen der Weg mit den geringsten Kosten zur nächsten Quelle eine Länge von maxPixels überschreitet.

costMap
Abbildung 1. Die kumulativen Kosten für die Quellpixel, wobei die Kosten durch die Kategorien der Bodenbedeckung bestimmt werden. Niedrige Kosten sind schwarz, höhere Kosten sind weiß.