Wcześniej dowiedzieliśmy się, jak uzyskać poszczególne sceny Landsat, wykonując na przykład te czynności, gdzie l8
i point
to importy reprezentujące kolekcję Landsat 8 TOA i geometrię obszaru zainteresowania:
Edytor kodu (JavaScript)
// Define a point of interest. Use the UI Drawing Tools to import a point // geometry and name it "point" or set the point coordinates with the // ee.Geometry.Point() function as demonstrated here. var point = ee.Geometry.Point([-122.292, 37.9018]); // Import the Landsat 8 TOA image collection. var l8 = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA'); // Get the least cloudy image in 2015. var image = ee.Image( l8.filterBounds(point) .filterDate('2015-01-01', '2015-12-31') .sort('CLOUD_COVER') .first() );
Załóżmy, że chcesz obliczyć obraz znormalizowanego różnicowego wskaźnika wegetacji (NDVI) na podstawie obrazu Landsat. Roślinność odbija światło w zakresie bliskiej podczerwieni (NIR) widma elektromagnetycznego i pochłania światło w zakresie czerwonym (więcej informacji o odbiciu światła NIR przez roślinność). NDVI używa tego do utworzenia pojedynczej wartości, która w przybliżeniu odzwierciedla aktywność fotosyntetyczną zachodzącą w pikselu. Oblicza się go w następujący sposób: (NIR – czerwony) / (NIR + czerwony). W wyniku tego otrzymujemy liczbę z zakresu od 1 do -1, gdzie piksele o wysokiej aktywności fotosyntetycznej mają wysoki wskaźnik NDVI. Oto jeden ze sposobów obliczania NDVI w Earth Engine:
Edytor kodu (JavaScript)
// Compute the Normalized Difference Vegetation Index (NDVI). var nir = image.select('B5'); var red = image.select('B4'); var ndvi = nir.subtract(red).divide(nir.add(red)).rename('NDVI'); // Display the result. Map.centerObject(image, 9); var ndviParams = {min: -1, max: 1, palette: ['blue', 'white', 'green']}; Map.addLayer(ndvi, ndviParams, 'NDVI image');
Wynik powinien wyglądać podobnie do tego na rysunku 8. Zauważ, że do uzyskania pasm NIR i czerwonego używamy funkcji select()
, o której pisaliśmy w poprzedniej sekcji dotyczącej maskowania. Następnie obliczamy NDVI za pomocą operatorów matematycznych obrazu, które znasz już z sekcji dotyczącej Image
matematyki. Na koniec wyświetl obraz z paletą. W palecie użyliśmy nazw kolorów zamiast ciągów szesnastkowych. (Szczegółowe informacje znajdziesz w tym zewnętrznym artykule na temat kolorów CSS).

Operacja znormalizowanej różnicy jest tak powszechna w teledetekcji, że w ee.Image
jest dostępna funkcja skrótu, która ułatwia uproszczenie kodu w poprzednim przykładzie:
Edytor kodu (JavaScript)
var ndvi = image.normalizedDifference(['B5', 'B4']).rename('NDVI');
Mapowanie funkcji na kolekcję
Załóżmy, że chcesz dodać NDVI do każdego obrazu w kolekcji obrazów. W Earth Engine można to zrobić, map()
funkcję w kolekcji.
Nie myl obiektu map()
z obiektem Map
. Pierwsza z nich to metoda w kolekcji, która używa funkcji map w kontekście obliczeń równoległych, czyli stosuje funkcję do każdego elementu w kolekcji. Funkcja określa operacje, które będą stosowane do każdego elementu w kolekcji. W samouczku dotyczącym JavaScriptu pojawiła się prosta funkcja, ale teraz utworzymy funkcję, która będzie zawierać funkcje Earth Engine. Na przykład skopiuj poprzedni kod NDVI do funkcji, która zwraca obraz wejściowy z pasmem NDVI:
Edytor kodu (JavaScript)
var addNDVI = function(image) { var ndvi = image.normalizedDifference(['B5', 'B4']).rename('NDVI'); return image.addBands(ndvi); }; // Test the addNDVI function on a single image. var ndvi = addNDVI(image).select('NDVI');
Ten kod może nie być tak wydajny w przypadku obliczania NDVI dla pojedynczego obrazu, ale tej funkcji można użyć jako argumentu w funkcji map()
, aby dodać pasmo NDVI do każdego obrazu w kolekcji. Często warto najpierw przetestować funkcję na jednym obrazie, aby upewnić się, że działa zgodnie z oczekiwaniami. Po przetestowaniu funkcji na pojedynczym obrazie i upewnieniu się, że działa zgodnie z Twoimi oczekiwaniami, możesz zastosować ją do całej kolekcji:
Edytor kodu (JavaScript)
var withNDVI = l8.map(addNDVI);
Aby sprawdzić, czy w każdym obrazie w tej kolekcji znajduje się pasmo NDVI, możesz dodać withNDVI
kolekcję do mapy i sprawdzić losową lokalizację
na karcie Narzędzie do sprawdzania. Każdy obraz w kolekcji powinien mieć teraz pasmo o nazwie NDVI
.
Tworzenie kompozycji z najbardziej zielonych pikseli
Teraz, gdy masz już kolekcję obrazów, w której każdy obraz ma pasmo NDVI, możemy poznać nowy sposób tworzenia kompozycji: qualityMosaic()
. Możesz zauważyć nieciągłości między ścieżkami Landsat, nawet w kompozycji mediany pikseli. Częściowo może to wynikać z różnic w fenologii, ponieważ obrazy na sąsiednich ścieżkach są zbierane w różnych terminach (dokładnie z 8-dniowym odstępem). Jednym ze sposobów na zminimalizowanie tego problemu jest próba ustawienia wartości pikseli w kompozycji na podstawie danych z mniej więcej tego samego etapu fenologicznego, np. okresu maksymalnej zieleni roślin (gdy liście są rozwinięte i aktywne fotosyntetycznie). Jeśli maksymalną zieloność zdefiniujemy jako maksymalny wskaźnik NDVI, możemy użyć funkcji qualityMosaic()
, aby utworzyć kompozycję, w której każdy piksel zawiera piksel o maksymalnym wskaźniku NDVI z kolekcji.
Teraz możesz korzystać z dodatkowego pasma NDVI w kolekcji withNDVI
:
Edytor kodu (JavaScript)
// Make a "greenest" pixel composite. var greenest = withNDVI.qualityMosaic('NDVI'); // Display the result. var visParams = {bands: ['B4', 'B3', 'B2'], max: 0.3}; Map.addLayer(greenest, visParams, 'Greenest pixel composite');
Wynik działania tego kodu powinien wyglądać podobnie do tego na rysunku 9. Porównując rysunek 9 ze średnią kompozycją pikseli przedstawioną na rysunku 6, można zauważyć, że kompozycja pikseli o największej ilości zieleni jest rzeczywiście znacznie bardziej zielona. Jednak dokładne zbadanie zbiorników wodnych powinno ujawnić inny problem. W szczególności zbiorniki wodne są teraz zamglone. Wynika to ze sposobu działania metody qualityMosaic()
: w każdej lokalizacji analizowany jest cały ciąg czasowy, a piksel o najwyższej wartości w paśmie NDVI jest ustawiany jako wartość złożona. Ponieważ wskaźnik NDVI jest wyższy w przypadku chmur niż wody, obszary wodne są pokryte pikselami chmur, a obszary porośnięte roślinnością są zielone, ponieważ wskaźnik NDVI jest najwyższy, gdy roślinność w pikselu jest aktywna fotosyntetycznie.

Znasz już kilka sposobów łączenia i mozaikowania obrazów w Earth Engine. Możesz tworzyć kompozycje z ostatnich wartości, mediany lub najbardziej zielonych pikseli na podstawie obrazów filtrowanych według czasu i miejsca lub wszystkich obrazów w kolekcji. Wiesz już, jak przeprowadzać obliczenia na podstawie zdjęć i wyodrębniać informacje. Na następnej stronie znajdziesz informacje o tym, jak uzyskać dane z Earth Engine, np. w postaci wykresu lub zbioru danych wyeksportowanego do folderu na Dysku Google.