Earth Engine unterstützt Assets, die auf Cloud-optimierten GeoTIFFs (COGs) basieren. Ein Vorteil von COG-basierten Assets ist, dass die räumlichen und Metadatenfelder des Bildes bei der Erstellung des Assets indexiert werden. Dadurch ist das Bild in Sammlungen leistungsfähiger. Die Leistung von COG-basierten Assets ist in typischen Anwendungsfällen mit der von aufgenommenen Assets vergleichbar.
Ein einzelnes Asset kann auf mehreren COGs basieren (z. B. ein COG pro Band). Die Verwendung vieler COG-Kacheln für ein einzelnes Band wird jedoch nicht unterstützt.
Alternativ kann Earth Engine Bilder direkt aus COGs in Google Cloud
Storage (weitere
Informationen).
Für ein Bild, das über ee.Image.loadGeoTIFF geladen und einer Bildsammlung hinzugefügt wurde, muss das GeoTIFF jedoch gelesen werden, um Filtervorgänge für die Sammlung auszuführen.
So erstellen Sie ein COG-basiertes Asset:
- Platzieren Sie Ihre COG-Dateien in einem GCS-Bucket (siehe Standort für die zulässigen Regionen).
- Manifest für den Bild-Upload erstellen
- Verwenden Sie das Befehlszeilenprogramm
earthengine, um einen Upload-Befehl zu senden:
earthengine upload external_image --manifest my_manifest.json
Beispiel für ein Bildmanifest mit einem Tileset
Das einfachste ImageManifest enthält ein einzelnes Tileset. Wenn keine Bänder angegeben sind, enthält das resultierende Asset alle Bänder des GeoTIFF mit den in GeoTIFF codierten Bandnamen (in diesem Fall „vis-red“, „vis-green“ und „vis-blue“).
request = {
'imageManifest': {
'name': f'projects/{ee_project}/assets/cogdemo1',
'tilesets': [
{ 'id': '0', 'sources': [ { 'uris': [
'gs://ee-docs-demos/COG_demo.tif'] } ] }
],
'properties': {
'version': '1.1'
},
'startTime': '2016-01-01T00:00:00.000000000Z',
'endTime': '2016-12-31T15:01:23.000000000Z',
},
}
pprint(request)
Mehr als ein Tileset
Es ist möglich, ein ImageManifest mit mehr als einem Tileset anzugeben, wobei jedes Band des resultierenden Assets mit einem der Bänder eines Tileset über die Felder tilesetId und tilesetBandIndex verknüpft ist. Dies ist nützlich, wenn verschiedene Bänder unterschiedliche Auflösungen oder Datentypen haben. Bänder können in beliebiger Reihenfolge aus einem beliebigen verfügbaren Tileset aufgelistet werden. Im folgenden Beispiel gilt:
- „b4b3b2.tif“ hat einen Maßstab von 10 m, während „b5b6b7“ einen Maßstab von 20 m hat.
- Die Bandreihenfolge des resultierenden Assets ist aus den Eingabe-COGs gemischt (z.B. stammt das Ausgabeband 0 aus
Tileset0, während das Ausgabeband 1 ausTileset1 stammt).
request = {
'imageManifest': {
'name': f'projects/{ee_project}/assets/cogdemo2',
'uriPrefix': 'gs://ee-docs-demos/external_image_demo/',
'tilesets': [
{ 'id': '0', 'sources': [ { 'uris': ['b4b3b2.tif'] } ] },
{ 'id': '1', 'sources': [ { 'uris': ['b5b6b7.tif'] } ] },
],
'bands': [
{ 'id': 'red', 'tilesetId': '0', 'tilesetBandIndex': 0 },
{ 'id': 'rededge3', 'tilesetId': '1', 'tilesetBandIndex': 2 },
{ 'id': 'rededge2', 'tilesetId': '1', 'tilesetBandIndex': 1 },
{ 'id': 'green', 'tilesetId': '0', 'tilesetBandIndex': 1 },
{ 'id': 'blue', 'tilesetId': '1', 'tilesetBandIndex': 0 },
{ 'id': 'rededge1', 'tilesetId': '0', 'tilesetBandIndex': 2 },
],
},
}
pprint(request)
Details zu COG-basierten Assets
Standort
Der Standort des Cloud Storage-Buckets muss einer der folgenden sein:
- Die Multiregion „USA“
- Eine beliebige duale Region in den USA, die US-CENTRAL1 umfasst
- Die Region US-CENTRAL1
Speicherklasse
Die Speicher klasse des Buckets muss „Standard Storage“ sein.
Berechtigungen für die Freigabe
Die ACLs von COG-basierten Earth Engine-Assets und den zugrunde liegenden Daten werden separat verwaltet. Wenn Sie COG-basierte Assets für die Lesezugriffe mit Mitarbeitern teilen, liegt es in der Verantwortung des Eigentümers, dafür zu sorgen, dass sowohl für das Earth Engine-Asset als auch für die zugrunde liegenden COG-Dateien Lesezugriff gewährt wird.
1. Berechtigungen für das Lesen von Google Cloud Storage-Buckets gewähren
Damit Mitarbeiter COG-basierte Assets lesen können, müssen sie zuerst Lesezugriff auf die zugrunde liegenden COG-Dateien im Google Cloud Storage-Bucket haben. Ohne diese Berechtigungen kann Earth Engine die Daten nicht für sie abrufen. Wenn die Daten in Google Cloud Storage für einen Earth Engine-Nutzer nicht sichtbar sind, gibt Earth Engine einen Fehler im Format „Failed to load the GeoTIFF at gs://my-bucket/my-object#123456“ zurück (wobei 123456 die Generation des Objekts ist).
Mitarbeiter benötigen die folgenden Berechtigungen:
storage.buckets.getfür den Bucket (zum Abrufen von Bucket-Metadaten und -Standort, damit Earth Engine die Quelle des Assets richtig auflösen kann).storage.objects.getfür den Bucket (zum Lesen der tatsächlichen COG-basierten Asset-Daten).
Diese Berechtigungen werden unter anderem durch die Rollen „Leser alter Storage-Buckets“ und „Leser alter Storage-Objekte“ gewährt.
So weisen Sie Mitarbeitern diese Rollen zu:
- Rufen Sie die Seite mit den Bucket-Berechtigungen auf:
https://console.cloud.google.com/storage/browser/{MY-BUCKET};tab=permissions - Klicken Sie auf ZUGRIFF GEWÄHREN.
- Fügen Sie alle Hauptkonten (z.B. Nutzer, Gruppen, Dienstkonten) hinzu, denen Lesezugriff gewährt werden soll.
- Weisen Sie die folgenden Rollen zu:
- "Leser alter Storage-Buckets" (gewährt
storage.buckets.getund andere Leseberechtigungen auf Bucket-Ebene). - Leser alter Storage-Objekte (gewährt
storage.objects.get). - Alternativ können Sie eine neue benutzerdefinierte Rolle mit den Berechtigungen
storage.buckets.getundstorage.objects.geterstellen und diese zuweisen.
- "Leser alter Storage-Buckets" (gewährt
- Speichern
2. Earth Engine-Asset für Lesezugriff freigeben
Nachdem Sie dafür gesorgt haben, dass Ihre Mitarbeiter die erforderlichen Berechtigungen für den zugrunde liegenden GCS-Bucket und die Objekte haben, müssen Sie auch das Earth Engine-Asset selbst freigeben. Weitere Informationen zum Festlegen von Berechtigungen für Earth Engine-Assets finden Sie im Leitfaden zur Verwaltung von Earth Engine-Assets.
Generierungen
Wenn ein COG-basiertes Asset erstellt wird, liest Earth Engine die Metadaten der im Manifest angegebenen TIFFs und erstellt einen Asset-Speichereintrag. Jeder mit diesem Eintrag verknüpfte URI kann eine Generation haben. Weitere Informationen zu
Generationen finden Sie in der Dokumentation zur Objektversionsverwaltung. Wenn eine Generation angegeben ist, z. B. gs://foo/bar#123, speichert Earth Engine diesen URI unverändert. Wenn keine Generation angegeben ist, speichert Earth Engine diesen URI mit der Generation des TIFFs zum Zeitpunkt des Aufrufs von ImportExternalImage.
Wenn also ein TIFF, das ein externes Asset in GCS enthält, aktualisiert wird (wodurch sich die Generation ändert), gibt Earth Engine den Fehler „Failed to load the GeoTIFF at gs://my-bucket/my-object#123456“ zurück, da das erwartete Objekt nicht mehr vorhanden ist (es sei denn, im Bucket sind mehrere Objektversionen aktiviert).
Diese Richtlinie soll dafür sorgen, dass die Metadaten des Assets mit den Metadaten des Objekts synchronisiert werden.
Konfiguration
In Bezug auf die Konfiguration eines COG muss das TIFF Folgendes sein:
Gekachelt, wobei die Kachelabmessungen entweder:
- 256 × 256
- 512 × 512
- 1024 × 1024
- 2048 × 2048
So angeordnet, dass sich alle IFDs am Anfang befinden.
Für eine optimale Leistung:
- Verwenden Sie Kachelabmessungen von mindestens 512 × 512.
- Fügen Sie Übersichten mit Zweierpotenzen hinzu.
Je nach Anwendungsfall kann sich die „INTERLEAVE“ Erstellungsoption auf die Leistung auswirken. Wir empfehlen, unter allen Umständen die Band-Interleave-Option zu verwenden.
Weitere Informationen zu einer optimierten Konfiguration finden Sie auf dieser Seite.
Mit dem folgenden gdal_translate-Befehl wird ein Raster in ein bandweise verschachteltes, mit zstd komprimiertes, Cloud-optimiertes GeoTIFF konvertiert, das in Earth Engine gut funktioniert:
gdal_translate in.tif out.tif \
-co COPY_SRC_OVERVIEWS=YES \
-co TILED=YES \
-co BLOCKXSIZE=512 \
-co BLOCKYSIZE=512 \
-co COMPRESS=ZSTD \
-co ZSTD_LEVEL=22 \
-co INTERLEAVE=BAND \
-co NUM_THREADS=ALL_CPUS
Möglicherweise lässt sich die Ausgabedateigröße weiter reduzieren, indem Sie einen
Prädiktor
(-co PREDICTOR=2 für Ganzzahldatentypen und -co PREDICTOR=3 für Gleitkomma
datentypen) angeben.
Für Nutzer mit GDAL >= 3.11 kann der COG-Treiber Dateien erstellen, ohne dass Übersichten erstellt und beibehalten werden müssen.
gdal_translate in.tif out.tif \
-of COG \
-co OVERVIEWS=IGNORE_EXISTING \
-co COMPRESS=ZSTD \
-co LEVEL=22 \
-co PREDICTOR=2 \
-co INTERLEAVE=BAND \
-co NUM_THREADS=ALL_CPUS \
Cloud-GeoTIFF-basierte Assets mit der REST API erstellen
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.
Um ein COG-basiertes Asset mit der REST API zu erstellen, senden Sie eine POST Anfrage an den
Earth Engine ImportExternalImage
Endpunkt.
Wie unten gezeigt, muss diese Anfrage autorisiert sein, um ein Asset in Ihrem Nutzerordner zu erstellen.
Autorisierte Sitzung starten
Damit Sie ein Earth Engine-Asset in Ihrem Nutzerordner erstellen können, müssen Sie sich bei der Anfrage als Sie selbst authentifizieren können. Sie können
Anmeldedaten aus dem Earth Engine-Authenticator verwenden, um eine
AuthorizedSession zu starten.
Anschließend können Sie die AuthorizedSession verwenden, um Anfragen an Earth Engine zu senden.
import ee
import json
from pprint import pprint
from google.auth.transport.requests import AuthorizedSession
ee.Authenticate() # or !earthengine authenticate --auth_mode=gcloud
# Specify the cloud project you want associated with Earth Engine requests.
ee_project = 'your-project'
session = AuthorizedSession(
ee.data.get_persistent_credentials().with_quota_project(ee_project)
)
Anfragetext
Der Anfragetext ist eine Instanz von einem
ImageManifest.
Hier wird der Pfad zum COG zusammen mit anderen nützlichen Eigenschaften angegeben.
Weitere Informationen zum Konfigurieren eines ImageManifest finden Sie in diesem
Leitfaden. Es ist möglich, ein oder mehrere Tileset zu definieren, wobei jedes ein oder mehrere Bänder unterstützt. Für ImportExternalImage wird maximal eine ImageSource pro Tileset unterstützt.
Weitere Informationen zum Exportieren von COGs finden Sie in diesem Dokument.
Anfrage senden
Senden Sie die POST-Anfrage an den Earth Engine
projects.images.importExternal
Endpunkt.
url = f'https://earthengine.googleapis.com/v1alpha/projects/{ee_project}/image:importExternal'
response = session.post(
url = url,
data = json.dumps(request)
)
pprint(json.loads(response.content))
In Google Colab ausführen
Quelle auf GitHub ansehen