Wenn Sie beim Hochladen von Tabellen in Google Earth Engine (EE) mehr Flexibilität als über die Code-Editor-Benutzeroberfläche oder den Befehl upload
des Befehlszeilentools „earthengine“ benötigen, können Sie einen Tabellenupload mithilfe einer JSON-Datei beschreiben, die als „Manifest“ bezeichnet wird, und den Befehl upload table --manifest
des Befehlszeilentools verwenden.
Einmalige Einrichtung
- Manifest-Uploads funktionieren nur mit Dateien in Google Cloud Storage. Wenn Sie Google Cloud Storage verwenden möchten, erstellen Sie ein Google Cloud-Projekt, falls Sie noch keines haben. Für die Einrichtung muss eine Kreditkarte für die Abrechnung angegeben werden. EE selbst erhebt derzeit keine Gebühren. Die Übertragung von Dateien in Google Cloud Storage vor dem Hochladen in EE ist jedoch mit geringen Kosten verbunden. Bei typischen Uploaddatenmengen (z. B. zehn oder hunderte Gigabyte) sind die Kosten recht niedrig.
- Aktivieren Sie die Cloud Storage API und erstellen Sie einen Bucket.
- Installieren Sie den Earth Engine Python-Client. Es enthält das
earthengine
-Befehlszeilentool, das wir zum Hochladen von Daten verwenden. - Für automatisierte Uploads können Sie ein Google Cloud-Dienstkonto verwenden, das mit Ihrem Projekt verknüpft ist. Für die Tests benötigen Sie kein Dienstkonto. Machen Sie sich aber trotzdem mit der Verwendung vertraut.
Asset-IDs und ‑Namen
Verwenden Sie für Assets in Cloud-Projekten projects/my_cloud_project/assets/my_asset
.
Bei älteren Legacy-Projekten muss sich der Asset-Name im Manifest geringfügig von der Asset-ID unterscheiden, die an anderer Stelle in Earth Engine zu sehen ist. Wenn du Assets hochladen möchtest, deren Asset-IDs mit users/some_user
oder projects/some_project
beginnen, muss dem Asset-Namen im Manifest vor der ID der String projects/earthengine-legacy/assets/
vorangestellt werden. Die EE-Asset-ID users/username/my_table
sollte beispielsweise mit dem Namen projects/earthengine-legacy/assets/users/username/my_table
hochgeladen werden.
Ja, das bedeutet, dass IDs wie projects/some_projects/some_asset
in Namen umgewandelt werden, in denen projects
zweimal vorkommt: projects/earthengine-legacy/assets/projects/some_projects/some_asset
.
Das ist verwirrend, aber notwendig, um den Google Cloud API-Standards zu entsprechen.
Manifeste verwenden
Unten sehen Sie das einfachste mögliche Manifest. Es lädt eine Datei namens small.csv
aus einem Google Cloud Storage-Bucket namens gs://earthengine-test
hoch.
{ "name": "projects/some-project-id/assets/some-asset-id", "sources": [ { "uris": [ "gs://earthengine-test/small.csv" ] } ] }
Speichern Sie es in einer Datei mit dem Namen manifest.json
und führen Sie folgenden Befehl aus:
earthengine upload table --manifest /path/to/manifest.json
Die Datei gs://earthengine-test/small.csv
ist vorhanden und öffentlich lesbar. Sie können sie zum Testen verwenden.
Geben Sie bei Shapefile-Uploads nur die .shp-Datei an. Die anderen Dateien werden automatisch erkannt.
Mehrere Quellen
Sie können mehrere CSV- oder Shapefile-Quellen angeben, wobei eine Datei pro Quelle verwendet wird. In diesem Fall muss jede CSV-Datei dieselbe Struktur haben. Angenommen, Sie haben zwei CSV-Dateien, region1.csv
und region2.csv
:
id | shape |
---|---|
1 | {"type":"Point","coordinates":[-119,36]} |
2 | {"type":"Point","coordinates":[-118,37]} |
3 | {"type":"Point","coordinates":[-117,38]} |
id | shape |
---|---|
4 | {"type":"Point","coordinates":[-112,40]} |
5 | {"type":"Point","coordinates":[-111,41]} |
6 | {"type":"Point","coordinates":[-110,42]} |
Sie haben dieselbe Struktur, aber unterschiedliche Inhalte. Sie wurden in zwei Cloud Storage-Buckets hochgeladen: gs://earthengine-test/region1.csv
gs://earthengine-test/region2.csv
sources
, z. B. so:
{ "name": "projects/some-project-id/assets/some-asset-id", "sources": [ { "uris": [ "gs://earthengine-test/region1.csv" ] }, { "uris": [ "gs://earthengine-test/region2.csv" ] } ] }
Beginn und Ende
Für alle Assets sollten Start- und Endzeit angegeben werden, um den Daten mehr Kontext zu geben, insbesondere wenn sie in Sammlungen enthalten sind. Diese Felder sind nicht erforderlich, werden aber nach Möglichkeit empfohlen.
Start- und Endzeit beziehen sich in der Regel auf die Zeit der Beobachtung, nicht auf die Zeit, zu der die Quelldatei erstellt wurde.
Die Endzeit wird aus Gründen der Einfachheit als exklusive Grenze behandelt. Geben Sie beispielsweise für Assets, die genau einen Tag umfassen, als Start- und Endzeit die Mitternacht von zwei aufeinanderfolgenden Tagen an (z. B. 1980-01-31T00:00:00 und 1980-02-01T00:00:00). Wenn das Asset keine Dauer hat, muss die Endzeit mit der Startzeit übereinstimmen. Zeitangaben in Manifesten als ISO 8601-Strings darstellen. Wir empfehlen, davon auszugehen, dass die Endzeit exklusiv ist (z. B. Mitternacht des nächsten Tages für tägliche Assets), um die Datumswerte zu vereinfachen.
Beispiel:
{ "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" }
Referenz zum Aufbau eines Manifests
Die folgende JSON-Struktur enthält alle möglichen Manifestfelder für den Tabellenupload. Felddefinitionen finden Sie im folgenden Abschnitt Manifest-Felddefinitionen.
{ "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> } }
Manifestfelddefinitionen
name
string
Der Name des zu erstellenden Assets.
name
hat das Format „projects/*/assets/**“ (z. B. projects/earthengine-legacy/assets/users/USER/ASSET
).
Quellen
list
Eine Liste von Feldern, die die Eigenschaften einer Tabellendatei und ihrer Sidecars definieren. Weitere Informationen finden Sie in den folgenden Feldern des sources
-Wörterbuchelements.
sources[i].uris
list
Eine Liste der URIs der Daten, die aufgenommen werden sollen. Derzeit werden nur Google Cloud Storage-URIs unterstützt. Jeder URI muss im folgenden Format angegeben werden:
gs://bucket-id/object-id
.
Das Hauptobjekt sollte das erste Element der Liste sein und Sidecars sollten danach aufgeführt werden. Jedem URI wird TableManifest.uri_prefix
vorangestellt, wenn diese Option festgelegt ist.
sources[i].charset
string
Der Name des Standardzeichensatzes, der für die Dekodierung von Strings verwendet werden soll. Wenn das Feld leer ist, wird standardmäßig die Zeichencodierung „UTF-8“ verwendet.
sources[i].maxErrorMeters
double
Der maximal zulässige Fehler in Metern bei der Transformation von Geometrie zwischen Koordinatensystemen. Wenn das Feld leer ist, ist der maximale Fehler standardmäßig 1 Meter.
sources[i].maxVertices
int32
Die maximale Anzahl von Eckpunkten. Wenn der Wert nicht null ist, wird die Geometrie in räumlich nicht zusammenhängende Teile unter diesem Grenzwert unterteilt.
sources[i].crs
string
Der Standard-CRS-Code oder WKT-String, der das Koordinatenreferenzsystem einer Geometrie angibt, für die kein solches System angegeben ist. Wenn Sie das Feld leer lassen, wird standardmäßig EPSG:4326 verwendet. Nur für CSV-/TFRecord-Quellen.
sources[i].geodesic
boolean
Die Standardstrategie für die Interpretation von Kanten in Geometrien, für die keine andere Strategie angegeben ist. Wenn „false“ festgelegt ist, sind die Kanten in der Projektion gerade. Wenn „true“ festgelegt ist, sind die Kanten gebogen, um dem kürzesten Pfad auf der Erdoberfläche zu folgen. Wenn das Feld leer ist, wird standardmäßig „false“ verwendet, wenn das CRS ein projiziertes Koordinatensystem ist. Nur für CSV-/TFRecord-Quellen.
sources[i].primaryGeometryColumn
string
Die Geometriespalte, die als primäre Geometrie einer Zeile verwendet werden soll, wenn es mehr als eine Geometriespalte gibt.
Wenn Sie dieses Feld leer lassen und es mehr als eine Geometriespalte gibt, wird die erste Geometriespalte verwendet. Nur für CSV-/TFRecord-Quellen.
sources[i].xColumn
string
Der Name der Spalte mit den numerischen X-Koordinaten zur Ermittlung der Punktgeometrie. Wenn auch yColumn
angegeben ist und beide Spalten numerische Werte enthalten, wird eine Punktgeometriespalte mit x- und y-Werten im im CRS angegebenen Koordinatensystem erstellt. Wenn das Feld leer bleibt und das CRS kein projiziertes Koordinatensystem angibt, wird standardmäßig „longitude“ verwendet. Wenn das Feld leer bleibt und das CRS ein projiziertes Koordinatensystem angibt, wird standardmäßig ein leerer String verwendet und es wird keine Punktgeometrie generiert.
Eine generierte Punktgeometriespalte wird {xColumn}_{yColumn}_N
genannt, wobei N angehängt wird, damit {xColumn}_{yColumn}_N
eindeutig ist, wenn bereits eine Spalte mit dem Namen {xColumn}_{yColumn}
vorhanden ist. Nur für CSV-/TFRecord-Quellen.
sources[i].yColumn
string
Der Name der Spalte mit den numerischen y-Koordinaten für die Punktgeometrie. Wenn auch xColumn
angegeben ist und beide Spalten numerische Werte enthalten, wird eine Punktgeometriespalte mit x- und y-Werten im im CRS angegebenen Koordinatensystem erstellt. Wenn das Feld leer bleibt und das CRS kein projiziertes Koordinatensystem angibt, wird standardmäßig „latitude“ verwendet. Wenn das Feld leer bleibt und das CRS ein projiziertes Koordinatensystem angibt, wird standardmäßig ein leerer String verwendet und es wird keine Punktgeometrie generiert.
Eine generierte Punktgeometriespalte wird {xColumn}_{yColumn}_N
genannt, wobei N angehängt wird, damit {xColumn}_{yColumn}_N
eindeutig ist, wenn bereits eine Spalte mit dem Namen {xColumn}_{yColumn}
vorhanden ist. Nur für CSV-/TFRecord-Quellen.
sources[i].dateFormat
string
Ein Format, mit dem Felder mit codierten Datumsangaben geparst werden. Das Formatmuster muss der Joda-Time-Dokumentation zur DateTimeFormat-Klasse entsprechen. Wenn Sie das Feld leer lassen, werden Datumsangaben als Strings importiert. Nur für CSV-/TFRecord-Quellen.
sources[i].csvDelimiter
string
Bei der Datenaufnahme von CSV-Dateien wird ein einzelnes Zeichen als Trennzeichen zwischen Spaltenwerten in einer Zeile verwendet. Wenn Sie dieses Feld leer lassen, wird standardmäßig ','
verwendet.
Nur für CSV-Quellen.
sources[i].csvQualifier
string
Beim Aufnehmen von CSV-Dateien ein Zeichen, das Spaltenwerte umschließt (auch „Anführungszeichen“ genannt). Wenn Sie dieses Feld leer lassen, wird standardmäßig "
verwendet.
Nur für CSV-Quellen.
Wenn ein Spaltenwert nicht von Qualifikanten umgeben ist, werden führende und nachgestellte Leerzeichen entfernt. Beispiel:
..., 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
Ein optionales Präfix, das allen im Manifest definierten uris
vorangestellt wird.
startTime
integer
Der Zeitstempel, der mit dem Asset verknüpft ist (falls vorhanden). Dies entspricht in der Regel dem Zeitpunkt, zu dem die Daten erfasst wurden. Bei Assets, die einem bestimmten Zeitraum entsprechen, z. B. Durchschnittswerten über einen Monat oder ein Jahr, entspricht dieser Zeitstempel dem Beginn dieses Zeitraums. Wird in Sekunden und (optional) Nanosekunden seit der Epoche (1970-01-01) angegeben. Es wird davon ausgegangen, dass sich die Zeitzone in UTC befindet.
endTime
integer
Bei Assets, die einem bestimmten Zeitraum entsprechen, z. B. Durchschnittswerten über einen Monat oder ein Jahr, entspricht dieser Zeitstempel dem Ende dieses Zeitraums (exklusiv). Wird in Sekunden und (optional) Nanosekunden seit der Epoche (1970-01-01) angegeben. Es wird davon ausgegangen, dass sich die Zeitzone in UTC befindet.
Properties
dictionary
Ein beliebiges flaches Dictionary mit Schlüssel/Wert-Paaren. Schlüssel müssen Strings sein und Werte können entweder Zahlen oder Strings sein. Listenwerte werden für von Nutzern hochgeladene Assets noch nicht unterstützt.
columnDataTypeOverrides
dictionary
Wenn die automatische Typerkennung nicht richtig funktioniert, verwenden Sie dieses Feld mit Spaltennamen als Schlüsseln und einer der folgenden Konstanten als Werten: COLUMN_DATA_TYPE_STRING, COLUMN_DATA_TYPE_NUMERIC oder COLUMN_DATA_TYPE_LONG.
Beschränkungen
Größe des JSON-Manifests
Die maximal zulässige Dateigröße für JSON-Manifestdateien beträgt 10 MB. Wenn Sie viele Dateien hochladen möchten, sollten Sie überlegen, wie Sie die Anzahl der Zeichen für die Beschreibung des Datensatzes reduzieren können. Mit dem Feld uriPrefix
müssen Sie beispielsweise nicht für jeden URI in der Liste uris
den GCP-Bucket-Pfad angeben. Wenn eine weitere Größenreduzierung erforderlich ist, kürzen Sie die Dateinamen.