Earth Engine supporta gli asset basati su COG (GeoTIFF ottimizzati per il cloud). Un vantaggio degli asset basati su COG è che i campi spaziali e dei metadati dell'immagine verranno indicizzati al momento della creazione dell'asset, migliorando le prestazioni dell'immagine nelle raccolte. Il rendimento degli asset basati su COG è paragonabile a quello degli asset importati nei casi d'uso tipici.
Tieni presente che un singolo asset può essere supportato da più COG (ad esempio, può essercene uno per fascia). Tuttavia, l'utilizzo di molti riquadri COG per una singola banda non è supportato.
In alternativa, Earth Engine può caricare direttamente le immagini dai COG in Google Cloud Storage (scopri di più).
Tuttavia, un'immagine caricata tramite ee.Image.loadGeoTIFF
e aggiunta a una raccolta di immagini richiederà la lettura del file GeoTiff per le operazioni di filtro sulla raccolta.
Per creare una risorsa basata su COG:
- Inserisci i file COG in un bucket GCS (vedi di seguito le regioni consentite).
- Scrivi un manifest per il caricamento di immagini
- Utilizza l'utilità a riga di comando
earthengine
per inviare un comando di caricamento:
earthengine upload external_image --manifest my_manifest.json
File manifest dell'immagine di esempio con un Tileset
Il ImageManifest
più semplice è quello con un singolo Tileset
. Se non vengono specificati, la risorsa risultante conterrà tutti i canali del file GeoTIFF con i nomi dei canali codificati nel file GeoTIFF (in questo caso, "vis-red", "vis-green" e "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)
Più di un Tileset
È possibile specificare un ImageManifest
con più di un Tileset
, dove ogni banda della risorsa risultante è supportata da una delle bande di un Tileset
utilizzando i campi tilesetId
e tilesetBandIndex
. Questo è utile nel caso in cui bande diverse abbiano risoluzioni o tipi di dati diversi. Le bande possono essere elencate in qualsiasi ordine da qualsiasi Tileset
disponibile. Nell'esempio seguente:
- "b4b3b2.tif" ha una scala di 10 m, mentre "b5b6b7" ha una scala di 20 m.
- L'ordine delle bande dell'asset risultante è misto da COG di input (ad es.
la banda di output 0 proviene da
Tileset
0, mentre la banda di output 1 proviene daTileset
1).
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)
Dettagli sugli asset basati su COG
Località
La località del bucket Cloud Storage deve essere una delle seguenti:
- La multiregione degli Stati Uniti
- Qualsiasi regione doppia degli Stati Uniti che include US-CENTRAL1
- La regione US-CENTRAL1
Classe di archiviazione
La classe di archiviazione del bucket deve essere "Spazio di archiviazione standard".
Autorizzazioni per la condivisione
Le ACL degli asset Earth Engine basati su COG e i dati sottostanti vengono gestiti distintamente. Quando condividi risorse basate su COG con i collaboratori per la lettura, è compito del proprietario assicurarsi che l'accesso in lettura sia concesso sia alla risorsa Earth Engine sia ai file COG sottostanti.
1. Concedi le autorizzazioni di lettura per il bucket Google Cloud Storage
Affinché i collaboratori possano leggere gli asset basati su COG, devono prima disporre dell'accesso in lettura ai file COG sottostanti nel bucket Google Cloud Storage. Senza queste autorizzazioni, Earth Engine non potrà recuperare i dati per loro. Se i dati in Google Cloud Storage non sono visibili a un utente di Earth Engine, Earth Engine restituirà un errore del tipo "Impossibile caricare il file GeoTIFF in gs://my-bucket/my-object#123456
" (dove 123456 è la generazione dell'oggetto).
In particolare, i collaboratori devono disporre delle seguenti autorizzazioni:
storage.buckets.get
sul bucket (per recuperare i metadati e la posizione del bucket, consentendo a Earth Engine di risolvere correttamente l'origine della risorsa).storage.objects.get
nel bucket (per leggere i dati effettivi degli asset basati su COG).
Queste autorizzazioni sono fornite dai ruoli "Storage Legacy Bucket Reader" e "Storage Legacy Object Reader", tra gli altri.
Per assegnare questi ruoli ai collaboratori:
- Vai alla pagina delle autorizzazioni del bucket:
https://console.cloud.google.com/storage/browser/{MY-BUCKET};tab=permissions
- Fai clic su "CONCEDI ACCESSO".
- Aggiungi tutte le entità (ad es. utenti, gruppi, account di servizio) a cui deve essere concesso l'accesso in lettura.
- Assegna i seguenti ruoli:
- "Storage Legacy Bucket Reader" (fornisce
storage.buckets.get
e altre autorizzazioni di lettura a livello di bucket). - "Lettore oggetti legacy Storage" (fornisce
storage.objects.get
). - In alternativa, puoi creare un nuovo ruolo personalizzato con solo le autorizzazioni
storage.buckets.get
estorage.objects.get
e assegnarlo.
- "Storage Legacy Bucket Reader" (fornisce
- Salva
2. Condividere l'asset Earth Engine per la lettura
Dopo aver verificato che i tuoi collaboratori dispongano delle autorizzazioni necessarie per gli oggetti e il bucket GCS sottostanti, devi anche condividere l'asset Earth Engine stesso. Per ulteriori informazioni sull'impostazione delle autorizzazioni delle risorse di Earth Engine, consulta la guida alla gestione delle risorse di Earth Engine.
Generazioni
Quando viene creato un asset basato su COG, Earth Engine legge i metadati dei file TIFF
specificati nel manifest e crea una voce dello Store asset. Ogni URI associato
a quella voce può avere una generazione. Per informazioni sulle generazioni, consulta la documentazione sul versionamento degli oggetti. Se viene specificata una generazione, ad esempio gs://foo/bar#123
, Earth Engine memorizza l'URI esattamente come è stato specificato. Se non viene specificata una generazione, Earth Engine memorizza l'URI con la generazione del TIFF al momento dell'esecuzione della chiamata a ImportExternalImage
.
Ciò significa che se un TIFF contenente una risorsa esterna in GCS viene aggiornato
(modificando quindi la relativa generazione), Earth Engine restituirà un errore "Impossibile caricare
il file GeoTIFF in gs://my-bucket/my-object#123456
" perché l'oggetto previsto
non esiste più (a meno che il bucket non consenta più versioni dell'oggetto).
Questo criterio è progettato per mantenere sincronizzati i metadati della risorsa con quelli
dell'oggetto.
Configurazione
In termini di configurazione di un COG, il file TIFF DEVE essere:
A riquadri, dove le dimensioni dei riquadri sono:
- 256x256
- 512x512
- 1024x1024
- 2048x2048
Disposti in modo che tutti gli IFD siano all'inizio.
Per ottenere il massimo rendimento:
- Utilizza dimensioni dei riquadri pari o superiori a 512 x 512.
- Includi le panoramiche Potenza di 2.
A seconda dei casi d'uso previsti, l'opzione di creazione "INTERLEAVE" potrebbe influire sulle prestazioni. Ti consigliamo di utilizzare l'interlacciamento BAND in tutte le circostanze.
Per maggiori dettagli su una configurazione ottimizzata, consulta questa pagina.
Il seguente comando gdal_translate
consente di convertire un raster in un file GeoTIFF ottimizzato per il cloud con interlacciamento delle bande e compressione zstd che avrà un buon rendimento in Earth Engine:
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
Potrebbe essere possibile ridurre ulteriormente le dimensioni del file di output specificando un
predittore
(-co PREDICTOR=2
per i tipi di dati interi e -co PREDICTOR=3
per i tipi di dati con virgola mobile).
Per gli utenti con GDAL >= 3.11, il driver COG può produrre file senza doversi preoccupare di creare e conservare le panoramiche.
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 \
Creazione di asset basati su file GeoTiff di Cloud utilizzando l'API REST
Nota: l'API REST contiene funzionalità nuove e avanzate che potrebbero non essere adatte a tutti gli utenti. Se non hai mai utilizzato Earth Engine, ti consigliamo di iniziare con la guida su JavaScript.
Per creare una risorsa basata su COG utilizzando l'API REST, invia una richiesta POST
all'ImportExternalImage
endpoint di Earth Engine.
Come mostrato di seguito, questa richiesta deve essere autorizzata per creare un asset nella tua cartella utente.
Avviare una sessione autorizzata
Per poter creare una risorsa Earth Engine nella tua cartella utente, devi essere in grado di autenticarti come te stesso quando effettui la richiesta. Puoi utilizzare le credenziali dell'autenticatore di Earth Engine per avviare un AuthorizedSession
.
Puoi quindi utilizzare AuthorizedSession
per inviare richieste a Earth Engine.
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)
)
Corpo della richiesta
Il corpo della richiesta è un'istanza di un
ImageManifest
.
Qui viene specificato il percorso del COG, insieme ad altre proprietà utili.
Consulta questa guida per maggiori dettagli su come configurare un ImageManifest
. È possibile definire uno o più Tileset
con ciascuno che supporta una o più bande. Per ImportExternalImage
, è supportato al massimo un ImageSource
per Tileset
.
Consulta questo documento per informazioni dettagliate sull'esportazione dei COG.
Invia la richiesta
Invia la richiesta POST all'endpoint Earth Engine
projects.images.importExternal
.
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))