Kolekcje grafiki

Kolekcja obrazów to zbiór obrazów Earth Engine. Na przykład kolekcja wszystkich zdjęć Landsat 8 to ee.ImageCollection. Podobnie jak obraz SRTM, z którym pracujesz, kolekcje obrazów również mają identyfikator. Podobnie jak w przypadku pojedynczych obrazów, identyfikator kolekcji obrazów możesz znaleźć, wyszukując Data Catalog Earth Engine w Edytorze kodu i przeglądając stronę z informacjami o zbiorze danych. Na przykład wyszukaj „landsat 8 toa” i kliknij pierwszy wynik, który powinien odpowiadać zbiorowi danych USGS Landsat 8 Collection 1 Tier 1 TOA Reflectance. Zaimportuj ten zbiór danych za pomocą przycisku Importuj i zmień jego nazwę na l8 lub skopiuj identyfikator do konstruktora kolekcji obrazów:

Edytor kodu (JavaScript)

var l8 = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA');

Filtrowanie kolekcji obrazów

Warto zauważyć, że ta kolekcja zawiera wszystkie sceny Landsat 8 zebrane na całej Ziemi. Często przydaje się wyodrębnienie pojedynczego obrazu lub podzbioru obrazów, na których można przetestować algorytmy. Aby ograniczyć kolekcję według czasu lub przestrzeni, należy ją przefiltrować. Aby na przykład przefiltrować kolekcję pod kątem obrazów, które obejmują określoną lokalizację, najpierw zdefiniuj obszar zainteresowania za pomocą punktu (lub linii albo wielokąta), używając narzędzi do rysowania geometrii. Przesuń widok do interesującego Cię obszaru, najedź kursorem na Geometry Imports (jeśli masz już zdefiniowany co najmniej 1 obiekt geometryczny) i kliknij +new layer (jeśli nie masz żadnych importów, przejdź do następnego kroku). Wybierz narzędzie do rysowania punktów () i utwórz punkt na interesującym Cię obszarze. Nazwij import point. Teraz przefiltruj kolekcję l8, aby uzyskać tylko obrazy, które przecinają punkt, a następnie dodaj drugi filtr, aby ograniczyć kolekcję tylko do obrazów, które zostały pozyskane w 2015 roku:

Edytor kodu (JavaScript)

var spatialFiltered = l8.filterBounds(point);
print('spatialFiltered', spatialFiltered);

var temporalFiltered = spatialFiltered.filterDate('2015-01-01', '2015-12-31');
print('temporalFiltered', temporalFiltered);

W tym przypadku filterBounds() i filterDate() to metody skrótowe dla bardziej ogólnej metody filter() w kolekcjach obrazów, która przyjmuje ee.Filter() jako argument. Aby dowiedzieć się więcej o tych metodach, otwórz kartę Dokumentacja w edytorze kodu. Argumentem funkcji filterBounds() jest zdigitalizowany punkt, a argumentami funkcji filterDate() są 2 daty wyrażone jako ciągi znaków.

Pamiętaj, że możesz print() odfiltrowane kolekcje. Nie możesz wydrukować więcej niż 5000 elementów naraz, więc nie możesz na przykład wydrukować całej kolekcji l8. Po wykonaniu metody print() możesz sprawdzić wydrukowane kolekcje w konsoli. Pamiętaj, że gdy rozwiniesz ImageCollection za pomocą ikony (), a następnie rozwiniesz listę features, zobaczysz listę obrazów, z których każdy można rozwinąć i sprawdzić. To jeden ze sposobów na znalezienie identyfikatora pojedynczego obrazu. Innym, bardziej zautomatyzowanym sposobem na uzyskanie pojedynczych obrazów do analizy jest posortowanie kolekcji, aby uzyskać najnowszy, najstarszy lub optymalny obraz w odniesieniu do określonej właściwości metadanych. Na przykład podczas sprawdzania obiektów obrazów w wydrukowanych kolekcjach obrazów można zauważyć właściwość metadanych o nazwie CLOUD_COVER. Możesz użyć tej właściwości, aby uzyskać najmniej zachmurzony obraz z 2015 roku w interesującym Cię obszarze:

Edytor kodu (JavaScript)

// This will sort from least to most cloudy.
var sorted = temporalFiltered.sort('CLOUD_COVER');

// Get the first (least cloudy) image.
var scene = sorted.first();

Możesz teraz wyświetlić obraz.

Dygresja: wyświetlanie obrazów RGB

Gdy do mapy dodawany jest obraz wielopasmowy, Earth Engine wybiera pierwsze 3 pasma obrazu i domyślnie wyświetla je jako czerwone, zielone i niebieskie, rozciągając je zgodnie z typem danych, jak opisano wcześniej. Zwykle nie jest to najlepsze rozwiązanie. Jeśli na przykład dodasz do mapy obraz Landsat (scene w poprzednim przykładzie), wynik będzie niezadowalający:

Edytor kodu (JavaScript)

Map.centerObject(scene, 9);
Map.addLayer(scene, {}, 'default RGB');

Zwróć uwagę, że najpierw mapa jest wyśrodkowana na obrazie w skali powiększenia 9. Następnie obraz jest wyświetlany z pustym obiektem ({}) dla parametru visParams (szczegółowe informacje znajdziesz w dokumentacji Map.addLayer()). W rezultacie obraz jest wyświetlany z domyślną wizualizacją: pierwsze 3 pasma są mapowane odpowiednio na R, G, B i rozciągnięte do [0, 1], ponieważ pasma mają typ danych float. Oznacza to, że pasmo aerozolu przybrzeżnego („B1”) jest renderowane na czerwono, pasmo niebieskie („B2”) na zielono, a pasmo zielone („B3”) na niebiesko. Aby wyrenderować obraz jako kompozycję w kolorach rzeczywistych, musisz poinstruować Earth Engine, aby używał pasm Landsat 8 „B4”, „B3” i „B2” odpowiednio dla kanałów R, G i B. Określ, których pasm chcesz używać, za pomocą właściwości bands obiektu visParams. Więcej informacji o pasmach Landsat znajdziesz w tym materiale.

Musisz też podać wartości min i max odpowiednie do wyświetlania współczynnika odbicia typowych obiektów na powierzchni Ziemi. Chociaż listy mogą służyć do określania różnych wartości dla każdego pasma, tutaj wystarczy określić 0.3 jako max i użyć domyślnej wartości 0 dla parametru min. Połączenie parametrów wizualizacji w jeden obiekt i wyświetlenie:

Edytor kodu (JavaScript)

var visParams = {bands: ['B4', 'B3', 'B2'], max: 0.3};
Map.addLayer(scene, visParams, 'true-color composite');

Wynik powinien wyglądać mniej więcej tak jak na rysunku 5. Zwróć uwagę, że ten kod przypisuje obiekt parametrów wizualizacji do zmiennej, aby można było go użyć w przyszłości. Jak się wkrótce przekonasz, ten obiekt będzie przydatny podczas wizualizacji kolekcji obrazów.

Tutorial_api_05_true_color.png
Rysunek 5. Obraz współczynnika odbicia TOA z Landsat 8 jako kompozycja w rzeczywistych kolorach, rozciągnięty do zakresu [0, 0,3].

Spróbuj poeksperymentować z wizualizacją różnych pasm. Inną popularną kombinacją jest „B5”, „B4” i „B3”, która jest nazywana kompozycją w barwach fałszywych. Inne ciekawe kompozycje w fałszywych kolorach opisano tutaj.

Earth Engine jest przeznaczony do przeprowadzania analiz na dużą skalę, więc nie musisz ograniczać się do pracy z jedną sceną. Teraz wyświetlimy całą kolekcję jako kompozycję RGB.

Wyświetlanie kolekcji obrazów

Dodawanie kolekcji obrazów do mapy jest podobne do dodawania obrazu do mapy. Na przykład używając obrazów z 2016 roku w kolekcji l8 i zdefiniowanego wcześniej obiektu visParams,

Edytor kodu (JavaScript)

var l8 = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA');
var landsat2016 = l8.filterDate('2016-01-01', '2016-12-31');
Map.addLayer(landsat2016, visParams, 'l8 collection');

Zauważ, że teraz możesz pomniejszyć widok i zobaczyć ciągłą mozaikę, w której zbierane są zdjęcia Landsat (czyli nad lądem). Pamiętaj też, że gdy używasz karty Inspektor i klikniesz obraz, zobaczysz listę wartości pikseli (lub wykres) w sekcji Piksele oraz listę obiektów obrazu w sekcji Obiekty inspektora.

Jeśli oddalisz widok wystarczająco, prawdopodobnie zauważysz na mozaice chmury. Gdy dodasz ImageCollection do mapy, będzie on wyświetlany jako kompozyt ostatniej wartości, co oznacza, że wyświetlane są tylko najnowsze piksele (podobnie jak w przypadku wywołania mosaic() w kolekcji). Dlatego możesz zauważyć przerwy między ścieżkami, które zostały zarejestrowane w różnych momentach. Dlatego wiele obszarów może wydawać się zachmurzonych. Na następnej stronie dowiesz się, jak zmienić sposób tworzenia kompozycji obrazów, aby pozbyć się tych uciążliwych chmur.