Se hai bisogno di una maggiore flessibilità per il caricamento delle tabelle in Google Earth Engine (EE) rispetto a quanto fornito dall'interfaccia utente di Code Editor o dal comando upload
dello strumento a riga di comando "earthengine", puoi farlo descrivendo un caricamento di tabelle utilizzando un file JSON noto come "manifest" e utilizzando il comando upload table --manifest
dello strumento a riga di comando.
Configurazione una tantum
- I caricamenti dei manifest funzionano solo con i file in Google Cloud Storage. Per iniziare a utilizzare Google Cloud Storage, crea un progetto Google Cloud, se non ne hai già uno. Tieni presente che la configurazione richiede la specifica di una carta di credito per la fatturazione. Al momento EE non addebita alcun costo, ma il trasferimento dei file su Google Cloud Storage prima di caricarli su EE comporta un piccolo costo. Per dimensioni dei dati di caricamento tipicamente elevate (decine o centinaia di gigabyte), il costo sarà piuttosto basso.
- Nel progetto, abilita l'API Cloud Storage e crea un bucket.
- Installa il client Earth Engine per Python. Include lo strumento a riga di comando
earthengine
, che useremo per caricare i dati. - Per i caricamenti automatici, ti consigliamo di utilizzare un account di servizio Google Cloud associato al tuo progetto. Non è necessario un account di servizio per i test, ma quando hai tempo, inizia a familiarizzare con il loro utilizzo.
ID e nomi delle risorse
Per gli asset nei progetti Cloud, utilizza
projects/my_cloud_project/assets/my_asset
.
Per i progetti precedenti, il nome della risorsa nel manifest deve essere leggermente diverso dall'ID risorsa visibile altrove in Earth Engine. Per caricare asset i cui ID iniziano con
users/some_user
o projects/some_project
, al nome della risorsa nel
manifest deve essere anteposta la stringa projects/earthengine-legacy/assets/
all'ID. Ad esempio, l'ID risorsa EE users/username/my_table
deve essere caricato
utilizzando il nome projects/earthengine-legacy/assets/users/username/my_table
.
Sì, questo significa che ID come projects/some_projects/some_asset
vengono
convertiti in nomi in cui projects
viene menzionato due volte:
projects/earthengine-legacy/assets/projects/some_projects/some_asset
.
Questo può creare confusione, ma è necessario per rispettare gli standard delle API Google Cloud.
Utilizzo dei manifest
Di seguito è riportato il manifest più semplice possibile. Carica un file denominato small.csv
da un bucket Google Cloud Storage denominato gs://earthengine-test
.
{ "name": "projects/some-project-id/assets/some-asset-id", "sources": [ { "uris": [ "gs://earthengine-test/small.csv" ] } ] }
Per utilizzarlo, salvalo in un file denominato manifest.json
ed esegui:
earthengine upload table --manifest /path/to/manifest.json
Il file gs://earthengine-test/small.csv
esiste ed è
pubblicamente leggibile, puoi utilizzarlo per i test.
Per i caricamenti di shapefile, specifica solo il file .shp; gli altri file verranno rilevati automaticamente.
Più fonti
È possibile specificare più origini CSV o shapefile, con un file per origine. In questo
caso, ogni file CSV deve avere la stessa struttura. Ad esempio, abbiamo due file CSV, region1.csv
e region2.csv
:
id | forma |
---|---|
1 | {"type":"Point","coordinates":[-119,36]} |
2 | {"type":"Point","coordinates":[-118,37]} |
3 | {"type":"Point","coordinates":[-117,38]} |
id | forma |
---|---|
4 | {"type":"Point","coordinates":[-112,40]} |
5 | {"type":"Point","coordinates":[-111,41]} |
6 | {"type":"Point","coordinates":[-110,42]} |
Hanno la stessa struttura, ma contenuti diversi. Sono stati caricati in un bucket Cloud Storage: gs://earthengine-test/region1.csv
gs://earthengine-test/region2.csv
sources
, come segue:
{ "name": "projects/some-project-id/assets/some-asset-id", "sources": [ { "uris": [ "gs://earthengine-test/region1.csv" ] }, { "uris": [ "gs://earthengine-test/region2.csv" ] } ] }
Ora di inizio e ora di fine
Per tutti gli asset è necessario specificare l'ora di inizio e di fine per fornire un contesto più ampio ai dati, soprattutto se sono inclusi nelle raccolte. Questi campi non sono obbligatori, ma ti consigliamo vivamente di utilizzarli, se possibile.
In genere, l'ora di inizio e di fine indica l'ora dell'osservazione, non l'ora in cui è stato prodotto il file di origine.
Per semplicità, l'ora di fine viene trattata come un confine esclusivo. Ad esempio, per gli asset che coprono esattamente un giorno, utilizza la mezzanotte di due giorni consecutivi (ad esempio 1980-01-31T00:00:00 e 1980-02-01T00:00:00) per l'ora di inizio e di fine. Se la risorsa non ha durata, imposta l'ora di fine uguale a quella di inizio. Rappresenta le ore nei manifest come stringhe ISO 8601. Per semplificare i valori della data, ti consigliamo di assumere che l'ora di fine sia esclusa (ad esempio la mezzanotte del giorno successivo per gli asset giornalieri).
Esempio:
{ "name": "projects/some-project-id/assets/some-asset-id", "sources": [ { "uris": [ "gs://bucket/table_20190612.csv" ] } ], "startTime": "1980-01-31T00:00:00Z", "endTime": "1980-02-01T00:00:00Z" }
Riferimento alla struttura del manifest
La seguente struttura JSON include tutti i possibili campi del manifest per il caricamento delle tabelle. Trova le definizioni dei campi nella seguente sezione Definizioni dei campi del manifest.
{ "name": <string>, "sources": [ { "uris": [ <string> ], "charset": <string>, "maxErrorMeters": <double>, "maxVertices": <int32>, "crs": <string>, "geodesic": <boolean>, "primaryGeometryColumn": <string>, "xColumn": <string>, "yColumn": <string>, "dateFormat": <string>, "csvDelimiter": <string>, "csvQualifier": <string>, } ], "uriPrefix": <string>, "startTime": { "seconds": <integer> }, "endTime": { "seconds": <integer> }, "properties": { <unspecified> } }
Definizioni dei campi del manifest
nome
string
Il nome dell'asset da creare.
name
sia nel formato "projects/*/assets/**"
(ad esempio projects/earthengine-legacy/assets/users/USER/ASSET
).
sorgenti
list
Un elenco di campi che definiscono le proprietà di un file di tabella e dei relativi sidecar. Per ulteriori informazioni, consulta i seguenti campi elemento del dizionario sources
.
sources[i].uris
list
Un elenco di URI dei dati da importare. Al momento sono supportati solo gli URI di Google Cloud Storage. Ogni URI deve essere specificato nel seguente formato:
gs://bucket-id/object-id
.
L'oggetto principale deve essere il primo elemento dell'elenco e i sidecar devono essere elencati successivamente. A ogni URI viene anteposto il prefisso
TableManifest.uri_prefix
, se impostato.
sources[i].charset
string
Il nome del set di caratteri predefinito da utilizzare per la decodifica delle stringhe. Se è vuoto, per impostazione predefinita viene assunto il set di caratteri "UTF-8".
sources[i].maxErrorMeters
double
L'errore massimo consentito in metri durante la trasformazione della geometria tra sistemi di coordinate. Se non viene specificato, l'errore massimo è 1 metro per impostazione predefinita.
sources[i].maxVertices
int32
Il numero massimo di vertici. Se non è zero, la geometria verrà suddivisa in pezzi spazialmente sconnessi, ciascuno al di sotto di questo limite.
sources[i].crs
string
Il codice CRS o la stringa WKT predefiniti che specificano il sistema di riferimento di coordinate di qualsiasi geometria per la quale non è stato specificato un sistema. Se non viene specificato, il valore predefinito sarà EPSG:4326. Solo per origini CSV/TFRecord.
sources[i].geodesic
boolean
La strategia predefinita per l'interpretazione degli spigoli nella geometria che non ne hanno uno specificato diversamente. Se è false, i bordi sono dritti nella proiezione. Se true, i bordi sono curvi per seguire il percorso più breve sulla superficie della Terra. Se non viene specificato, il valore predefinito è false se il sistema di riferimento cartografico è un sistema di coordinate proiettato. Solo per origini CSV/TFRecord.
sources[i].primaryGeometryColumn
string
La colonna della geometria da utilizzare come geometria principale di una riga quando sono presenti più di una colonna della geometria.
Se viene lasciato vuoto e esiste più di una colonna di geometria, viene utilizzata la prima colonna di geometria trovata. Solo per origini CSV/TFRecord.
sources[i].xColumn
string
Il nome della colonna della coordinata x numerica per dedurre la geometria del punto. Se
viene specificato anche yColumn
e entrambe le colonne contengono valori numerici,
verrà creata una colonna di geometria punto con i valori x,y nel
sistema di coordinate specificato nel CRS. Se viene lasciato vuoto e il sistema di riferimento cartografico
non
specifica un sistema di coordinate proiettato, il valore predefinito è "longitudine". Se viene lasciato vuoto e il sistema di riferimento cartografico specifica un sistema di coordinate proiettato, viene utilizzato per impostazione predefinita una stringa vuota e non viene generata alcuna geometria punto.
Una colonna della geometria del punto generata avrà il nome
{xColumn}_{yColumn}_N
a cui viene aggiunto N in modo che {xColumn}_{yColumn}_N
sia univoco se esiste già una colonna con il nome
{xColumn}_{yColumn}
. Solo per origini CSV/TFRecord.
sources[i].yColumn
string
Il nome della colonna della coordinata y numerica per dedurre la geometria del punto. Se
viene specificato anche xColumn
e entrambe le colonne contengono valori numerici,
verrà creata una colonna di geometria punto con i valori x,y nel
sistema di coordinate specificato nel CRS. Se viene lasciato vuoto e il sistema di riferimento cartografico
non
specifica un sistema di coordinate proiettato, il valore predefinito è "latitudine". Se viene lasciato vuoto e il sistema di riferimento cartografico specifica un sistema di coordinate proiettato, viene utilizzato per impostazione predefinita una stringa vuota e non viene generata alcuna geometria punto.
Una colonna della geometria del punto generata avrà il nome
{xColumn}_{yColumn}_N
a cui viene aggiunto N in modo che {xColumn}_{yColumn}_N
sia univoco se esiste già una colonna con il nome
{xColumn}_{yColumn}
. Solo per origini CSV/TFRecord.
sources[i].dateFormat
string
Un formato con cui analizzare i campi che codificano le date. Il pattern di formato deve essere come descritto nella documentazione della classe DateTimeFormat di Joda-Time. Se viene lasciato vuoto, le date verranno importate come stringhe. Solo per origini CSV/TFRecord.
sources[i].csvDelimiter
string
Durante l'importazione dei file CSV, un singolo carattere utilizzato come delimitatore tra i valori delle colonne in una riga. Se non viene specificato, il valore predefinito è ','
.
Solo per origini CSV.
sources[i].csvQualifier
string
Durante l'importazione dei file CSV, un carattere che racchiude i valori delle colonne (noto anche come "carattere di virgolette"). Se non viene specificato, il valore predefinito è "
.
Solo per origini CSV.
Se un valore di colonna non è racchiuso tra qualificatori, gli spazi iniziali e finali vengono tagliati. Ad esempio:
..., test,... <== this value is not qualified becomes the string value: "test" <== leading whitespace is stripped
...," test",... <== this value IS qualified with quotes becomes the string value: " test" <== leading whitespace remains!
uriPrefix
string
Un prefisso facoltativo anteposto a tutti i uris
definiti nel manifest.
startTime
integer
Il timestamp associato alla risorsa, se presente. In genere corrisponde all'ora in cui sono stati raccolti i dati. Per gli asset che corrispondono a un intervallo di tempo, ad esempio i valori medi su un mese o un anno, questo timestamp corrisponde all'inizio dell'intervallo. Specificato come secondi e (facoltativamente) nanosecondi dall'epoca (1970-01-01). Si presume che sia nel fuso orario UTC.
endTime
integer
Per gli asset che corrispondono a un intervallo di tempo, ad esempio i valori medi su un mese o un anno, questo timestamp corrisponde alla fine dell'intervallo (esclusivo). Specificato come secondi e (facoltativamente) nanosecondi dall'epoca (1970-01-01). Si presume che sia nel fuso orario UTC.
proprietà
dictionary
Un dizionario piatto arbitrario di coppie chiave/valore. Le chiavi devono essere stringhe e i valori possono essere numeri o stringhe. I valori di elenco non sono ancora supportati per gli asset caricati dagli utenti.
columnDataTypeOverrides
dictionary
Se il rilevamento automatico del tipo non funziona correttamente, utilizza questo campo con i nomi delle colonne come chiavi e una delle seguenti costanti come valori: COLUMN_DATA_TYPE_STRING, COLUMN_DATA_TYPE_NUMERIC, COLUMN_DATA_TYPE_LONG.
Limitazioni
Dimensioni del file manifest JSON
La dimensione massima del file manifest JSON è 10 MB. Se hai molti file da caricare,
valuta la possibilità di ridurre il numero di caratteri necessari per descrivere il set di dati. Ad esempio,
utilizza il campo uriPrefix
per eliminare
la necessità di fornire il percorso del bucket Google Cloud per ogni URI nell'elenco
uris
. Se è necessaria un'ulteriore riduzione delle dimensioni, prova ad abbreviare i nomi file.