Obliczenia na tabelach za pomocą interfejsu Earth Engine REST API

Uwaga: interfejs API REST zawiera nowe i zaawansowane funkcje, które mogą nie być odpowiednie dla wszystkich użytkowników. Jeśli dopiero zaczynasz korzystać z Earth Engine, zapoznaj się z przewodnikiem po JavaScript.

tym krótkim wprowadzeniu do interfejsu Earth Engine REST API dowiesz się, jak uzyskać dostęp do bloków pikseli z zasobu Earth Engine. W przykładzie obliczania pikseli pokazujemy, jak zastosować obliczenia do pikseli przed uzyskaniem wyniku. Ten przykład pokazuje, jak uzyskać średnią pikseli na każdym obrazie ImageCollection w każdej funkcji FeatureCollection. Jest to żądanie POST do punktu końcowego computeFeatures.

Zanim zaczniesz

Postępuj zgodnie z tymi instrukcjami, aby:

  1. Zgłaszanie się do Earth Engine
  2. Tworzenie projektu Google Cloud
  3. Włącz interfejs Earth Engine API w projekcie.
  4. Tworzenie konta usługi
  5. Przyznaj kontu usługi uprawnienia na poziomie projektu do wykonywania obliczeń w Earth Engine.

Uwaga: aby wykonać zadania z tego samouczka, musisz mieć konto usługi zarejestrowane w Earth Engine. Zanim przejdziesz dalej, zapoznaj się z tymi instrukcjami, aby zarejestrować konto usługi.

Uwierzytelnianie w Google Cloud

Najpierw musisz się zalogować, aby móc wysyłać uwierzytelnione żądania do Google Cloud. Projekt skonfigurujesz w tym samym czasie. Aby dokończyć logowanie, postępuj zgodnie z instrukcjami w wyniku.

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

!gcloud auth login --project {PROJECT}

Uzyskiwanie pliku klucza prywatnego konta usługi

Aby korzystać z Earth Engine, musisz mieć zarejestrowane konto usługi. Jeśli nie masz konta, wykonaj te instrukcje, aby je utworzyć. Skopiuj adres e-mail konta usługi do następnej komórki. (Aby korzystać z Earth Engine, konto usługi musi być już zarejestrowane). W następnej komórce wiersz poleceń gsutil służy do wygenerowania pliku klucza dla konta usługi. Plik klucza zostanie utworzony na maszynie wirtualnej notatnika.

# 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}

Rozpocznij AuthorizedSession i sprawdź swoje dane logowania

Przetestuj klucz prywatny, używając go do uzyskania danych logowania. Użyj danych logowania, aby utworzyć autoryzowaną sesję do wysyłania żądań HTTP. Wyślij GETprośbę w ramach sesji, aby sprawdzić, czy dane logowania działają.

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))

Serializowanie obliczeń

Zanim wyślesz żądanie obliczeń, musisz przekształcić je w format wykresu wyrażeń Earth Engine. Poniżej pokazujemy, jak uzyskać wykres wyrażeń.

Uwierzytelnianie w Earth Engine

Pobierz z konta usługi dane logowania Earth Engine o ograniczonym zakresie. Użyj ich do zainicjowania 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)

Określanie obliczeń

Utwórz prototyp prostego obliczenia za pomocą interfejsu API klienta. Pamiętaj, że wynikiem obliczeń jest FeatureCollection. Aby sprawdzić, czy obliczenia mogą się powieść bez błędów, pobierz wartość z pierwszego Feature (średnia wartość NDVI w wielokącie).

# 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())

Serializowanie wykresu wyrażeń

Spowoduje to utworzenie obiektu reprezentującego wykres wyrażeń Earth Engine (a konkretnie Expression). Zwykle należy je tworzyć za pomocą jednego z interfejsów API klienta.

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

Wysyłanie żądania

Wyślij żądanie POST do punktu końcowego computeFeatures. Pamiętaj, że żądanie zawiera Expression, czyli serializowany wynik obliczeń.

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))

Odpowiedź zawiera wynikowy obiekt FeatureCollection w formacie GeoJSON, który może być używany przez inne aplikacje lub procesy.