Tabellenberechnungen mit der Earth Engine REST API

Hinweis:Die REST API enthält neue und erweiterte Funktionen, die möglicherweise nicht für alle Nutzer geeignet sind. Wenn Sie Earth Engine noch nicht kennen, empfehlen wir Ihnen, mit dem JavaScript-Leitfaden zu beginnen.

Im Schnellstart zur Earth Engine REST API wird gezeigt, wie Sie auf Pixelblöcke aus einem Earth Engine-Asset zugreifen. Im Beispiel für die Berechnung von Pixeln wird gezeigt, wie eine Berechnung auf die Pixel angewendet wird, bevor das Ergebnis abgerufen wird. In diesem Beispiel wird gezeigt, wie Sie den Mittelwert der Pixel in jedem Bild eines ImageCollection in jedem Feature eines FeatureCollection abrufen. Konkret handelt es sich um eine POST-Anfrage an den Endpunkt computeFeatures.

Hinweis

Folgen Sie dieser Anleitung, um:

  1. Earth Engine beantragen
  2. Google Cloud-Projekt erstellen
  3. Earth Engine API für das Projekt aktivieren
  4. Dienstkonto erstellen
  5. Dienstkonto auf Projektebene die Berechtigung zum Ausführen von Earth Engine-Berechnungen erteilen

Hinweis: Für diese Anleitung benötigen Sie ein Dienstkonto, das für den Earth Engine-Zugriff registriert ist. Folgen Sie dieser Anleitung, um ein Dienstkonto zu registrieren, bevor Sie fortfahren.

Bei Google Cloud authentifizieren

Zuerst müssen Sie sich anmelden, damit Sie authentifizierte Anfragen an Google Cloud stellen können. Sie legen das Projekt gleichzeitig fest. Folgen Sie der Anleitung in der Ausgabe, um die Anmeldung abzuschließen.

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

!gcloud auth login --project {PROJECT}

Private Schlüsseldatei für Ihr Dienstkonto abrufen

Sie sollten bereits ein Dienstkonto registriert haben, um Earth Engine nutzen zu können. Falls nicht, folgen Sie dieser Anleitung. Kopieren Sie die E-Mail-Adresse Ihres Dienstkontos in die folgende Zelle. Das Dienstkonto muss bereits für die Verwendung von Earth Engine registriert sein. In der folgenden Zelle wird die gsutil-Befehlszeile verwendet, um eine Schlüsseldatei für das Dienstkonto zu generieren. Die Schlüsseldatei wird auf der Notebook-VM erstellt.

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

AuthorizedSession starten und Anmeldedaten testen

Testen Sie den privaten Schlüssel, indem Sie damit Anmeldedaten abrufen. Verwenden Sie die Anmeldedaten, um eine autorisierte Sitzung zum Senden von HTTP-Anfragen zu erstellen. Senden Sie über die Sitzung eine GET-Anfrage, um zu prüfen, ob die Anmeldedaten funktionieren.

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

Berechnung serialisieren

Bevor Sie eine Anfrage zum Berechnen von etwas senden können, muss die Berechnung in das Earth Engine-Ausdrucksdiagrammformat gebracht werden. Im Folgenden wird gezeigt, wie Sie den Ausdrucksgraphen abrufen.

Bei Earth Engine authentifizieren

Rufen Sie die auf Earth Engine beschränkten Anmeldedaten vom Dienstkonto ab. Verwenden Sie sie, um Earth Engine zu initialisieren.

import ee

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

Berechnung definieren

Mit der Client API können Sie einen einfachen Rechenvorgang prototypisieren. Das Ergebnis der Berechnung ist ein FeatureCollection. Um zu prüfen, ob die Berechnung ohne Fehler ausgeführt werden kann, rufen Sie einen Wert aus dem ersten Feature ab (der durchschnittliche NDVI im Polygon).

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

Ausdrucksbaum serialisieren

Dadurch wird ein Objekt erstellt, das den Earth Engine-Ausdrucksgraphen darstellt (genauer gesagt ein Expression). Im Allgemeinen sollten Sie diese mit einer der Client-APIs erstellen.

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

Anfrage senden

Stellen Sie eine POST-Anfrage an den Endpunkt computeFeatures. Die Anfrage enthält Expression, die serialisierte Berechnung.

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

Die Antwort enthält das resultierende FeatureCollection als GeoJSON, das von anderen Apps oder Prozessen verwendet werden kann.