Wiesz już, jak wczytywać i wyświetlać obraz. Teraz możesz zastosować do niego obliczenia.
Możesz na przykład obliczyć nachylenie terenu, przekazując obraz wysokości SRTM do metody slope
pakietu ee.Terrain
.
Edytor kodu (JavaScript)
// Load the SRTM image. var srtm = ee.Image('CGIAR/SRTM90_V4'); // Apply an algorithm to an image. var slope = ee.Terrain.slope(srtm); // Display the result. Map.setCenter(-112.8598, 36.2841, 9); // Center on the Grand Canyon. Map.addLayer(slope, {min: 0, max :60}, 'slope');
Zwróć uwagę, że w kodzie ee.Terrain.slope(srtm)
srtm
obraz jest przekazywany jako argument do algorytmu nachylenia. Wynik powinien wyglądać mniej więcej tak jak na rysunku 3.

Image math
W klasie ee.Image
są też metody, które można wywołać w obiekcie obrazu. Załóżmy na przykład, że chcesz wykonać obliczenia na pasmach obrazu (czasami nazywane obliczeniami na pasmach lub algebrą map). Możesz na przykład użyć operacji trygonometrycznych na obrazie o określonym aspekcie. Aby to zrobić, najpierw przekonwertuj obraz o określonym współczynniku proporcji na radiany, a potem wywołaj na nim funkcję sin()
. Ponowne użycie naszego obrazu srtm
Edytor kodu (JavaScript)
// Get the aspect (in degrees). var aspect = ee.Terrain.aspect(srtm); // Convert to radians, compute the sin of the aspect. var sinImage = aspect.divide(180).multiply(Math.PI).sin(); // Display the result. Map.addLayer(sinImage, {min: -1, max: 1}, 'sin');
Wynik powinien wyglądać mniej więcej tak jak na rysunku 4. Warto przyjrzeć się bliżej aspect.divide(180).multiply(Math.PI).sin()
kodowi. Łącząc ze sobą kilka metod w ten sposób, kod mówi: „podziel aspekt przez 180, pomnóż wynik przez π i na koniec oblicz sinus”. W ten sposób możesz wykonywać złożone operacje matematyczne na obrazach, łącząc metody. Pełną listę operacji matematycznych, takich jak add()
, subtract()
, multiply()
itd., znajdziesz w Image
dokumentacji.

Statystyki obrazu
Inna przydatna klasa operacji na obrazach obejmuje obliczanie statystyk pikseli w regionach obrazu lub nakładki rastrowe na wektorowe. Aby obliczyć statystyki w Earth Engine, użyj funkcji redukującej reprezentowanej przez klasy w pakiecie ee.Reducer
. Załóżmy na przykład, że interesuje Cię średnia wysokość nad poziomem morza w jakimś regionie. Region możesz zdefiniować, rysując wielokąt za pomocą narzędzi do rysowania geometrii.
Aby interaktywnie narysować region, wybierz narzędzie do rysowania wielokątów (), a następnie zdigitalizuj wielokąt nad interesującym Cię obszarem i kliknij Zakończ. Pamiętaj, że wynikowy obiekt
ee.Geometry
jest automatycznie nazywany geometry
i dodawany jako import na początku skryptu. Zmień nazwę tej zmiennej na „polygon”. W tym celu kliknij nazwę zmiennej w importach i wpisz nową nazwę.
Następnie uzyskaj średnią wartość piksela w wielokącie, korzystając z tego kodu:
Edytor kodu (JavaScript)
// Compute the mean elevation in the polygon. var meanDict = srtm.reduceRegion({ reducer: ee.Reducer.mean(), geometry: polygon, scale: 90 }); // Get the mean from the dictionary and print it. var mean = meanDict.get('elevation'); print('Mean elevation', mean);
Warto tu zwrócić uwagę na kilka kwestii. Najpierw zauważ, że reduceRegion()
to metoda dostępna dla obiektów Image
(więcej informacji o zmniejszaniu regionów znajdziesz tutaj). Po drugie, argumenty metody są podawane w obiekcie JavaScript, który jest przekazywany jako pojedynczy argument. (Kluczami obiektu są nazwy parametrów metody. Wartości są argumentami metody). Po trzecie, parametr reducer
określa typ statystyki do obliczenia, a parametr geometry
określa region, w którym ma być obliczana statystyka. Parametr scale
to rozmiar piksela w metrach. Aby uniknąć niejednoznaczności, podczas redukcji zawsze określaj skalę, ponieważ Earth Engine może nie być w stanie automatycznie określić odpowiedniej skali na podstawie danych wejściowych.
(Więcej informacji o skali w Earth Engine)
Wartością zwracaną przez funkcję reduceRegion()
jest słownik, w którym kluczami są nazwy pasm, a wartościami – statystyki pikseli dla tych pasm. Metoda get()
w słowniku zwraca wartość odpowiadającą kluczowi podanemu jako argument. W tym przypadku obraz srtm
ma 1 pasmo, „elevation”, więc przykładowy kod pobiera tę statystykę ze słownika i ją wyświetla.
Jeśli po uruchomieniu tego kodu pojawi się błąd podobny do tego:
Nie martw się. Jest kilka czynności, które możesz wykonać, aby rozwiązać ten problem. Metoda reduceRegion()
zawiera sprawdzenie, czy na pewno chcesz uwzględnić w obliczeniach tak wiele pikseli. Ma to zapobiec przypadkowemu wykonaniu przez Ciebie głupich czynności, takich jak próba obliczenia średniej wartości każdego piksela o rozmiarze 1 metra na świecie (nie rób tego). Aby rozwiązać ten problem, ustaw parametr bestEffort
na true
, dodając bestEffort: true
do słownika parametrów, lub ustaw parametr maxPixels
na wartość większą niż domyślna wartość 10 milionów pikseli, lub wykonaj obie te czynności. Jeśli bestEffort
ma wartość true, Earth Engine automatycznie ponownie obliczy skalę tak, aby nie przekroczyć wartości maxPixels
.
Dygresja: skala w Earth Engine
W poprzednim przykładzie wartość scale
jest ustawiona na przybliżoną rozdzielczość natywną obrazu SRTM. Aby sprawdzić natywną rozdzielczość obrazu:
Edytor kodu (JavaScript)
var scale = srtm.projection().nominalScale(); print('SRTM scale in meters', scale);
Jeśli określisz skalę mniejszą niż natywna rozdzielczość, Earth Engine ponownie próbkuje obraz wejściowy za pomocą metody najbliższego sąsiada, a następnie uwzględnia wszystkie mniejsze piksele w obliczeniach. Jeśli ustawisz większą skalę, Earth Engine użyje pikseli wejściowych z zagregowanej wersji danych wejściowych (czyli pobierze piksele z wyższego poziomu piramidy obrazu). Więcej informacji o tym, jak Earth Engine obsługuje skalę, znajdziesz w tym dokumencie.
Do tej pory pracowaliśmy z jednym obrazem z jednym pasmem. Na następnej stronie dowiesz się więcej o obrazach wielopasmowych i kolekcjach obrazów.