Cách làm cho JavaScript trên Google Earth Engine của bạn chạy nhanh hơn

Optimization

Tối ưu hóa thời gian thực thi của tập lệnh Google Earth Engine

Google Earth Engine (GEE) là một nền tảng mạnh mẽ để phân tích dữ liệu không gian địa lý quy mô lớn. Tuy nhiên, người dùng thường gặp phải vấn đề về thời gian thực thi, ngay cả khi tập lệnh của họ có vẻ cơ bản. Một tập lệnh mất vài phút để chạy có thể ảnh hưởng đến năng suất và làm chậm thông tin chi tiết.

Trong trường hợp này, người dùng đã tạo một tập lệnh đơn giản để xử lý dữ liệu Sentinel và Landsat 8. Mặc dù đơn giản nhưng đoạn mã này mất khoảng 3-5 phút để thực thi. Hiểu lý do tại sao điều này xảy ra và cách tối ưu hóa tập lệnh là điều cần thiết để xử lý dữ liệu hiệu quả.

Hiệu suất của tập lệnh GEE phụ thuộc vào một số yếu tố, bao gồm kích thước dữ liệu, tính năng lọc và độ phức tạp tính toán. Việc giảm thời gian thực thi liên quan đến việc xác định các điểm nghẽn trong tập lệnh, chẳng hạn như các thao tác không cần thiết hoặc bộ dữ liệu lớn làm chậm quá trình xử lý.

Bài viết này sẽ khám phá những nguyên nhân có thể khiến thời gian thực thi chậm trong GEE và cung cấp các mẹo thiết thực để tối ưu hóa tập lệnh đã cho. Bằng cách thực hiện các chiến lược này, người dùng có thể cải thiện đáng kể tốc độ và hiệu suất của các nhiệm vụ phân tích dữ liệu không gian địa lý của mình.

Yêu cầu Ví dụ về sử dụng
normalizedDifference() Hàm này được sử dụng để tính toán các chỉ số như NDVI, NDWI và NDSI bằng cách tính toán độ chênh lệch giữa hai dải, chia cho tổng của chúng. Nó dành riêng cho phân tích viễn thám nơi cần có các chỉ số thực vật, nước và tuyết.
filterBounds() Lọc một bộ sưu tập hình ảnh để chỉ bao gồm những hình ảnh giao nhau với một hình học nhất định. Trong trường hợp này, nó hạn chế dữ liệu vệ tinh ở khu vực xung quanh điểm ưa thích đã xác định, giúp việc xử lý hiệu quả hơn bằng cách loại trừ dữ liệu không liên quan.
filterDate() Lệnh này giới hạn việc thu thập hình ảnh trong một phạm vi ngày cụ thể. Đối với vấn đề của chúng tôi, điều quan trọng là phải phân tích sự khác biệt giữa cùng khoảng thời gian đối với bộ dữ liệu Sentinel và Landsat.
addBands() Thêm các dải tính toán mới (như NDVI, NDWI và NDSI) vào từng hình ảnh trong bộ sưu tập. Điều này rất cần thiết để áp dụng nhiều chỉ mục cho cùng một bộ sưu tập hình ảnh mà không cần tạo các bộ dữ liệu riêng biệt.
unmask() Điền vào các pixel bị che với một giá trị được chỉ định. Trong tập lệnh của chúng tôi, nó được dùng để vạch mặt các vùng nước cố định, đảm bảo dữ liệu được xử lý nhất quán trên toàn bộ khu vực.
reduce() Giảm bộ sưu tập hình ảnh bằng cách sử dụng chức năng giảm tốc được chỉ định, chẳng hạn như ee.Reducer.percentile(). Ở đây, nó được sử dụng để tính toán phân vị thứ 30 của giá trị pixel, tối ưu hóa việc tạo hình ảnh tổng hợp.
clip() Cắt hình ảnh theo ranh giới của vùng quan tâm được chỉ định. Điều này đảm bảo rằng chỉ dữ liệu liên quan đến khu vực mới được xử lý, giúp tăng tốc độ thực thi.
gt() Lệnh này là viết tắt của 'lớn hơn' và được sử dụng để tạo ảnh nhị phân dựa trên ngưỡng. Trong trường hợp này, nó xác định các khu vực có lượng nước xuất hiện lớn hơn 80%.
map() Áp dụng một chức năng cho mỗi hình ảnh trong bộ sưu tập. Trong ví dụ của chúng tôi, nó áp dụng hàm addIndices để tính toán NDVI, NDWI và NDSI trên tất cả các hình ảnh trong bộ sưu tập, hợp lý hóa quy trình làm việc.

Tối ưu hóa tập lệnh GEE để cải thiện hiệu quả

Trong tập lệnh được cung cấp, mục tiêu là trích xuất và xử lý hình ảnh vệ tinh từ hai nguồn khác nhau: Sentinel và Landsat. các nền tảng cho phép người dùng truy cập lượng lớn dữ liệu vệ tinh và áp dụng các hoạt động khác nhau như lọc, lập chỉ mục và trực quan hóa. Một trong những tính năng chính được sử dụng trong tập lệnh này là được sử dụng để tính toán các chỉ số quan trọng như NDVI, NDWI và NDSI. Những chỉ số này rất quan trọng để phân tích thảm thực vật, nước và lớp phủ tuyết trong khu vực được chỉ định. Tập lệnh bắt đầu bằng cách xác định một điểm ưa thích và căn giữa bản đồ trên đó bằng cách sử dụng tọa độ được cung cấp.

Tập lệnh áp dụng nhiều bộ lọc, chẳng hạn như Và , để giảm lượng dữ liệu được xử lý, do đó cải thiện thời gian thực hiện. Ví dụ, filterBound() đảm bảo rằng chỉ những hình ảnh giao nhau với khu vực quan tâm mới được đưa vào, trong khi bộ lọcNgày() giới hạn hình ảnh trong một phạm vi ngày cụ thể. Điều này rất cần thiết để xử lý các tập dữ liệu lớn như hình ảnh Sentinel và Landsat vì nó giảm thiểu tải tính toán. Ngoài ra, để che phủ đám mây giúp loại bỏ những hình ảnh có quá nhiều đám mây, đảm bảo phân tích chất lượng tốt hơn.

Một khía cạnh quan trọng của kịch bản là chức năng bổ sung các chỉ số được tính toán (NDVI, NDWI, NDSI) vào hình ảnh, giúp chúng có thể truy cập được để phân tích thêm. Tập lệnh cũng kết hợp mặt nạ nước vĩnh viễn sử dụng dữ liệu từ bộ dữ liệu Nước bề mặt toàn cầu của JRC. Mặt nạ nước giúp loại trừ các khu vực có lượng nước xuất hiện cao (lớn hơn 80%), điều này có thể làm sai lệch kết quả phân tích thảm thực vật và tuyết. Việc này được thực hiện thông qua Và các hàm cho phép tập lệnh cô lập các khu vực dựa trên giá trị pixel.

Cuối cùng, tập lệnh sử dụng hoạt động với bộ giảm phần trăm để tạo ra một hình ảnh tổng hợp đại diện cho phần trăm thứ 30 của các giá trị pixel đã chọn. Hình ảnh tổng hợp này sau đó được cắt bớt vào vùng quan tâm và hiển thị trên bản đồ bằng cách sử dụng chức năng. Các thông số trực quan được xác định cho cả vật liệu tổng hợp Sentinel và Landsat, cho phép người dùng xem chúng với cài đặt màu sắc phù hợp. Bằng cách kết hợp các bước xử lý hình ảnh khác nhau như lọc, tạo mặt nạ và tạo tổng hợp, tập lệnh này cung cấp một cách hiệu quả để phân tích hình ảnh vệ tinh, mặc dù có thể áp dụng tối ưu hóa hơn nữa để giảm thời gian thực hiện.

Tối ưu hóa việc thực thi tập lệnh Google Earth Engine để xử lý nhanh hơn

Giải pháp này sử dụng Google Earth Engine (GEE) với trọng tâm là tối ưu hóa hiệu suất bằng cách giảm thời gian truy xuất dữ liệu và đơn giản hóa các thao tác. JavaScript được sử dụng làm ngôn ngữ kịch bản.

var pointJSP = ee.Geometry.Point([86.465263, 20.168076]);
Map.centerObject(pointJSP, 14);
// Combine date variables for flexibility
var startDate = '2024-02-01';
var endDate = '2024-03-01';
// Function to add NDVI, NDWI, NDSI
var addIndices = function(image) {
  var ndvi = image.normalizedDifference(['NIR', 'RED']).rename('NDVI');
  var ndwi = image.normalizedDifference(['NIR', 'SWIR1']).rename('NDWI');
  var ndsi = image.normalizedDifference(['SWIR1', 'SWIR2']).rename('NDSI');
  return image.addBands(ndvi).addBands(ndwi).addBands(ndsi);
};
// Use fewer data points by filtering for cloud-free pixels only once
var sentinel = ee.ImageCollection('COPERNICUS/S2_SR')
  .filterBounds(pointJSP)
  .filterDate(startDate, endDate)
  .filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 30));

Sử dụng xử lý dữ liệu hiệu quả cho GEE để giảm thiểu độ trễ của tập lệnh

Giải pháp này tích hợp xử lý dữ liệu được tối ưu hóa bằng cách kết hợp các phép tính chỉ số và ngưỡng. JavaScript được áp dụng để xử lý Google Earth Engine.

var landsat8 = ee.ImageCollection('LANDSAT/LC08/C01/T1_SR')
  .filterBounds(pointJSP)
  .filterDate(startDate, endDate)
  .filter(ee.Filter.lt('CLOUD_COVER', 30));
// Apply water mask for permanent water areas
var waterMask = ee.Image('JRC/GSW1_4/GlobalSurfaceWater').select('occurrence').gt(80).unmask();
// Add indices to Landsat 8 imagery
var landsatIndices = landsat8.map(addIndices);
var composite = landsatIndices.reduce(ee.Reducer.percentile([30])).clip(pointJSP).mask(waterMask.eq(0));
Map.addLayer(composite, {bands: ['RED', 'GREEN', 'BLUE'], min: 0, max: 3000}, 'Landsat Composite');
Map.addLayer(waterMask, {min: 0, max: 1, palette: ['white', 'blue']}, 'Water Mask', false);

Cải thiện hiệu quả của các tập lệnh viễn thám

Một điều quan trọng cần cân nhắc khi làm việc với tập lệnh Google Earth Engine (GEE) là đảm bảo rằng các hoạt động được xử lý hiệu quả. Mặc dù việc sử dụng các bộ dữ liệu lớn như Sentinel và Landsat là phổ biến trong phân tích môi trường, nhưng khối lượng dữ liệu khổng lồ có thể làm chậm quá trình thực thi tập lệnh. Một phương pháp để cải thiện hiệu suất là đảm bảo rằng chỉ những dữ liệu cần thiết mới được xử lý. Sử dụng các lệnh như Và giảm thiểu kích thước tập dữ liệu, giúp hợp lý hóa việc tính toán. Việc chọn phạm vi ngày và vùng địa lý cụ thể có thể giảm đáng kể thời gian thực hiện.

Một khía cạnh khác ảnh hưởng đến hiệu suất của tập lệnh GEE là cách xử lý dữ liệu. Ví dụ về tập lệnh sử dụng hàm để tính toán các chỉ số quan trọng như NDVI, NDWI và NDSI. Các chỉ số này được thêm dưới dạng các dải vào bộ sưu tập hình ảnh, cho phép phân tích kỹ lưỡng hơn. Tuy nhiên, một lỗi phổ biến là áp dụng các hàm như vậy cho toàn bộ tập dữ liệu mà không lọc trước. Điều quan trọng là áp dụng các thao tác như vậy sau khi lọc để tránh các tính toán không cần thiết trên dữ liệu không liên quan.

Hình dung là một yếu tố khác của tập lệnh có thể được tối ưu hóa. Việc thêm quá nhiều lớp hoặc trực quan hóa phức tạp có thể làm giảm thời gian xử lý. Tập lệnh sử dụng các tham số trực quan được xác định trước để hiển thị các vật liệu tổng hợp, nhưng hiệu suất có thể được cải thiện bằng cách vô hiệu hóa các lớp nhất định trừ khi chúng thực sự cần thiết. Điều này giúp giữ cho tập lệnh nhẹ trong khi vẫn duy trì chức năng của nó. sử dụng các lệnh cũng đảm bảo rằng chỉ khu vực cần thiết được hiển thị, giảm gánh nặng xử lý tổng thể.

  1. Làm cách nào để cải thiện hiệu suất của tập lệnh GEE của tôi?
  2. Tối ưu hóa việc sử dụng , và giảm kích thước tập dữ liệu của bạn trước khi xử lý.
  3. Tại sao tập lệnh GEE của tôi mất nhiều thời gian để chạy?
  4. Bộ dữ liệu lớn và các phép tính phức tạp có thể làm chậm quá trình thực thi. Sử dụng Và để hạn chế xử lý ở các khu vực có liên quan.
  5. Tôi có thể giảm số lượng hình ảnh được xử lý trong GEE không?
  6. Có, bằng cách áp dụng để che phủ đám mây và tập trung vào các thời kỳ cụ thể.
  7. Làm cách nào để đơn giản hóa việc tính toán chỉ số trong tập lệnh của tôi?
  8. Sử dụng một chức năng như để hợp lý hóa việc thêm nhiều chỉ số (ví dụ: NDVI, NDWI) trong một bước.
  9. Có thể chỉ hình dung các lớp thiết yếu?
  10. Có, tắt các lớp không cần thiết và sử dụng các tham số trực quan hóa được đơn giản hóa với để có hiệu suất tốt hơn.

Tối ưu hóa tập lệnh Google Earth Engine bao gồm việc xử lý hiệu quả các tập dữ liệu lớn, áp dụng sớm các bộ lọc và giảm các thao tác dữ liệu không cần thiết. Tập trung vào các lĩnh vực thiết yếu như lọc theo và vị trí có thể giảm đáng kể thời gian xử lý.

Bằng cách kết hợp các chức năng như và sử dụng mặt nạ ngưỡng để loại bỏ dữ liệu không liên quan, hiệu suất tập lệnh có thể được cải thiện hơn nữa. Những kỹ thuật này có thể hợp lý hóa việc thực thi, mang lại kết quả nhanh hơn và sử dụng tốt hơn nền tảng Google Earth Engine.

  1. Bài viết này được tạo bằng cách sử dụng nội dung dựa trên tài liệu chính thức của Google Earth Engine, tài liệu này cung cấp thông tin chi tiết về kỹ thuật tối ưu hóa tập lệnh. Hướng dẫn về Công cụ Google Earth
  2. Thông tin bổ sung được thu thập từ diễn đàn cộng đồng GEE, đưa ra các cuộc thảo luận và giải pháp để cải thiện hiệu suất trong các tập lệnh phức tạp. Cộng đồng Google Earth Engine
  3. Các phương pháp hay nhất để xử lý các tập dữ liệu lớn được tham khảo từ các tài liệu và hướng dẫn về viễn thám có sẵn tại liên kết sau. Đài thiên văn Trái đất của NASA