Tabellenmanifest hochladen

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

  1. 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.
  2. Aktivieren Sie die Cloud Storage API und erstellen Sie einen Bucket.
  3. Installieren Sie den Earth Engine Python-Client. Es enthält das earthengine-Befehlszeilentool, das wir zum Hochladen von Daten verwenden.
  4. 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 und gs://earthengine-test/region2.csv. Wenn Sie sie als Earth Engine-Asset aufnehmen möchten, erstellen Sie ein Manifest mit zwei Einträgen in der Liste 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
während:
    ...," 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.