Jeśli potrzebujesz większej elastyczności podczas przesyłania tabel do Google Earth Engine (EE) niż zapewnia interfejs edycji kodu lub polecenie upload
w narzę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
- 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.
- W projekcie włącz interfejs Cloud Storage API i utwórz zasobnik.
- Zainstaluj klienta Pythona Earth Engine. Zawiera ono narzędzie wiersza poleceń
earthengine
, którego użyjemy do przesyłania danych. - 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.csv
i region2.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
gs://earthengine-test/region2.csv
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
...," 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.