Thực thi bị trì hoãn

Tài liệu Máy khách so với máy chủ mô tả cách các đối tượng được tham chiếu trong tập lệnh có thể là phía máy khách hoặc phía máy chủ. Tập lệnh hoàn chỉnh không chỉ chứa các đối tượng bạn muốn sử dụng mà còn chứa một tập hợp hướng dẫn cho Earth Engine biết phải làm gì với các đối tượng đó. Tài liệu này mô tả cách các hướng dẫn đó được gửi đến Google để xử lý và cách kết quả được gửi lại cho ứng dụng để hiển thị.

Khi bạn viết một tập lệnh trong Earth Engine (JavaScript hoặc Python), mã đó KHÔNG chạy trực tiếp trên các máy chủ Earth Engine của Google. Thay vào đó, thư viện ứng dụng sẽ mã hoá tập lệnh thành một tập hợp các đối tượng JSON, gửi các đối tượng đó đến Google và chờ phản hồi. Mỗi đối tượng đại diện cho một tập hợp các thao tác cần thiết để nhận một đầu ra cụ thể, chẳng hạn như một hình ảnh để hiển thị trong ứng dụng. Hãy xem xét mã sau:

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

var image = ee.Image('CGIAR/SRTM90_V4');
var operation = image.add(10);
print(operation.toString());
print(operation);

Thiết lập Python

Hãy xem trang Môi trường Python để biết thông tin về API Python và cách sử dụng geemap để phát triển tương tác.

import ee
import geemap.core as geemap

Colab (Python)

image = ee.Image('CGIAR/SRTM90_V4')
operation = image.add(10)
print(operation)
print(operation.getInfo())

Câu lệnh in đầu tiên sẽ xuất ra cấu trúc JSON mà thư viện ứng dụng sử dụng để mô tả hình ảnh đó cho máy chủ của Google:

ee.Image({
  "type": "Invocation",
  "arguments": {
    "image1": {
      "type": "Invocation",
      "arguments": {
        "id": "CGIAR/SRTM90_V4"
      },
      "functionName": "Image.load"
    },
    "image2": {
      "type": "Invocation",
      "arguments": {
        "value": 10
      },
      "functionName": "Image.constant"
    }
  },
  "functionName": "Image.add"
})
    

Câu lệnh in thứ hai sẽ gửi yêu cầu đến Google và xuất ra phản hồi POST từ máy chủ Google. Để xem toàn bộ phản hồi ở định dạng JSON, hãy nhấp vào đường liên kết JSON ở bên phải bảng điều khiển, bên cạnh đối tượng đã in:

{
  "type": "Image",
  "bands": [
    {
      "id": "elevation",
      "data_type": {
        "type": "PixelType",
        "precision": "int",
        "min": -32758,
        "max": 32777
      },
      "crs": "EPSG:4326",
      "crs_transform": [
        0.0008333333535119891,
        0,
        -180,
        0,
        -0.0008333333535119891,
        60
      ]
    }
  ]
}
    

Không có dữ liệu nào được gửi đến Google để xử lý cho đến khi có yêu cầu. Trong ví dụ này, việc in kết quả của lệnh gọi getInfo() trên đối tượng máy chủ sẽ kích hoạt một yêu cầu. Không có hoạt động xử lý nào được thực hiện trên máy chủ cho đến khi kết quả đó được yêu cầu rõ ràng. Xin lưu ý rằng print() trong Trình soạn thảo mã JavaScript là một hàm đặc biệt ở phía máy khách bao bọc lệnh gọi getInfo() không đồng bộ; đối với Python, chúng ta gọi hàm này trực tiếp.

Một ví dụ khác về việc yêu cầu một nội dung nào đó là hiển thị nội dung đó trên Trình soạn thảo mã hoặc phần tử bản đồ geemap. Khi yêu cầu này được gửi đến Google, hệ thống sẽ chỉ trả về các ô cần thiết để hiển thị kết quả trong Trình soạn thảo mã hoặc phần tử bản đồ geemap. Cụ thể, vị trí của bản đồ và mức thu phóng sẽ xác định dữ liệu nào được xử lý và chuyển thành hình ảnh có thể hiển thị trên bản đồ. Nếu bạn kéo hoặc thu phóng, hãy lưu ý rằng các thẻ thông tin khác sẽ được tính toán một cách lười biếng. Hệ thống theo yêu cầu này cho phép xử lý song song và hiệu quả, nhưng cũng có nghĩa là hình ảnh hiển thị trên bản đồ được tạo từ nhiều dữ liệu đầu vào khác nhau tuỳ thuộc vào mức thu phóng và vị trí của ranh giới bản đồ. Tìm hiểu thêm về cách xác định dữ liệu đầu vào cho một phép tính từ yêu cầu trong tài liệu về Điều chỉnh theo tỷ lệ.