Earth Engine unterstützt Assets, die auf Cloud-optimierten GeoTIFFs (COGs) basieren und in Google Cloud Storage (GCS) gespeichert sind.
Wenn Sie ein COG-basiertes Asset registrieren, indexiert Earth Engine die räumlichen und Metadatenfelder des Bildes zum Zeitpunkt der Erstellung. Dadurch ist das Bild leistungsstark wenn es in Sammlungen verwendet wird. Die Leistung ist mit der von standardmäßig aufgenommenen Assets vergleichbar (siehe die Übersicht zu Cloud-optimierten GeoTIFFs (COGs)).
Voraussetzungen und Cloud Storage-Einrichtung
Bevor Sie ein COG registrieren, müssen Sie Ihre Google Cloud Storage Ressourcen korrekt einrichten.
1. Bucket-Standort (zwingende Voraussetzung)
Damit Earth Engine auf Ihren Cloud Storage-Bucket zugreifen kann, muss sich der Bucket in einer der folgenden Rechenzentrumsregionen oder Multi-Regionen befinden:
- Die Multi-Region
us - Jede US-Dual-Region , die
us-central1enthält - Die Region
us-central1
Wenn sich Ihr Bucket in einem anderen regionalen Rechenzentrum befindet (z. B. us-east4 oder europe-west1), lehnt Earth Engine Registrierungs- und Leseanfragen ab.
2. Speicherklasse und Abrechnung
- Wir empfehlen die Verwendung der Speicherklasse Standard. Für den Standard Storage gelten keine Regeln zur Mindestspeicherdauer. So werden keine Gebühren für die vorzeitige Löschung berechnet, wenn Sie temporäre Dateien aktualisieren oder ersetzen.
- Bei Earth Engine-Berechnungsschleifen fallen keine Aufschläge für den Datenabruf aus Cloud Storage an. Wenn Sie jedoch mit externen Tools (z. B. Desktop-GIS-Software) auf Speicherklassen zugreifen, die nicht dem Standard Storage entsprechen, fallen hohe Abrufgebühren an.
- Die Abrechnung muss für Ihr Google Cloud-Projekt aktiviert sein, damit Sie GCS verwenden können. Weitere Informationen finden Sie in der Kurzanleitung zu Google Cloud Storage.
Schritt 1: COGs vorbereiten
Ihre TIFF-Dateien müssen für die Cloud optimiert sein. Das TIFF muss folgende Anforderungen erfüllen:
- Gekachelt mit Kachelgrößen von 256 × 256, 512 × 512, 1.024 × 1.024 oder 2.048 × 2.048. Für eine optimale Leistung empfehlen wir 512 × 512 oder höher.
- So angeordnet, dass sich alle Image File Directories (IFDs) am Anfang befinden.
- Übersichten mit Zweierpotenzen enthalten.
- BAND -Interleave verwenden.
Sie können Ihre Bilder mit GDAL konvertieren.
GDAL COG-Treiber verwenden (GDAL >= 3.1 empfohlen):
gdal_translate in.tif out.tif \
-of COG \
-co BIGTIFF=YES \
-co OVERVIEWS=IGNORE_EXISTING \
-co COMPRESS=ZSTD \
-co LEVEL=16 \
-co BLOCKSIZE=512 \
-co INTERLEAVE=BAND \
-co NUM_THREADS=ALL_CPUS \
-co PREDICTOR=2 # 2 for integers, 3 for floating point
Standard-GTiff-Treiber verwenden:
Generieren Sie zuerst interne Übersichten mit Zweierpotenzen (mit
gdal raster overview add
oder gdaladdo) und kopieren Sie dann
das Bild und die Übersichten in ein gekacheltes COG-Layout:
gdaladdo -r nearest in.tif 2 4 8 16 32 # or -r cubic for continuous/float data
gdal_translate in.tif out.tif \
-co BIGTIFF=YES \
-co COPY_SRC_OVERVIEWS=YES \
-co TILED=YES \
-co BLOCKXSIZE=512 \
-co BLOCKYSIZE=512 \
-co COMPRESS=ZSTD \
-co ZSTD_LEVEL=16 \
-co INTERLEAVE=BAND \
-co NUM_THREADS=ALL_CPUS \
-co PREDICTOR=2 # 2 for integers, 3 for floating point
Schritt 2: Manifest erstellen
Unabhängig davon, ob Sie ein COG mit der Earth Engine-Python-Clientbibliothek, dem Befehlszeilentool earthengine oder der Earth Engine REST API registrieren, müssen Sie ein Manifest für den Bild-Upload definieren, in dem das Ziel-Asset, die Google Cloud Storage-URIs und optionale Band-Metadaten angegeben sind.
Beispiel: Ein einzelnes COG für alle Bänder Wenn Ihr COG alle Bänder enthält (z.B. RGB), ist im Manifest nur ein Tileset erforderlich:
{
"name": "projects/my-project/assets/my_cog_asset",
"tilesets": [
{
"id": "default_tileset",
"sources": [
{
"uris": [
"gs://google-sample-bucket/my_optimized_image.tif"
]
}
]
}
]
}
Beispiel: Mehrere COGs (eines pro Band) Wenn Sie separate Dateien für verschiedene Bänder haben (z.B. Rot, Grün, Blau in separaten Dateien):
{
"name": "projects/my-project/assets/my_multi_band_cog",
"tilesets": [
{
"id": "red_tileset",
"sources": [ { "uris": [ "gs://google-sample-bucket/band_red.tif" ] } ]
},
{
"id": "green_tileset",
"sources": [ { "uris": [ "gs://google-sample-bucket/band_green.tif" ] } ]
}
],
"bands": [
{ "id": "R", "tilesetId": "red_tileset", "tilesetBandIndex": 0 },
{ "id": "G", "tilesetId": "green_tileset", "tilesetBandIndex": 0 }
]
}
Schritt 3: Registrierungsanfrage senden
Sie können Ihr Manifest mit der Earth Engine-Python-Clientbibliothek, dem Befehlszeilentool earthengine oder der Earth Engine REST API an Earth Engine senden. Wählen Sie die Methode aus, die am besten zu Ihrem Workflow passt.
Python-Clientbibliothek
Verwenden Sie in einem Python-Skript oder Jupyter-Notebook die Earth Engine-Python
Clientbibliothek (ee.data), nachdem Sie Ihr Projekt initialisiert haben:
import ee # 1. Authenticate and initialize ee.Authenticate() ee.Initialize(project='your-project-id') # 2. Define the manifest as a Python dictionary manifest = { "name": "projects/your-project-id/assets/my_cog_asset", "tilesets": [ { "id": "default_tileset", "sources": [ { "uris": [ "gs://google-sample-bucket/my_optimized_image.tif" ] } ] } ] } # 3. Start the ingestion task (allow_overwrite=True corresponds to --force) result = ee.data.startExternalImageIngestion(manifest, allow_overwrite=True) print(f"Asset registered: {result['name']}")
Befehlszeilentool
Speichern Sie Ihr Manifest im Terminal in einer Datei mit dem Namen
manifest.json und führen Sie den earthengine Upload
Befehl aus:
# 1. Verify your environment is authenticated earthengine authenticate # 2. Submit the external image upload task earthengine --project your-project-id \ upload external_image \ --manifest manifest.json
REST API (Python)
Senden Sie für automatisierte Workflows ohne die Clientbibliothek eine autorisierte
POST Anfrage direkt an den Earth Engine REST API-Endpunkt
projects.image.importExternal (hier mit
Python dargestellt):
import json from pprint import pprint import ee from google.auth.transport.requests import AuthorizedSession # 1. Authenticate and start an authorized HTTP session ee.Authenticate() ee_project = 'your-project-id' session = AuthorizedSession( ee.data.get_persistent_credentials().with_quota_project(ee_project) ) # 2. Define the REST request body wrapping the manifest request = { 'imageManifest': { 'name': f'projects/{ee_project}/assets/my_cog_asset', 'tilesets': [ { 'id': 'default_tileset', 'sources': [ { 'uris': [ 'gs://google-sample-bucket/my_optimized_image.tif' ] } ] } ] } } # 3. Send the POST request url = ( 'https://earthengine.googleapis.com/v1alpha/' f'projects/{ee_project}/image:importExternal' ) response = session.post(url=url, data=json.dumps(request)) pprint(json.loads(response.content))
Nach dem Senden wird mit der Registrierungsanfrage ein einfacher Metadatenindexierungsvorgang gestartet. Da bei der COG-Registrierung keine Pixeldaten kopiert werden, ist dieser Vorgang in der Regel in wenigen Sekunden abgeschlossen.
Manifesteinschränkungen für COG-Assets
Beachten Sie beim Erstellen eines Manifests für COG-basierte Assets die folgenden strengen Einschränkungen (die sich von Standardmanifesten für die Aufnahme unterscheiden):
- Ein einzelner Bucket:Alle URIs im Manifest müssen sich im selben GCS-Bucket befinden.
- Ein URI pro Quelle:Jede
ImageSourcemuss genau einen URI enthalten. Sie können nicht mehrere Dateien zu einer einzelnen Tileset-Quelle zusammenfügen. Wenn Sie mehrere COG-Szenen zusammenfügen möchten, registrieren Sie jedes COG als Asset und kombinieren Sie sie mit.mosaic()zu eineree.ImageCollection. - Keine
mask_bands: `mask_bands`mask_bandsauf oberster Ebene wird nicht unterstützt. Verwenden SiemissingDataim Manifest oder sorgen Sie dafür, dass Ihr TIFF einen internen Wert für „Keine Daten“ hat. - Kein
data_typeim Tileset: Geben Siedata_typenicht im Abschnitttilesetsan. Er wird automatisch erkannt. - Keine
dimensionsin der Quelle: Geben Siedimensionsnicht in derImageSourcean. - Kein
subdataset_prefix/subdataset_suffix. - Kein
min_tile_area_ratiooderskip_metadata_read.
Schritt 4: Berechtigungen konfigurieren (wichtig für die Freigabe)
Im Gegensatz zu Standard-Earth Engine-Assets bleiben die Pixeldaten eines COG in GCS. Wenn Sie ein COG-basiertes Asset für andere freigeben, müssen Sie ihnen Lesezugriff auf das Earth Engine-Asset und die GCS-Dateien gewähren.
1. Berechtigungen für GCS-Bucket gewähren
Mitarbeiter benötigen Berechtigungen, um die Dateien aus GCS zu lesen.
Erforderliche Berechtigungen :
storage.buckets.get(zum Abrufen von Bucket-Metadaten und ‑Standort)storage.objects.get(zum Lesen der Pixeldaten)
Sie können diese Berechtigungen mit den folgenden Standardrollen für Cloud Storage gewähren:
- Storage-Bucket-Betrachter (bietet
storage.buckets.getzum Lesen von Bucket-Metadaten und ‑Standort) - Storage-Objekt-Betrachter (bietet
storage.objects.getzum Lesen von Pixeldaten)
Konfigurationsschritte in der Google Cloud Console :
- Rufen Sie den Cloud Storage-Browser auf.
- Klicken Sie auf den Namen Ihres Buckets.
- Wählen Sie den Tab Berechtigungen aus.
- Klicken Sie auf ZUGRIFF GEWÄHREN.
- Fügen Sie die E-Mail-Adressen Ihrer Mitarbeiter hinzu (oder eine Google-Gruppe oder
allUsersfür öffentlichen Zugriff). - Weisen Sie die Rollen Storage-Bucket-Betrachter und Storage-Objekt-Betrachter zu.
- Klicken Sie auf Speichern.
2. Earth Engine-Asset freigeben
Geben Sie das Asset selbst mit dem Earth Engine Asset Manager oder der CLI frei. Weitere Informationen finden Sie in der Anleitung zur Asset-Verwaltung für Details.
Objektgenerationen verwalten
Wenn Sie ein COG registrieren, speichert Earth Engine die spezifische Generation (Version) des GCS-Objekts. Wenn Sie die Datei in GCS aktualisieren, ändert sich ihre Generation.
- Standardmäßig kann Earth Engine das Asset nicht laden und gibt einen Fehler zurück:
Failed to load the GeoTIFF at gs://google-sample-bucket/my-object#old-generation. - So wird verhindert, dass Metadaten (z. B. Projektion oder Footprint) mit den zugrunde liegenden Pixeln nicht mehr synchron sind.
Best Practice:Wenn Sie die zugrunde liegenden Bilddaten aktualisieren müssen, registrieren Sie sie als neues Asset oder führen Sie den Upload-Befehl mit dem Flag
--forcenoch einmal aus, anstatt Dateien direkt zu überschreiben:earthengine --project your-project-id upload external_image --force --manifest manifest.json
Registrierte Assets verwenden
Nach der Registrierung wird auf ein COG-basiertes Asset in Earth Engine-Skripten genauso zugegriffen wie auf jedes andere standardmäßig aufgenommene Bild-Asset:
JavaScript
var image = ee.Image('projects/your-project-id/assets/my_cog_asset');
Python
image = ee.Image('projects/your-project-id/assets/my_cog_asset')