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
- 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.
- 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.
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).
- Maska dla wszystkich pasm danych w tym samym pliku.
- Maska dla wszystkich pasm danych pochodzących ze wszystkich pozostałych plików.
- 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.