Cường độ thay đổi tần suất ngập lụt

Lớp dữ liệu Cường độ thay đổi về sự xuất hiện của nước cung cấp thông tin đo lường về sự thay đổi của nước mặt giữa hai thời kỳ: 1984-1999 và 2000-2015. Lớp này tính trung bình mức thay đổi trên các cặp tháng tương đồng được lấy từ hai khoảng thời gian. Hãy xem Hướng dẫn sử dụng dữ liệu (phiên bản 2) để biết thêm thông tin chi tiết về lớp này.

Phần này của hướng dẫn sẽ:

  1. thêm một lớp bản đồ phong cách riêng để trực quan hoá cường độ thay đổi về sự xuất hiện của nước, và
  2. tóm tắt cường độ thay đổi trong một vùng quan tâm cụ thể bằng biểu đồ tần suất.

Hình ảnh trực quan

Tương tự như lớp xuất hiện nước, chúng ta sẽ bắt đầu bằng cách thêm hình ảnh trực quan cơ bản về cường độ thay đổi của sự xuất hiện vào bản đồ, sau đó cải thiện hình ảnh đó. Cường độ thay đổi về số lần xuất hiện được cung cấp theo hai cách, cả dưới dạng giá trị tuyệt đối và giá trị chuẩn hoá. Chúng ta sẽ sử dụng các giá trị tuyệt đối trong hướng dẫn này. Bắt đầu bằng cách chọn lớp cường độ thay đổi về số lần xuất hiện tuyệt đối từ hình ảnh GSW:

Trình soạn thảo mã (JavaScript)

var change = gsw.select("change_abs");

Trong phần Hằng số của mã, hãy thêm một câu lệnh tạo biến mới để xác định cách tạo kiểu cho lớp. Kiểu này cho thấy những khu vực có sự xuất hiện của nước mặt đã giảm/tăng bằng màu đỏ/xanh lục. Những khu vực có sự xuất hiện của nước mặt tương đối không thay đổi được hiển thị bằng màu đen.

Trình soạn thảo mã (JavaScript)

var VIS_CHANGE = {
    min:-50,
    max:50,
    palette: ['red', 'black', 'limegreen']
};

Ở cuối phần mã Lớp bản đồ, hãy thêm một câu lệnh để thêm một lớp mới vào bản đồ.

Trình soạn thảo mã (JavaScript)

Map.setCenter(-74.4557, -8.4289, 11);  // Ucayali River, Peru
Map.addLayer({
  eeObject: change,
  visParams: VIS_CHANGE,
  name: 'occurrence change intensity'
});
thay đổi cường độ
Hình 6. Ảnh chụp màn hình về cường độ thay đổi của nước mặt trên Sông Ucayali gần Pucallpa, một thành phố trong rừng mưa Amazon ở miền đông Peru. Màu đỏ/xanh lục cho biết sự giảm/tăng về tần suất xuất hiện của nước mặt giữa các kỷ nguyên.

Tóm tắt thay đổi trong một khu vực quan tâm

Trong phần này, chúng ta sẽ tóm tắt mức độ thay đổi trong một khu vực quan tâm cụ thể. Để chỉ định một khu vực quan tâm, hãy nhấp vào công cụ vẽ đa giác, một trong các Công cụ hình học. Thao tác này sẽ tạo một lớp Geometry Imports (Nhập hình học) mới, được đặt tên là "geometry" (hình học) theo mặc định. Để thay đổi tên, hãy nhấp vào biểu tượng bánh răng ở bên phải tên lớp. (Lưu ý rằng bạn có thể cần phải đặt con trỏ lên tên lớp để biểu tượng này xuất hiện.)

Thay đổi tên lớp thành roi (cho vùng quan tâm hoặc ROI). Sau đó, chúng ta có thể nhấp vào một loạt điểm trên bản đồ để xác định một vùng đa giác mà chúng ta quan tâm.

khu vực quan tâm
Hình 7. Ảnh chụp màn hình sông Ucayali gần Pucallpa, Peru, có một khu vực quan tâm được tạo bằng công cụ vẽ đa giác.

Giờ đây, khi khu vực quan tâm đã được xác định và lưu trữ trong một biến, chúng ta có thể sử dụng biến đó để tính toán biểu đồ tần suất về cường độ thay đổi cho khu vực quan tâm. Thêm mã sau vào phần Tính toán của tập lệnh.

Trình soạn thảo mã (JavaScript)

// Calculate a change intensity for the region of interest.
var histogram = change.reduceRegion({
  reducer: ee.Reducer.histogram(),
  geometry: roi,
  scale: 30,
  bestEffort: true,
});
print(histogram);

Câu lệnh đầu tiên tính toán biểu đồ tần suất của các giá trị cường độ thay đổi về tần suất xuất hiện trong ROI, lấy mẫu ở tỷ lệ 30 m. Dòng thứ hai in đối tượng kết quả vào thẻ Console (Bảng điều khiển) của Trình soạn thảo mã. Bạn có thể mở rộng cây đối tượng để xem giá trị của các bộ chứa biểu đồ. Dữ liệu số đã có sẵn, nhưng có nhiều cách hiệu quả hơn để trực quan hoá kết quả.

giá trị biểu đồ
Hình 8. Kết quả trên thẻ Console, cho thấy các giá trị biểu đồ về cường độ thay đổi của nước mặt.

Để cải thiện điều này, chúng ta có thể tạo biểu đồ tần suất. Thay thế câu lệnh xác định đối tượng biểu đồ bằng các câu lệnh sau:

Trình soạn thảo mã (JavaScript)

// Generate a histogram object and print it to the console tab.
var histogram = ui.Chart.image.histogram({
  image: change,
  region: roi,
  scale: 30,
  minBucketWidth: 10
});
histogram.setOptions({
  title: 'Histogram of surface water change intensity.'
});

Các câu lệnh này tạo một đối tượng biểu đồ tần suất, thay thế cây đối tượng biểu đồ tần suất trong Thẻ Console bằng một biểu đồ. Phương thức biểu đồ chứa một số đối số, bao gồm cả scale xác định tỷ lệ không gian (tính bằng mét) mà vùng quan tâm được lấy mẫu và minBucketWidth dùng để kiểm soát chiều rộng của các bộ chứa biểu đồ tần suất.

biểu đồ tần suất
Hình 9. Kết quả trên thẻ Console, cho thấy biểu đồ tần suất về cường độ thay đổi của nước mặt.

Bạn có thể khám phá các giá trị trên biểu đồ một cách tương tác bằng cách đặt con trỏ lên các thanh biểu đồ.

Kịch bản cuối cùng

Toàn bộ tập lệnh cho phần này được liệt kê bên dưới. Xin lưu ý rằng tập lệnh này bao gồm các câu lệnh để xác định hình học đa giác (roi), tương đương với hình học mà bạn đã tạo bằng các công cụ hình học của Trình soạn thảo mã.

Trình soạn thảo mã (JavaScript)

//////////////////////////////////////////////////////////////
// Asset List
//////////////////////////////////////////////////////////////

var gsw = ee.Image('JRC/GSW1_0/GlobalSurfaceWater');
var occurrence = gsw.select('occurrence');
var change = gsw.select("change_abs");
var roi = /* color: 0B4A8B */ee.Geometry.Polygon(
        [[[-74.17213, -8.65569],
          [-74.17419, -8.39222],
          [-74.38362, -8.36980],
          [-74.43031, -8.61293]]]);

//////////////////////////////////////////////////////////////
// Constants
//////////////////////////////////////////////////////////////

var VIS_OCCURRENCE = {
    min:0,
    max:100,
    palette: ['red', 'blue']
};
var VIS_CHANGE = {
    min:-50,
    max:50,
    palette: ['red', 'black', 'limegreen']
};
var VIS_WATER_MASK = {
  palette: ['white', 'black']
};

//////////////////////////////////////////////////////////////
// Calculations
//////////////////////////////////////////////////////////////

// Create a water mask layer, and set the image mask so that non-water areas are transparent.
var water_mask = occurrence.gt(90).mask(1);

// Generate a histogram object and print it to the console tab.
var histogram = ui.Chart.image.histogram({
  image: change,
  region: roi,
  scale: 30,
  minBucketWidth: 10
});
histogram.setOptions({
  title: 'Histogram of surface water change intensity.'
});
print(histogram);

//////////////////////////////////////////////////////////////
// Initialize Map Location
//////////////////////////////////////////////////////////////

// Uncomment one of the following statements to center the map on
// a particular location.
// Map.setCenter(-90.162, 29.8597, 10);   // New Orleans, USA
// Map.setCenter(-114.9774, 31.9254, 10); // Mouth of the Colorado River, Mexico
// Map.setCenter(-111.1871, 37.0963, 11); // Lake Powell, USA
// Map.setCenter(149.412, -35.0789, 11);  // Lake George, Australia
// Map.setCenter(105.26, 11.2134, 9);     // Mekong River Basin, SouthEast Asia
// Map.setCenter(90.6743, 22.7382, 10);   // Meghna River, Bangladesh
// Map.setCenter(81.2714, 16.5079, 11);   // Godavari River Basin Irrigation Project, India
// Map.setCenter(14.7035, 52.0985, 12);   // River Oder, Germany & Poland
// Map.setCenter(-59.1696, -33.8111, 9);  // Buenos Aires, Argentina\
Map.setCenter(-74.4557, -8.4289, 11);  // Ucayali River, Peru

//////////////////////////////////////////////////////////////
// Map Layers
//////////////////////////////////////////////////////////////

Map.addLayer({
  eeObject: water_mask,
  visParams: VIS_WATER_MASK,
  name: '90% occurrence water mask',
  shown: false
});
Map.addLayer({
  eeObject: occurrence.updateMask(occurrence.divide(100)),
  name: "Water Occurrence (1984-2015)",
  visParams: VIS_OCCURRENCE,
  shown: false
});
Map.addLayer({
  eeObject: change,
  visParams: VIS_CHANGE,
  name: 'occurrence change intensity'
});

Trong phần tiếp theo, bạn sẽ tìm hiểu thêm về cách nước thay đổi theo thời gian bằng cách làm việc với lớp chuyển đổi của lớp nước.