Przesyłanie pliku manifestu tabeli

Jeśli potrzebujesz większej elastyczności podczas przesyłania tabel do Google Earth Engine (EE) niż zapewnia interfejs edycji kodu lub polecenie uploadnarzędziu wiersza poleceń „earthengine”, możesz to zrobić, opisując przesyłanie tabeli za pomocą pliku JSON zwanego „manifestem” i polecenia upload table --manifest w narzędziu wiersza poleceń.

Konfiguracja jednorazowa

  1. Przesyłanie manifestu działa tylko w przypadku plików znajdujących się w Google Cloud Storage. Aby zacząć korzystać z Google Cloud Storage, utwórz projekt Google Cloud, jeśli go jeszcze nie masz. Pamiętaj, że konfiguracja wymaga podania karty kredytowej do rozliczeń. W tej chwili EE nie pobiera opłat, ale przenoszenie plików do Google Cloud Storage przed przesłaniem ich do EE wiąże się z małym kosztem. W przypadku typowych rozmiarów danych przesyłanych (dziesiątki lub setki gigabajtów) koszty będą dość niskie.
  2. W projekcie włącz interfejs Cloud Storage API i utwórz zasobnik.
  3. Zainstaluj klienta Pythona Earth Engine. Zawiera ono narzędzie wiersza poleceń earthengine, którego użyjemy do przesyłania danych.
  4. W przypadku automatycznego przesyłania możesz użyć konta usługi Google Cloud powiązanego z Twoim projektem. Do testowania nie potrzebujesz konta usługi, ale gdy tylko będziesz mieć czas, zacznij się zapoznawać z ich używaniem.

Identyfikatory i nazwy komponentów

W przypadku zasobów w projektach Cloud użyj opcji projects/my_cloud_project/assets/my_asset.

W przypadku starszych projektów nazwa zasobu w pliku manifestu musi się nieznacznie różnić od identyfikatora zasobu widocznego w innych miejscach w Earth Engine. Aby przesłać zasoby, których identyfikatory zaczynają się od users/some_user lub projects/some_project, nazwa zasobu w pliku manifestu musi być poprzedzona ciągiem znaków projects/earthengine-legacy/assets/. Przykład: identyfikator zasobu EE users/username/my_table należy przesłać pod nazwą projects/earthengine-legacy/assets/users/username/my_table.

Tak, oznacza to, że identyfikatory takie jak projects/some_projects/some_asset są przekształcane w nazwy, w których projects jest wymieniony dwukrotnie: projects/earthengine-legacy/assets/projects/some_projects/some_asset. Jest to mylące, ale konieczne, aby zachować zgodność ze standardami interfejsu Google Cloud API.

Korzystanie z plików manifestu

Najprostszy możliwy manifest pokazano poniżej. Przesyła plik o nazwie small.csv z zasobnika Google Cloud Storage o nazwie gs://earthengine-test.

{
  "name": "projects/some-project-id/assets/some-asset-id",
  "sources": [
    {
      "uris": [
        "gs://earthengine-test/small.csv"
      ]
    }
  ]
}

Aby go użyć, zapisz go w pliku o nazwie manifest.json i uruchom:

earthengine upload table --manifest /path/to/manifest.json

(plik gs://earthengine-test/small.csv istnieje i jest publicznie dostępny – możesz go użyć do testowania).

W przypadku przesyłania plików shape podaj tylko plik .shp; inne pliki zostaną wykryte automatycznie.

Wiele źródeł

Możesz podać wiele źródeł CSV lub plików shape, po jednym pliku na źródło. W takim przypadku każdy plik CSV musi mieć tę samą strukturę. Mamy na przykład 2 pliki CSV: region1.csvregion2.csv:

id kształt
1 {"type":"Point","coordinates":[-119,36]}
2 {"type":"Point","coordinates":[-118,37]}
3 {"type":"Point","coordinates":[-117,38]}
id kształt
4 {"type":"Point","coordinates":[-112,40]}
5 {"type":"Point","coordinates":[-111,41]}
6 {"type":"Point","coordinates":[-110,42]}

Mają one taką samą strukturę, ale różnią się treścią. Zostały one przesłane do zasobnika Cloud Storage: gs://earthengine-test/region1.csv i gs://earthengine-test/region2.csv. Aby przetworzyć je jako zasób Earth Engine, utwórz plik manifestu z 2 elementami na liście sources, na przykład:

{
  "name": "projects/some-project-id/assets/some-asset-id",
  "sources": [
    {
      "uris": [
        "gs://earthengine-test/region1.csv"
      ]
    },
    {
      "uris": [
        "gs://earthengine-test/region2.csv"
      ]
    }
  ]
}

Czas rozpoczęcia i zakończenia

Wszystkie zasoby powinny zawierać czas rozpoczęcia i zakończenia, aby zapewnić większy kontekst danych, zwłaszcza jeśli są one uwzględnione w kolekcjach. Te pola nie są wymagane, ale zdecydowanie zalecamy ich używanie, gdy tylko jest to możliwe.

Czas rozpoczęcia i zakończenia zwykle oznacza czas obserwacji, a nie czas wygenerowania pliku źródłowego.

Czas zakończenia jest traktowany jako granica wyłączna ze względu na prostotę. Na przykład w przypadku zasobów obejmujących dokładnie jeden dzień jako czas rozpoczęcia i zakończenia użyj północy z 2 dni (np. 1980-01-31T00:00:00 i 1980-02-01T00:00:00). Jeśli zasób nie ma czasu trwania, ustaw czas zakończenia taki sam jak czas rozpoczęcia. czasy w pliku manifestu jako ciągi znaków w formacie ISO 8601; Aby uprościć wartości dat, zalecamy założenie, że czas zakończenia jest wyłączony (np. północ następnego dnia w przypadku zasobów dziennych).

Przykład:

{
  "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"
}

Odniesienie do struktury pliku manifestu

Poniższa struktura JSON zawiera wszystkie możliwe pola manifestu przesyłania tabeli. Definicje pól znajdziesz w  sekcji Definicje pól pliku manifestu.

{
  "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>
  }
}

Definicje pól pliku manifestu

nazwa

string

Nazwa zasobu do utworzenia. name ma format „projekty/*/zasoby/**” (np. projects/earthengine-legacy/assets/users/USER/ASSET).

źródła

list

Lista pól definiujących właściwości pliku tabeli i jego załączników. Więcej informacji znajdziesz w tych polach elementu słownika sources:

sources[i].uris

list

Lista identyfikatorów URI danych do przetworzenia. Obecnie obsługiwane są tylko URI Google Cloud Storage. Każdy identyfikator URI musi być podany w takim formacie:gs://bucket-id/object-id. Główny obiekt powinien być pierwszym elementem listy, a dodatkowe obiekty powinny być wymienione później. Każdy identyfikator URI ma prefiks TableManifest.uri_prefix, jeśli jest ustawiony.

sources[i].charset

string

Nazwa domyślnego zestawu znaków do dekodowania ciągu znaków. Jeśli jest pusty, domyślnie przyjmuje się kodowanie „UTF-8”.

sources[i].maxErrorMeters

double

Maksymalny dopuszczalny błąd w metrach podczas przekształcania geometrii między systemami współrzędnych. Jeśli to pole jest puste, domyślna maksymalna wartość błędu to 1 metr.

sources[i].maxVertices

int32

Maksymalna liczba wierzchołków. Jeśli wartość jest różna od 0, geometria zostanie podzielona na przestrzennie niepołączone części, z których każda będzie miała rozmiar poniżej tego limitu.

sources[i].crs

string

Domyślny kod CRS lub ciąg WKT określający system odniesienia współrzędnych dowolnej geometrii, dla której nie określono takiego systemu. Jeśli pozostawisz to pole puste, domyślnie zostanie użyty układ EPSG:4326. Tylko w przypadku źródeł CSV/TFRecord.

sources[i].geodesic

boolean

Domyślna strategia interpretowania krawędzi w geometrii, które nie mają określonej innej strategii. Jeśli jest ustawiona na wartość false (fałsz), krawędzie są proste w projekcji. Jeśli to pole ma wartość Prawda, krawędzie są zaokrąglone, aby prowadzić najkrótszą drogą po powierzchni Ziemi. Jeśli to pole jest puste, domyślnie ustawiana jest wartość false, jeśli CRS to rzutowany układ współrzędnych. Tylko w przypadku źródeł CSV/TFRecord.

sources[i].primaryGeometryColumn

string

Kolumna geometry, która ma być używana jako główna geometria wiersza, gdy istnieje więcej niż jedna kolumna geometry.

Jeśli to pole jest puste i istnieje więcej niż 1 kolumna geometry, zostanie użyta pierwsza napotkana kolumna geometry. Tylko w przypadku źródeł CSV/TFRecord.

sources[i].xColumn

string

Nazwa kolumny liczbowej współrzędnej X służącej do określania geometrii punktu. Jeśli yColumn jest również podana, a obie kolumny zawierają wartości liczbowe, kolumna geometrii punktu zostanie utworzona z wartościami x,y w układzie współrzędnych podanym w CRS. Jeśli to pole pozostanie puste, a CRS nie określi rzutowanego układu współrzędnych, domyślnie zostanie wybrana opcja „longitude” (długość geograficzna). Jeśli pozostawisz to pole puste, a CRS określa układ współrzędnych rzutowanych, zostanie on zastąpiony pustym ciągiem znaków, a geometria punktów nie zostanie wygenerowana.

Wygenerowana kolumna geometrii punktu będzie mieć nazwę {xColumn}_{yColumn}_N gdzie N jest dołączane w taki sposób, aby {xColumn}_{yColumn}_N było unikalne, jeśli kolumna o nazwie {xColumn}_{yColumn} już istnieje. Tylko w przypadku źródeł CSV/TFRecord.

sources[i].yColumn

string

Nazwa kolumny liczbowej współrzędnej Y służącej do określania geometrii punktu. Jeśli xColumn jest również podana, a obie kolumny zawierają wartości liczbowe, kolumna geometrii punktu zostanie utworzona z wartościami x,y w układzie współrzędnych podanym w CRS. Jeśli to pole pozostanie puste, a CRS nie określi rzutowanego układu współrzędnych, domyślnie zostanie ustawiona wartość „szerokość geograficzna”. Jeśli pozostawisz to pole puste, a CRS określa układ współrzędnych rzutowanych, zostanie on zastąpiony pustym ciągiem znaków, a geometria punktów nie zostanie wygenerowana.

Wygenerowana kolumna geometrii punktu będzie mieć nazwę {xColumn}_{yColumn}_N gdzie N jest dołączane w taki sposób, aby {xColumn}_{yColumn}_N było unikalne, jeśli kolumna o nazwie {xColumn}_{yColumn} już istnieje. Tylko w przypadku źródeł CSV/TFRecord.

sources[i].dateFormat

string

Format, w którym można analizować pola kodujące daty. Wzorzec formatu musi być zgodny z opisem w dokumentacji klasy Joda-Time DateTimeFormat. Jeśli pozostawisz to pole puste, daty zostaną zaimportowane jako ciągi znaków. Tylko w przypadku źródeł CSV/TFRecord.

sources[i].csvDelimiter

string

Podczas przetwarzania plików CSV pojedynczy znak używany jako ogranicznik między wartościami kolumn w wierszu. Jeśli pozostawisz to pole puste, zostanie użyta wartość domyślna ','. Tylko w przypadku źródeł CSV.

sources[i].csvQualifier

string

Podczas przetwarzania plików CSV znak otaczający wartości kolumn (zwanego też „znakiem cudzysłowu”). Jeśli pozostawisz to pole puste, zostanie użyta wartość domyślna ". Tylko w przypadku źródeł CSV.

Jeśli wartość kolumny nie jest ujęta w kwalifikatory, spacja na początku i na końcu jest odcinana. Na przykład:

    ..., test,...            <== this value is not qualified
becomes the string value:
    "test"                   <== leading whitespace is stripped
podczas gdy:
    ...," test",...          <== this value IS qualified with quotes
becomes the string value:
    " test"                  <== leading whitespace remains!

uriPrefix

string

Opcjonalny prefiks dodawany na początku wszystkich elementów uris zdefiniowanych w pliku manifestu.

startTime

integer

Sygnatura czasowa powiązana z zasobem (jeśli występuje). Zwykle odpowiada to czasowi, w którym dane zostały zebrane. W przypadku zasobów odpowiadających intervalom czasu, takich jak średnie wartości w miesiącu lub roku, ta sygnatura czasowa odpowiada początkowi tego przedziału. Podana w sekundach i (opcjonalnie) nanosekundach od początku epoki (1970-01-01). Przyjęto, że jest to strefa czasowa UTC.

endTime

integer

W przypadku zasobów odpowiadających intervalom czasowym, np. średnich wartości w ciągu miesiąca lub roku, ten znacznik czasu odpowiada końcowi tego przedziału (wyłączając go). Podana w sekundach i (opcjonalnie) nanosekundach od początku epoki (1970-01-01). Przyjęto, że jest to strefa czasowa UTC.

usługi

dictionary

dowolny płaski słownik par klucz-wartość; Klucze muszą być ciągami znaków, a wartości mogą być liczbami lub ciągami znaków. Wartości list nie są jeszcze obsługiwane w przypadku zasobów przesłanych przez użytkowników.

columnDataTypeOverrides

dictionary

Jeśli automatyczne wykrywanie typu nie działa prawidłowo, użyj tego pola z nazwami kolumn jako kluczami i jedną z tych stałych wartości jako wartości: COLUMN_DATA_TYPE_STRING, COLUMN_DATA_TYPE_NUMERIC, COLUMN_DATA_TYPE_LONG.

Ograniczenia

Rozmiar pliku manifestu JSON

Maksymalny rozmiar pliku manifestu JSON to 10 MB. Jeśli chcesz przesłać wiele plików, zastanów się, jak zmniejszyć liczbę znaków potrzebnych do opisania zbioru danych. Na przykład: używaj pola uriPrefix, aby nie musieć podawać ścieżki zasobnika GCP dla każdego identyfikatora URI na liście uris. Jeśli potrzebne jest dalsze zmniejszenie rozmiaru, spróbuj skrócić nazwy plików.