Asignación de costos acumulativos

Usa image.cumulativeCost() para calcular un mapa de costos en el que cada píxel contenga el costo total de la ruta de costo más bajo a la ubicación de origen más cercana. Este proceso es útil en una variedad de contextos, como el análisis de hábitat (Adriaensen et al., 2003), la delimitación de cuencas hidrográficas (Melles et al., 2011) y la segmentación de imágenes (Falcao et al., 2004). Llama a la función de costo acumulativo en una imagen en la que cada píxel representa el costo por metro para recorrerla. Las rutas se calculan a través de cualquiera de los ocho vecinos de un píxel. Las entradas obligatorias incluyen una imagen source, en la que cada píxel distinto de cero representa una fuente potencial (o el inicio de una ruta) y un maxDistance (en metros) sobre el que se deben calcular las rutas. El algoritmo encuentra el costo acumulativo de todas las rutas que son menores que maxPixels = maxDistance/escala de longitud, donde escala es la resolución en píxeles o la escala de análisis en Earth Engine.

En el siguiente ejemplo, se muestra cómo calcular las rutas de costo más bajo en una imagen de cobertura terrestre:

// 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');

El resultado debería verse como la Figura 1, en la que cada píxel de salida representa el costo acumulado hasta la fuente más cercana. Ten en cuenta que pueden aparecer discontinuidades en lugares donde la ruta de menor costo a la fuente más cercana supera la longitud de maxPixels.

costMap
Figura 1: Es el costo acumulativo de los píxeles de origen, donde el costo se determina según las categorías de cobertura del suelo. Los costos bajos son negros y los más altos son blancos.