Wcześniej dowiedziałeś się, jak uzyskać poszczególne sceny Landsat, wykonując coś takiego, 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 teraz, że chcesz obliczyć obraz znormalizowanego różnicowego wskaźnika wegetacji (NDVI) na podstawie obrazu Landsat. Roślinność odbija światło w bliskiej podczerwieni (NIR) i pochłania światło w czerwonej części widma elektromagnetycznego (więcej informacji o odbiciu światła w bliskiej podczerwieni przez roślinność). NDVI wykorzystuje te dane do utworzenia pojedynczej wartości, która w przybliżeniu odzwierciedla aktywność fotosyntetyczną zachodzącą w pikselu. Obliczenia są wykonywane według wzoru (NIR – czerwony) / (NIR + czerwony). W wyniku otrzymujemy liczbę z zakresu od 1 do -1, przy czym 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ć mniej więcej tak jak na rysunku 8. Zwróć uwagę, że używamy funkcji select(), którą poznaliśmy w poprzedniej sekcji dotyczącej maskowania, aby uzyskać pasma NIR i czerwone, a następnie obliczyć NDVI za pomocą operatorów matematycznych obrazu, które również widzieliśmy wcześniej w sekcji dotyczącej matematyki Image. Na koniec wyświetl obraz z paletą. W tym przypadku w palecie użyliśmy nazw kolorów zamiast ciągów szesnastkowych. (Szczegółowe informacje znajdziesz w tym zewnętrznym dokumencie na temat kolorów CSS).
Operacja znormalizowanej różnicy jest tak powszechna w teledetekcji, że w ee.Image dostępna jest funkcja skrótu, która przydaje się do uproszczenia kodu w poprzednim przykładzie:
Edytor kodu (JavaScript)
var ndvi = image.normalizedDifference(['B5', 'B4']).rename('NDVI');
Mapowanie funkcji na kolekcję
Załóżmy teraz, że chcesz dodać NDVI do każdego obrazu w kolekcji obrazów. W Earth Engine można to zrobić, stosując funkcję map() do kolekcji.
Nie należy mylić map() z obiektem Map. Pierwsza z nich to metoda w kolekcji, która używa map w sensie obliczeń równoległych, aby zastosować funkcję do każdego elementu w kolekcji. Funkcja definiuje operacje, które zostaną zastosowane do każdego elementu w kolekcji. W samouczku JavaScriptu pokazaliśmy prostą funkcję, ale teraz utworzymy funkcję, która zawiera funkcje Earth Engine. Możesz na przykład skopiować 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 tę funkcję można wykorzystać jako argument dla map(), aby dodać pasmo NDVI do każdego obrazu w kolekcji. Często warto najpierw przetestować funkcję na pojedynczym obrazie, aby upewnić się, że działa zgodnie z oczekiwaniami. Po przetestowaniu funkcji na pojedynczym obrazie i stwierdzeniu, że działa zgodnie z oczekiwaniami, możesz ją zmapować na kolekcję:
Edytor kodu (JavaScript)
var withNDVI = l8.map(addNDVI);
Aby sprawdzić, czy rzeczywiście dodaje to pasmo NDVI do każdego obrazu w tej kolekcji, możesz dodać kolekcję withNDVI do mapy i sprawdzić losową lokalizację na karcie Inspektor. Zauważysz, że każdy obraz w kolekcji ma teraz pasmo o nazwie NDVI.
Tworzenie kompozycji pikseli o najbardziej zielonym odcieniu
Teraz, gdy masz już kolekcję obrazów, w której każdy obraz ma pasmo NDVI, możemy poznać nowy sposób tworzenia obrazów wielospektralnych: qualityMosaic(). Możesz zauważyć przerwy między ścieżkami Landsat, nawet w kompozycji pikseli mediany. Jednym z powodów mogą być różnice w fenologii wynikające z tego, że zdjęcia na sąsiednich ścieżkach zostały zebrane w różnych momentach (konkretnie w odstępie 8 dni). Jednym ze sposobów na zminimalizowanie tego efektu jest próba ustawienia wartości pikseli w kompozycji z mniej więcej tego samego etapu fenologicznego, na przykład czasu maksymalnej zieloności roślin (gdy liście są na drzewach i są aktywne fotosyntetycznie). Jeśli maksymalną zieleń określimy za pomocą maksymalnego NDVI, możemy użyć funkcji qualityMosaic(), aby utworzyć obraz wielospektralny, w którym każdy piksel zawiera piksel o maksymalnym NDVI z kolekcji.
Teraz możesz użyć dodanego 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 tego kodu powinien wyglądać mniej więcej tak jak na rysunku 9. Porównując rysunek 9 z medianą kompozytu pokazaną na rysunku 6, można zauważyć, że kompozyt z najbardziej zielonym pikselem jest rzeczywiście znacznie bardziej zielony. Jednak dokładne przyjrzenie się zbiornikom wodnym powinno ujawnić inny problem. W szczególności zbiorniki wodne wyglądają teraz na mętne. Wynika to ze sposobu działania metody qualityMosaic(): w każdej lokalizacji sprawdzany jest cały ciąg czasowy, a piksel o maksymalnej wartości w paśmie NDVI jest ustawiany jako wartość złożona. Ponieważ NDVI jest wyższy nad chmurami niż nad wodą, obszary wodne mają piksele chmur, a obszary porośnięte roślinnością są zielone, ponieważ NDVI jest najwyższy, gdy roślinność w pikselu jest aktywna fotosyntetycznie.
Znasz już kilka sposobów tworzenia kompozycji i mozaik obrazów w Earth Engine. Możesz tworzyć kompozycje z najnowszymi wartościami, medianą lub najbardziej zielonymi pikselami z obrazów przefiltrowanych według czasu i miejsca lub wszystkich obrazów w kolekcji. Wiesz już, jak wykonywać obliczenia na zdjęciach i wyodrębniać informacje. Na następnej stronie opisujemy sposoby pobierania informacji z Earth Engine, na przykład w postaci wykresu lub zbioru danych wyeksportowanego do folderu Dysku Google.