Przesyłanie pliku manifestu obrazu

Jeśli potrzebujesz większej elastyczności podczas przesyłania obrazów do Google Earth Engine (EE), niż zapewnia interfejs edytora kodu lub polecenie upload narzędzia wiersza poleceń „earthengine”, możesz to zrobić, opisując przesyłanie obrazu za pomocą pliku JSON zwanego „manifeście” i polecenia upload image --manifest narzędzia wiersza poleceń.

Pełny przykład znajdziesz w tym notatniku Colab, który pokazuje przesyłanie kafelków obrazu jako pojedynczego komponentu za pomocą pliku manifestu.

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 jeszcze go nie masz. Pamiętaj, że konfiguracja wymaga podania karty kredytowej do rozliczeń. W tej chwili EE nie pobiera opłat, ale przeniesienie plików do Google Cloud Storage przed ich przesłaniem 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.

Duże pliki źródłowe (o rozmiarze 100 GB lub większym) mogą zostać przesłane szybciej, jeśli zostaną podzielone na kilka elementów.

Identyfikatory i nazwy komponentów

W przypadku zasobów należących do projektu w usłudze Cloud używaj tej konwencji nazw: projects/some-project-id/assets/some-asset-id.

Więcej informacji o nazwach komponentów w starszych projektach i komponentach należących do użytkowników

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_geotiff należy przesłać pod nazwą projects/earthengine-legacy/assets/users/username/my_geotiff.

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

Podstawowy plik manifestu jest pokazany w tym bloku kodu. Przesyła plik o nazwie small.tif z zasobnika Google Cloud Storage o nazwie gs://earthengine-test.

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

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

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

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

Zestawy płytek

Nieco skomplikowana struktura pliku manifestu w formacie JSON jest konieczna, aby zapewnić wystarczającą elastyczność w rozwiązywaniu typowego problemu związanego z przesyłaniem: jak opisać wszystkie możliwe sposoby łączenia pikseli z wielu plików źródłowych w jeden zasób. W szczególności istnieją 2 niezależne sposoby grupowania plików:

  • Mozaiki. Czasami kilka plików reprezentuje kilka płytek (np. każda płytka ma wymiary 1 x 1 stopień). Takie pliki muszą być złożone (złączone) w ten sam pasmo w zasobie EE.
  • oddzielne paski. Czasami wiele plików reprezentuje wiele pasm. Takie pliki muszą być ułożone w pasmach w zasobie EE.

(czasami trzeba użyć obu metod jednocześnie, ale jest to rzadka sytuacja).

Aby opisać te opcje, manifesty wprowadzają pojęcie płytki układu. Pojedynczy zestaw płytek odpowiada jednemu źródłu GDAL. Z tego powodu wszystkie źródła w pojedynczym zestawie płytek muszą mieć tę samą strukturę GDAL (liczbę i typ pasm, projekcję, transformację, brakujące wartości). Źródło GDAL może mieć wiele pasm, więc jeden zestaw płytek może zawierać dane z wielu pasm EE.

W przypadku przetwarzania mozaikowych manifest będzie wyglądać tak:

{
  "name": "projects/some-project-id/assets/some-asset-id",
  "tilesets": [
    {
      "sources": [
        {
          "uris": [
            "gs://bucket/N30W22.tif"
          ]
        },
        {
          "uris": [
            "gs://bucket/N31W22.tif"
          ]
        }
      ]
    }
  ]
}

W przypadku oddzielnych pasm plik manifestu będzie wyglądał tak (musisz też dodać sekcję bands, jak wyjaśniono poniżej):

{
  "name": "projects/some-project-id/assets/some-asset-id",
  "bands": ...,
  "tilesets": [
    {
      "id": "tileset_for_band1",
      "sources": [
        {
          "uris": [
            "gs://bucket/band1.tif"
          ]
        }
      ]
    },
    {
      "id": "tileset_for_band2",
      "sources": [
        {
          "uris": [
            "gs://bucket/band2.tif"
          ]
        }
      ]
    }
  ]
}

Pamiętaj, że w przypadku oddzielnych pasm musimy nadać każdemu zestawowi płytek inny identyfikator, aby zachować przejrzystość. Identyfikator zestawu płytek może być dowolnym ciągiem znaków – te ciągi nie są przechowywane w przesłanym zasobie. Identyfikatory zestawów płytek są używane tylko podczas przetwarzania w celu rozróżniania nałożonych na siebie zestawów płytek.

Pasma

Drugim ważnym elementem jest dopasowanie plików źródłowych do pasm komponentów EE. Aby to zrobić, użyj sekcji bands w pliku manifestu.

Sekcję bands można pominąć. W takim przypadku pasma są tworzone najpierw z plików w pierwszym zestawie płytek, a potem z kolejnych, itd. Domyślnie pasma mają nazwy „b1”, „b2” itd. Aby zastąpić domyślne nazwy pasm, dodaj na końcu sekcję „bands”, np. w ten sposób:

{
  "name": "projects/earthengine-legacy/assets/users/username/some_folder/some_id",
  "tilesets": [
    {
      "sources": [
        {
          "uris": [
            "gs://bucket/rgb.tif"
          ]
        }
      ]
    }
  ],
  "bands": [
    {
      "id": "R",
      "tilesetBandIndex": 0
    },
    {
      "id": "G",
      "tilesetBandIndex": 1
    },
    {
      "id": "B",
      "tilesetBandIndex": 2
    }
  ]
}

Liczba pasm EE musi być taka sama jak łączna liczba pasm we wszystkich zestawach płytek.

Jeśli nie chcesz przetwarzać wszystkich pasm z pliku, możesz użyć pola tilesetBandIndex, aby wskazać, które pasma GDAL mają zostać przetworzone. Pierwszy pasek ma wartość tilesetBandIndex 0.

Przykład:

Załóżmy, że plik źródłowy zawiera 4 pasma: „tmin”, „tmin_error”, „tmax” i „tmax_error”. Chcemy przetwarzać tylko kolumny „tmin” i „tmax”. Odpowiednie sekcje pliku manifestu będą wyglądać tak:

{
  "name": "projects/earthengine-legacy/assets/users/username/some_folder/some_id",
  "tilesets": [
    {
      "id": "temperature",
      "sources": [
        {
          "uris": [
            "gs://bucket/temperature.tif"
          ]
        }
      ]
    }
  ],
  "bands": [
    {
      "id": "tmin",
      "tilesetBandIndex": 0,
      "tilesetId": "temperature"
    },
    {
      "id": "tmax",
      "tilesetBandIndex": 2,
      "tilesetId": "temperature"
    }
  ]
}

Paski maski

Maskowanie pasma jest kontrolowane przez komponent maskBands w pliku manifestu. Obsługiwane są 3 możliwe konfiguracje maski (ale pasmo maski jest zawsze ostatnim pasmem w danym pliku).

  1. Maska dla wszystkich pasm danych w tym samym pliku.
  2. Maska dla wszystkich pasm danych pochodzących ze wszystkich pozostałych plików.
  3. Maskowanie niektórych pasm danych.

1. Najczęstszym przypadkiem jest pojedynczy plik GeoTIFF, którego ostatni pasmo jest używane jako maska dla pozostałych pasm. Ta funkcja działa tylko w przypadku plików GeoTIFF typu Byte. Użyj tego pliku manifestu:

{
  "name": "projects/earthengine-legacy/assets/users/username/some_folder/some_id",
  "tilesets": [
    {
      "id": "data_tileset",
      "sources": [
        {
          "uris": [
            "gs://bucket/data_file.tif"
          ]
        }
      ]
    }
  ],
  "bands": [
    {
      "id": "data_band",
      "tilesetId": "data_tileset"
    },
    {
      "id": "qa_band",
      "tilesetId": "data_tileset"
    }
  ],
  "maskBands": [
    {
      "tilesetId": "data_tileset"
    }
  ]
}

2. Aby użyć maski GeoTIFF jako maski dla wszystkich pasm w innym pliku GeoTIFF, użyj tego pliku manifestu:

{
  "name": "projects/earthengine-legacy/assets/users/username/some_folder/some_id",
  "tilesets": [
    {
      "id": "data_tileset",
      "sources": [
        {
          "uris": [
            "gs://bucket/data_file.tif"
          ]
        }
      ]
    },
    {
      "id": "mask_tileset",
      "sources": [
        {
          "uris": [
            "gs://bucket/mask_file.tif"
          ]
        }
      ]
    }
  ],
  "bands": [
    {
      "id": "data_band",
      "tilesetId": "data_tileset"
    },
    {
      "id": "qa_band",
      "tilesetId": "data_tileset"
    }
  ],
  "maskBands": [
    {
      "tilesetId": "mask_tileset"
    }
  ]
}

3. Aby użyć pliku GeoTIFF jako maski dla określonego pasma w innym pliku, użyj tego manifestu (różnica w stosunku do poprzedniego przypadku polega na tym, że pole bandIds w maskBands jest ustawione):

{
  "name": "projects/earthengine-legacy/assets/users/username/some_folder/some_id",
  "tilesets": [
    {
      "id": "data_tileset",
      "sources": [
        {
          "uris": [
            "gs://bucket/data_file.tif"
          ]
        }
      ]
    },
    {
      "id": "mask_tileset",
      "sources": [
        {
          "uris": [
            "gs://bucket/mask_file.tif"
          ]
        }
      ]
    }
  ],
  "bands": [
    {
      "id": "data_band",
      "tilesetId": "data_tileset"
    },
    {
      "id": "qa_band",
      "tilesetId": "data_tileset"
    }
  ],
  "maskBands": [
    {
      "tilesetId": "mask_tileset",
      "bandIds": ["data_band"]
    }
  ]
}

W ostatnim przykładzie pracujemy z 2 pasmami z układu płytek data_tileset, ale maskę stosujemy tylko do jednego z nich (data_band), zgodnie z polem bandIds jedynego obiektu listy maskBands.

Pamiętaj, że jako pasmo maski jest używane tylko ostatnie pasmo w płytce, o której mowa w elementach maskBands.

Zasady dotyczące piramid finansowych

Podczas tworzenia piramid obrazów w Earth Engine należy wielokrotnie zmniejszać siatki 2 x 2 piksele do pojedynczego piksela, dokonując w pewnym stopniu przekształcenia wartości piksela. Domyślnie wartości pikseli są uśredniane, co w większości przypadków jest właściwe, gdy pas rastera reprezentuje dane mniej lub bardziej ciągłe. Są jednak 2 sytuacje, w których użycie domyślnych wartości spowoduje nieprawidłowe wyniki. W takim przypadku musisz ustawić pole pyramidingPolicy w definicji pasma (jeśli nie zostanie ustawione, jego wartość domyślnie przyjmie wartość „MEAN”).

W przypadku klasyfikacji obrazów rastrowych (np. pokrycia terenu) najbardziej logicznym sposobem piramidyzacji pikseli jest wybranie większości z czterech wartości, aby wygenerować kolejną. Jest to możliwe dzięki zastosowaniu zasady piramidy „MODE”:

{
  "name": "projects/earthengine-legacy/assets/users/username/some_folder/some_id",
  "tilesets": [
    {
      "sources": [
        {
          "uris": [
            "gs://bucket/landcover.tif"
          ]
        }
      ]
    }
  ],
  "bands": [
    {
      "id": "landcover",
      "pyramidingPolicy": "MODE"
    }
  ]
}

W przypadku pasm rastrowych, w których ani „MEAN”, ani „MODE” nie mają sensu (np. piksele zapakowane bitowo), należy zastosować zasadę piramidy „SAMPLE”. „SAMPLE” zawsze przyjmuje wartość piksela w lewym górnym rogu siatki 2 x 2. W tym przykładzie przypisujemy politykę „MEAN” do zakresu reprezentującego zmienną ciągłą („NDVI”) oraz „SAMPLE” do zakresu „QA” danych.

{
  "name": "projects/earthengine-legacy/assets/users/username/some_folder/some_id",
  "tilesets": [
    {
      "sources": [
        {
          "uris": [
            "gs://bucket/ndvi.tif"
          ]
        }
      ]
    }
  ],
  "bands": [
    {
      "id": "NDVI",
      "tilesetBandIndex": 0,
      "pyramidingPolicy": "MEAN"
    },
    {
      "id": "QA",
      "tilesetBandIndex": 1,
      "pyramidingPolicy": "SAMPLE"
    }
  ]
}

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 przyjęcie założenia, ż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",
  "tilesets": [
    {
      "sources": [
        {
          "uris": [
            "gs://bucket/img_20190612.tif"
          ]
        }
      ]
    }
  ],
  "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 obrazów. Definicje pól znajdziesz w  sekcji Definicje pól pliku manifestu.

{
  "name": <string>,
  "tilesets": [
    {
      "dataType": <string>,
      "id": <string>,
      "crs": <string>,
      "sources": [
        {
          "uris": [
            <string>
          ],
          "affineTransform": {
            "scaleX": <double>,
            "shearX": <double>,
            "translateX": <double>,
            "shearY": <double>,
            "scaleY": <double>,
            "translateY": <double>
          }
        }
      ]
    }
  ],
  "bands": [
    {
      "id": <string>,
      "tilesetId": <string>,
      "tilesetBandIndex": <int32>,
      "missingData": {
        "values": [<double>]
      },
      "pyramindingPolicy": <string>
    }
  ],
  "maskBands": [
    {
      "tilesetId": <string>,
      "bandIds": [
        <string>
      ]
    }
  ],
  "footprint": {
    "points": [
      {
        "x": <double>,
        "y": <double>
      }
    ],
    "bandId": <string>
  },
  "missingData": {
     "values": [<double>]
  },
  "pyramidingPolicy": <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/*/assets/**” (np. „projekty/earthengine-legacy/assets/users/USER/ASSET”).

zestawy płytek

list

Lista słowników definiujących właściwości zestawów płytek. Więcej informacji znajdziesz w tych polach elementu słownika tilesets:

tilesets[i].dataType

string

Określa liczbowy typ danych. Domyślnie jest to typ raportowany przez GDAL, w którym przypadku nie trzeba go definiować.

Typ danych Wartość
Nie określono „DATA_TYPE_UNSPECIFIED”
8-bitowa liczba całkowita ze znakiem „INT8”
8-bitowa liczba bez znaku „UINT8”
16-bitowa liczba całkowita ze znakiem „INT16”
16-bitowa liczba całkowita bez znaku „UINT16”
32-bitowa liczba całkowita ze znakiem „INT32”
32-bitowa liczba bez znaku „UINT32”
liczba zmiennoprzecinkowa 32-bitowa, „FLOAT32”
Liczba zmiennoprzecinkowa 64-bitowa „FLOAT64”

tilesets[i].id

string

Identyfikator zestawu płytek. Musi być unikalna wśród plików mapy określonych w pliku z zasobami. Ten identyfikator jest odrzucany na etapie przetwarzania; służy tylko do powiązania zestawu płytek z pasmem. Pusty ciąg jest prawidłowym identyfikatorem.

tilesets[i].crs

string

System odniesienia współrzędnych siatki pikseli, określony jako kod standardowy (np. kod EPSG) w miarę możliwości lub w formacie WKT.

tilesets[i].sources

list

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

tilesets[i].sources[j].uris

list

Lista identyfikatorów URI danych do przetworzenia. Obsługiwane są tylko identyfikatory 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 ImageManifest.uriPrefix, jeśli jest ustawiony.

tilesets[i].sources[j].affineTransform

dictionary

Opcjonalna transformacja afiniczna. Należy je podać tylko wtedy, gdy dane z poziomu uris (w tym z usług towarzyszących) nie wystarczą do umieszczenia pikseli. Podany jako słownik z tymi kluczami: "scaleX", "shearX", "translateX", "shearY", "scaleY", "translateY". Więcej informacji znajdziesz w tej dokumentacji.

Przykładowe klucze i wartości:

{
  "scaleX": 0.1,
  "shearX": 0.0,
  "translateX": -180.0,
  "shearY": 0.0,
  "scaleY": -0.1,
  "translateY": 90.0
}

zespoły

list

Lista słowników definiujących właściwości pojedynczego pasma pochodzącego z płytki. Pamiętaj, że kolejność pasm w zasobie jest taka sama jak kolejność w elementach bands. Więcej informacji znajdziesz w tych polach elementu słownika bands.

bands[i].id

string

Identyfikator (nazwa) zespołu.

bands[i].tilesetId

string

Identyfikator zestawu płytek odpowiadający pasmowi.

bands[i].tilesetBandIndex

int32

Indeks pasma w zestawie płyt odpowiadający pasmu, liczony od zera.

bands[i].missingData.values

list

Lista wartości (typ podwójny), która reprezentuje brak danych w pasmie.

bands[i].pyramidingPolicy

string

Zasady dotyczące piramid finansowych. Więcej informacji znajdziesz tutaj. Dostępne opcje:

  • „MEAN” (średnia) (domyślnie),
  • „MODE”
  • „SAMPLE”

maskBands

list

Lista słowników definiujących właściwości pojedynczego pasma maski pochodzącego z pliku płytek. Możesz podać maksymalnie 1 zakres maski. Więcej informacji znajdziesz w tych polach elementu słownika maskBands.

maskBands[i].tilesetId

string

Identyfikator zestawu płytek odpowiadający pasmowi maski. Ostatni pasek w zestawie jest zawsze używany jako pasek maski.

maskBands[i].bandIds

list of strings

Lista identyfikatorów pasm, do których ma zastosowanie pasmo maskowania. Jeśli pole jest puste, pasmo maski jest stosowane do wszystkich pasm w zasobie. Każda grupa może mieć tylko jedną odpowiadającą maskę.

ślad

dictionary

Słownik definiujący właściwości śladu wszystkich prawidłowych pikseli na obrazie. Jeśli to pole jest puste, domyślny ślad to całe zdjęcie. Więcej informacji znajdziesz w tych polach elementu słownika footprint.

footprint.points

list

Lista punktów określających ślad wszystkich prawidłowych pikseli na obrazie. Punkt jest zdefiniowany przez słownik z kluczami „x” i „y” o wartościach typu float. Lista punktów ma opisywać pierścień, który tworzy zewnętrzną część prostego wielokąta, który musi zawierać środki wszystkich prawidłowych pikseli obrazu. Musi to być pierścień liniowy: ostatni punkt musi być równy pierwszemu. Współrzędne są w projekcji pasma określonego przez bandId.

Uwaga: używaj współrzędnych niebędących liczbami całkowitymi, takich jak środek każdego piksela, ponieważ footprint obejmuje piksele, jeśli piksele (prostokąt 1 x 1) przecinają obszar. Aby uniknąć przypadkowego zaznaczenia sąsiednich pikseli, nie używaj współrzędnych o wartościach całkowitych, ponieważ są to granice między pikselami. Rysowanie śladu wzdłuż środka piksela zapobiega uwzględnianiu niezamierzonych pikseli, które mogą powodować błędy, gdy docelowe piksele przylegają do granicy mapy, np. południka lub pola.

Na przykład w przypadku obrazu 2 x 2 ze wszystkimi 4 poprawnymi pikselami możliwe jest takie pierścienie:

[
  {
    "x": 0.5,
    "y": 0.5
  },
  {
    "x": 0.5,
    "y": 1.5
  },
  {
    "x": 1.5,
    "y": 1.5
  },
  {
    "x": 1.5,
    "y": 0.5
  },
  {
    "x": 0.5,
    "y": 0.5
  }
]

footprint.bandId

string

Identyfikator pasma, którego układ współrzędnych CRS definiuje współrzędne śladu. Jeśli pole jest puste, używany jest pierwszy pasmo.

missingData.values

list

Lista wartości (typu podwójnego), która reprezentuje brak danych we wszystkich pasmach obrazu. Obowiązuje we wszystkich pasmach, które nie mają własnych missingData.

pyramidingPolicy

string

Zasady dotyczące piramid finansowych. Jeśli nie podasz żadnej zasady, domyślnie zostanie zastosowana zasada „MEAN”. Obowiązuje w przypadku wszystkich pasm, które nie mają własnych ustawień. Więcej informacji znajdziesz tutaj. Dostępne opcje:

  • „MEAN” (średnia) (domyślnie),
  • „MODE”
  • „SAMPLE”

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 wykonania zdjęcia satelitarnego. 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.

Ograniczenia

Rozmiar pliku manifestu JSON

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

Format pliku graficznego

Każdy plik obrazu musi być obrazem TIFF. Jeśli w pliku manifestu nie ma określonego systemu CRS, plik musi być plikiem GeoTIFF z wbudowanym systemem CRS.

Pliki TIFF można skompresować za pomocą algorytmów DEFLATE, JPEG-XL/JXL, LERC, LERC_DEFLATE, LERC_ZSTD, LZMA, LZW, WEBP lub ZSTD.

Zalecane rozwiązania, które zapewniają najlepsze wrażenia podczas przesyłania dużych plików:

  • Najlepszy wybór: ZSTD zapewnia dobry kompromis między szybkością a kompresją.
  • Unikaj: LZMA może być bardzo wolny pomimo dobrej kompresji.
  • Nieskompresowane pliki: będą większe i dłużej się będą przesyłać.
  • Kompresja stratna (np. JPEG): może zmieniać wartości pikseli. Użyj bezstratnej kompresji (np. DEFLATE, LZMA, LZW, ZSTD), chyba że rozumiesz potencjalny wpływ na swoje dane.