Tính toán bảng bằng Earth Engine REST API

Lưu ý: REST API có các tính năng mới và nâng cao có thể không phù hợp với một số người dùng. Nếu bạn mới sử dụng Earth Engine, vui lòng bắt đầu bằng hướng dẫn về JavaScript.

Hướng dẫn khởi động nhanh về Earth Engine REST API cho biết cách truy cập vào các khối pixel từ một thành phần Earth Engine. Ví dụ về tính toán pixel minh hoạ cách áp dụng một phép tính cho các pixel trước khi nhận được kết quả. Ví dụ này minh hoạ cách lấy giá trị trung bình của các pixel trong mỗi hình ảnh của một ImageCollection trong mỗi đối tượng của một FeatureCollection. Cụ thể, đây là yêu cầu POST đối với điểm cuối computeFeatures.

Trước khi bắt đầu

Hãy làm theo các hướng dẫn này để:

  1. Đăng ký sử dụng Earth Engine
  2. Tạo một dự án trên Google Cloud
  3. Bật Earth Engine API trên dự án
  4. Tạo một tài khoản dịch vụ
  5. Cấp cho tài khoản dịch vụ quyền ở cấp dự án để thực hiện các phép tính trên Earth Engine

Lưu ý: Để hoàn tất hướng dẫn này, bạn sẽ cần có một tài khoản dịch vụ đã đăng ký quyền truy cập vào Earth Engine. Hãy xem các hướng dẫn này để đăng ký tài khoản dịch vụ trước khi tiếp tục.

Xác thực với Google Cloud

Điều đầu tiên cần làm là đăng nhập để bạn có thể đưa ra các yêu cầu đã xác thực cho Google Cloud. Bạn sẽ thiết lập dự án cùng lúc. Làm theo hướng dẫn trong đầu ra để hoàn tất quá trình đăng nhập.

# INSERT YOUR PROJECT HERE
PROJECT = 'your-project'

!gcloud auth login --project {PROJECT}

Lấy tệp khoá riêng tư cho tài khoản dịch vụ của bạn

Bạn phải có một tài khoản dịch vụ đã đăng ký để sử dụng Earth Engine. Nếu bạn chưa có, hãy làm theo các hướng dẫn này để lấy một mã. Sao chép địa chỉ email của tài khoản dịch vụ vào ô sau. (Bạn phải đăng ký tài khoản dịch vụ để sử dụng Earth Engine). Trong ô sau, dòng lệnh gsutil được dùng để tạo một tệp khoá cho tài khoản dịch vụ. Tệp khoá sẽ được tạo trên VM của sổ tay.

# INSERT YOUR SERVICE ACCOUNT HERE
SERVICE_ACCOUNT='your-service-account@your-project.iam.gserviceaccount.com'
KEY = 'key.json'

!gcloud iam service-accounts keys create {KEY} --iam-account {SERVICE_ACCOUNT}

Bắt đầu AuthorizedSession và kiểm tra thông tin đăng nhập của bạn

Kiểm thử khoá riêng tư bằng cách sử dụng khoá này để lấy thông tin đăng nhập. Sử dụng thông tin xác thực để tạo một phiên được uỷ quyền nhằm thực hiện các yêu cầu HTTP. Đưa ra yêu cầu GET thông qua phiên để kiểm tra xem thông tin đăng nhập có hoạt động hay không.

from google.auth.transport.requests import AuthorizedSession
from google.oauth2 import service_account

credentials = service_account.Credentials.from_service_account_file(KEY)
scoped_credentials = credentials.with_scopes(
    ['https://www.googleapis.com/auth/cloud-platform'])

session = AuthorizedSession(scoped_credentials)

url = 'https://earthengine.googleapis.com/v1beta/projects/earthengine-public/assets/LANDSAT'

response = session.get(url)

from pprint import pprint
import json
pprint(json.loads(response.content))

Tuần tự hoá một phép tính

Trước khi bạn có thể gửi yêu cầu tính toán một nội dung nào đó, nội dung tính toán cần được đưa vào định dạng biểu đồ biểu thức Earth Engine. Sau đây minh hoạ cách lấy biểu đồ biểu thức.

Xác thực với Earth Engine

Nhận thông tin đăng nhập có phạm vi Earth Engine từ tài khoản dịch vụ. Sử dụng các khoá này để khởi chạy Earth Engine.

import ee

# Get some new credentials since the other ones are cloud scope.
ee_creds = ee.ServiceAccountCredentials(SERVICE_ACCOUNT, KEY)
ee.Initialize(ee_creds)

Xác định một phép tính

Tạo nguyên mẫu cho một phép tính đơn giản bằng API ứng dụng. Lưu ý rằng kết quả của phép tính là một FeatureCollection. Để kiểm tra xem quá trình tính toán có thể thành công mà không gặp lỗi hay không, hãy lấy một giá trị từ Feature đầu tiên (NDVI trung bình trong đa giác).

# A collection of polygons.
states = ee.FeatureCollection('TIGER/2018/States')
maine = states.filter(ee.Filter.eq('NAME', 'Maine'))

# Imagery: NDVI vegetation index from MODIS.
band = 'NDVI'
images = ee.ImageCollection('MODIS/006/MOD13Q1').select(band)
image = images.first()

computation = image.reduceRegions(
  collection=maine, 
  reducer=ee.Reducer.mean().setOutputs([band]), 
  scale=image.projection().nominalScale()
)

# Print the value to test.
print(computation.first().get(band).getInfo())

Tuần tự hoá biểu đồ biểu thức

Thao tác này sẽ tạo một đối tượng đại diện cho biểu đồ biểu thức Earth Engine (cụ thể là Expression). Nhìn chung, bạn nên tạo các đối tượng này bằng một trong các API ứng dụng.

# Serialize the computation.
serialized = ee.serializer.encode(computation)

Gửi yêu cầu

Gửi yêu cầu POST đến điểm cuối computeFeatures. Xin lưu ý rằng yêu cầu này chứa Expression, là phép tính được chuyển đổi tuần tự.

import json

url = 'https://earthengine.googleapis.com/v1beta/projects/{}/table:computeFeatures'

response = session.post(
  url = url.format(PROJECT),
  data = json.dumps({'expression': serialized})
)

import json
pprint(json.loads(response.content))

Phản hồi chứa FeatureCollection kết quả dưới dạng GeoJSON, có thể được các ứng dụng hoặc quy trình khác sử dụng.