Xuất biểu đồ và hình ảnh

Earth Engine là một công cụ phân tích mạnh mẽ, nhưng bạn có thể cần xuất kết quả phân tích để nhúng biểu đồ, hình ảnh, bản đồ, v.v. vào báo cáo hoặc ấn phẩm. Trong phần này, bạn sẽ tìm hiểu cách tạo biểu đồ và hình ảnh có thể xuất và xem trong phần mềm khác. Hãy nhớ rằng trong phần trước, bạn đã dùng mã như sau để thêm một dải NDVI vào mọi hình ảnh trong một tập hợp, trong đó biến l8 tham chiếu đến tập hợp hệ số phản xạ TOA của Landsat 8:

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

// Import the Landsat 8 TOA image collection.
var l8 = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA');

// Map a function over the Landsat 8 TOA collection to add an NDVI band.
var withNDVI = l8.map(function(image) {
  var ndvi = image.normalizedDifference(['B5', 'B4']).rename('NDVI');
  return image.addBands(ndvi);
});

Xuất hiện trên bảng xếp hạng

Giả sử bạn muốn xem biểu đồ chỉ số NDVI theo thời gian tại một vị trí nhất định. Để tạo biểu đồ như vậy, bước đầu tiên là chọn một vị trí mà bạn quan tâm. Tạo một điểm bằng cách lấy công cụ vẽ điểm () và tạo một hình học điểm duy nhất trong khu vực bạn quan tâm. (Nếu bạn đã có dữ liệu nhập, trước tiên, hãy di chuột lên Nhập hình học rồi nhấp vào + lớp mới). Xác định vị trí của điểm trong khu vực nông nghiệp, rừng rụng lá, đồng cỏ hằng năm hoặc một số loại hình sử dụng đất khác có chu kỳ hằng năm. Đặt tên cho lệnh nhập roi. (Xem trang này để biết thông tin về cách tạo hình học theo phương thức lập trình).

Bây giờ, hãy sử dụng điểm roi để tạo biểu đồ về chỉ số NDVI theo thời gian trong pixel bên dưới điểm đó. Cách tạo biểu đồ trong Earth Engine là dùng gói ui.Chart. (Tìm hiểu thêm về cách tạo biểu đồ trong Earth Engine). Cụ thể, để tạo biểu đồ theo thời gian, bạn có thể sử dụng phương thức ui.Chart.image.series():

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

// Create a chart.
var chart = ui.Chart.image.series({
  imageCollection: withNDVI.select('NDVI'),
  region: roi,
  reducer: ee.Reducer.first(),
  scale: 30
}).setOptions({title: 'NDVI over time'});

// Display the chart in the console.
print(chart);

Đối với hình học roi, chúng tôi đã chọn một điểm trong khu vực nông nghiệp, dẫn đến một biểu đồ có dạng như Hình 10. Xin lưu ý rằng các tham số cho hàm khởi tạo biểu đồ bao gồm một bộ giảm và tỷ lệ như reduceRegion(). Vì điểm mà chúng ta cung cấp dưới dạng một khu vực chỉ có thể giao với một pixel, nên chỉ cần sử dụng bộ giảm "first". Nếu có một khu vực lớn hơn, bạn nên sử dụng "giá trị trung bình" hoặc bộ giảm khác chỉ định cách tổng hợp các pixel. Ngoài ra, xin lưu ý rằng để trực quan hoá một biểu đồ, tất cả những gì bạn phải làm là in biểu đồ đó.

Tutorial_api_10_ndvi_chart.png
Hình 10. Biểu đồ NDVI của Landsat theo thời gian tại một hình học điểm.

Ngoại lệ: Lớp phủ đám mây đơn giản cho Landsat

Có thể bạn đã nhận thấy một điều về biểu đồ này là chuỗi thời gian của các giá trị NDVI tại điểm này có vẻ hơi nhiễu. Nguyên nhân có thể là do mây. Để giảm thiểu hiệu ứng này, Earth Engine có một thuật toán che mây cho các cảm biến Landsat có dải nhiệt: ee.Algorithms.Landsat.simpleCloudScore(). Hàm này lấy hình ảnh hệ số phản xạ TOA của Landsat làm đầu vào và thêm một dải tần có tên là cloud. Đây là chỉ số về độ che phủ của mây trong pixel từ 0 đến 100, tương ứng từ ít đến nhiều mây. Bằng cách sửa đổi hàm mà bạn đã ánh xạ trên tập hợp, bạn có thể sử dụng một ngưỡng tuỳ ý (20) trên chỉ mục đám mây để làm sạch biểu đồ một chút:

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

var cloudlessNDVI = l8.map(function(image) {
  // Get a cloud score in [0, 100].
  var cloud = ee.Algorithms.Landsat.simpleCloudScore(image).select('cloud');

  // Create a mask of cloudy pixels from an arbitrary threshold.
  var mask = cloud.lte(20);

  // Compute NDVI.
  var ndvi = image.normalizedDifference(['B5', 'B4']).rename('NDVI');

  // Return the masked image with an NDVI band.
  return image.addBands(ndvi).updateMask(mask);
});

print(ui.Chart.image.series({
  imageCollection: cloudlessNDVI.select('NDVI'),
  region: roi,
  reducer: ee.Reducer.first(),
  scale: 30
}).setOptions({title: 'Cloud-masked NDVI over time'}));

Kết quả được che bằng đám mây minh hoạ trong Hình 11. Xin lưu ý rằng chuỗi thời gian có vẻ mượt mà hơn một chút, nhưng vẫn có thể chứa các pixel chịu ảnh hưởng của mây. Điều chỉnh ngưỡng trên chỉ mục đám mây và quan sát chuỗi thời gian được lập biểu đồ để tìm hiểu cách ngưỡng này có thể ảnh hưởng đến kết quả của bạn.

Tutorial_api_11_cloudless_chart.png
Hình 11. Biểu đồ NDVI được che bằng đám mây theo thời gian tại một hình học điểm.

Xuất hình ảnh

Bạn đã thấy cách xuất biểu đồ dữ liệu do Earth Engine tính toán, nhưng còn hình ảnh thì sao? Ví dụ: giả sử bạn đã tạo một thành phần có pixel xanh nhất như đã thảo luận trong phần trước:

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

var greenest = cloudlessNDVI.qualityMosaic('NDVI');

Điểm khác biệt duy nhất trong mã này so với những gì bạn đã làm trước đây là giờ đây chúng ta đang sử dụng tập hợp được che trên đám mây. Bạn có thể xuất một tập hợp con (do một khu vực xác định) của tập hợp này bằng cách sử dụng gói Export. (Tìm hiểu thêm về cách xuất dữ liệu raster và vectơ từ Earth Engine.) Ví dụ: để xuất một hình ảnh có thể dễ dàng được nhúng vào các tài liệu khác, hãy tạo một hình ảnh trực quan như bạn đã làm trước đây và xuất hình ảnh đó vào thư mục Google Drive của bạn:

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

// Create a 3-band, 8-bit, color-IR composite to export.
var visualization = greenest.visualize({
  bands: ['B5', 'B4', 'B3'],
  max: 0.4
});

// Create a task that you can launch from the Tasks tab.
Export.image.toDrive({
  image: visualization,
  description: 'Greenest_pixel_composite',
  scale: 30
});

Khi bạn chạy mã này, hãy lưu ý rằng một tác vụ mới sẽ được tạo trong thẻ Tasks (Tác vụ). Để khởi chạy hộp thoại cấu hình xuất, hãy nhấp vào nút RUN (CHẠY) trong thẻ Tasks (Tác vụ). Sau khi bạn định cấu hình tác vụ, hãy nhấp vào nút Run (Chạy) trong hộp thoại để bắt đầu xuất. Nhưng trước khi làm điều đó, hãy lưu ý:

Lý do bạn nên thận trọng khi xuất mà không có đối số region là nếu bạn đặt một giá trị tương đối nhỏ cho scale và Bản đồ được thu nhỏ thành vùng lớn, thì bạn sẽ xuất một hình ảnh có khả năng rất lớn vào thư mục Drive của mình. Hãy xem tài liệu Export.image.toDrive() trong thẻ Tài liệu để biết thêm thông tin chi tiết và danh sách các tham số cấu hình có thể có.

Đến đây là hết phần giới thiệu về Earth Engine API! Giờ đây, bạn đã thấy nhiều chức năng phổ biến nhất của Earth Engine và có thể tự tin chuyển sang các phân tích phức tạp hơn. Hãy nhớ đọc tài liệu và tìm kiếm trên diễn đàn để biết câu trả lời cho các câu hỏi khác. Chúc bạn lập trình vui vẻ!