Liên kết chi phí tích luỹ

Sử dụng image.cumulativeCost() để tính toán bản đồ chi phí, trong đó mỗi pixel chứa tổng chi phí của đường dẫn có chi phí thấp nhất đến vị trí nguồn gần nhất. Quy trình này rất hữu ích trong nhiều ngữ cảnh, chẳng hạn như phân tích môi trường sống (Adriaensen et al. 2003), phân định lưu vực (Melles et al. 2011) và phân đoạn hình ảnh (Falcao et al. 2004). Gọi hàm chi phí tích luỹ trên một hình ảnh, trong đó mỗi pixel đại diện cho chi phí trên mỗi mét để di chuyển qua hình ảnh đó. Đường dẫn được tính toán thông qua bất kỳ pixel nào trong tám pixel lân cận. Dữ liệu đầu vào bắt buộc bao gồm hình ảnh source, trong đó mỗi pixel khác 0 đại diện cho một nguồn tiềm năng (hoặc điểm bắt đầu của một đường dẫn) và maxDistance (tính bằng mét) để tính toán các đường dẫn. Thuật toán này tìm chi phí tích luỹ của tất cả các đường dẫn có chiều dài nhỏ hơn maxPixels = maxDistance/scale, trong đó scale là độ phân giải pixel hoặc quy mô phân tích trong Earth Engine.

Ví dụ sau đây minh hoạ cách tính toán đường dẫn có chi phí thấp nhất trên hình ảnh về lớp phủ đất:

Trình soạn thảo mã (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');

Kết quả sẽ có dạng như Hình 1, trong đó mỗi pixel đầu ra đại diện cho chi phí tích luỹ đến nguồn gần nhất. Xin lưu ý rằng các điểm không liên tục có thể xuất hiện ở những nơi mà chiều dài của đường dẫn có chi phí thấp nhất đến nguồn gần nhất vượt quá maxPixels.

costMap
Hình 1. Chi phí tích luỹ cho các điểm ảnh nguồn, trong đó chi phí được xác định theo các danh mục lớp phủ đất. Chi phí thấp có màu đen, chi phí cao có màu trắng.