累積費用マッピング

image.cumulativeCost() を使用して、各ピクセルに最も近い送信元ロケーションまでの最小費用パスの合計費用が含まれるコストマップを計算します。このプロセスは、生息地分析(Adriaensen et al. 2003)、水域の境界設定(Melles et al. 2011)、画像分割(Falcao et al. 2004)など、さまざまなコンテキストで役立ちます。各ピクセルが通過する 1 メートルあたりの費用を表す画像で累積費用関数を呼び出します。パスは、ピクセルの 8 つの隣接ピクセルから計算されます。必要な入力には、source 画像(ゼロ以外の各ピクセルが潜在的なソース(またはパスの開始)を表す)と、パスを計算する maxDistance(メートル単位)が含まれます。このアルゴリズムは、長さが maxPixels = maxDistance/scale 未満のすべてのパスの累積費用を計算します。ここで、scale はピクセル解像度、つまり Earth Engine での分析のスケールです。

次の例は、土地被覆画像全体の最小費用パスを計算する方法を示しています。

コードエディタ(JavaScript)

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

結果は図 1 のようになります。各出力ピクセルは、最も近いソースまでの累積費用を表します。最寄りのソースへの最小コスト パスの長さが maxPixels を超える場所では、不連続が生じる可能性があります。

costMap
図 1. ソースピクセルの累積費用。費用は土地被覆カテゴリによって決まります。低コストは黒、高コストは白です。