reduceRegion
Aby uzyskać statystyki wartości pikseli w regionie ee.Image, użyj
image.reduceRegion().
Spowoduje to zmniejszenie liczby pikseli w regionie(regionach) do
statystyki lub innej zwartej reprezentacji danych pikseli w regionie (np.
histogramu). Region jest reprezentowany jako Geometry, który może być
wielokątem zawierającym wiele pikseli lub pojedynczym punktem. W tym drugim przypadku w regionie będzie
tylko 1 piksel. W obu przypadkach, jak pokazano na ilustracji 1, wynikiem
jest statystyka pochodząca z pikseli w regionie.
ee.Reducer zastosowany do obrazu
and a region.Aby zobaczyć przykład uzyskiwania statystyk pikseli w regionie obrazu za pomocą
reduceRegion(), rozważmy znalezienie średnich wartości spektralnych
5-letniego kompozytu Landsat w granicach lasu iglastego Sierra Nevada (ilustracja 2):
// Load input imagery: Landsat 7 5-year composite. var image = ee.Image('LANDSAT/LE7_TOA_5YEAR/2008_2012'); // Load an input region: Sierra Nevada. var region = ee.Feature(ee.FeatureCollection('EPA/Ecoregions/2013/L3') .filter(ee.Filter.eq('us_l3name', 'Sierra Nevada')) .first()); // Reduce the region. The region parameter is the Feature geometry. var meanDictionary = image.reduceRegion({ reducer: ee.Reducer.mean(), geometry: region.geometry(), scale: 30, maxPixels: 1e9 }); // The result is a Dictionary. Print it. print(meanDictionary);
Aby wymusić obliczenie, wystarczy wydrukować wynik, który Edytor kodu wyświetli w konsoli jako Dictionary. Wynik powinien wyglądać mniej więcej tak:
B1: 25.406029716816853 B2: 23.971497014238988 B3: 22.91059593763103 B4: 54.83164133293403 B5: 38.07655472573677 B6_VCID_2: 198.93216428012906 B7: 24.063261634961563
Pamiętaj, że w tym przykładzie redukcja jest określona przez podanie reducer
(ee.Reducer.mean()), geometry (region.geometry()),
scale (30 metrów) i maxPixels dla maksymalnej liczby
pikseli, które mają być użyte w reduktorze. Skala powinna być zawsze określona w
reduceRegion() wywołaniach. Dzieje się tak, ponieważ w złożonych procesach przetwarzania, które
mogą obejmować dane z różnych źródeł o różnych skalach, skala danych wyjściowych
nie będzie jednoznacznie określona na podstawie danych wejściowych. W takim przypadku skala domyślnie wynosi
1 stopień, co zwykle daje niezadowalające wyniki. Więcej informacji o tym, jak Earth Engine obsługuje skalę, znajdziesz na this
page.
Skalę można ustawić na 2 sposoby: określając parametr scale lub określając CRS i transformację CRS. (Więcej informacji o CRS i transformacjach CRS znajdziesz w słowniku
). Na przykład redukcja
meanDictionary (powyżej) jest równoważna z:
// As an alternative to specifying scale, specify a CRS and a CRS transform. // Make this array by constructing a 4326 projection at 30 meters, // then copying the bounds of the composite, from composite.projection(). var affine = [0.00026949458523585647, 0, -180, 0, -0.00026949458523585647, 86.0000269494563]; // Perform the reduction, print the result. print(image.reduceRegion({ reducer: ee.Reducer.mean(), geometry: region.geometry(), crs: 'EPSG:4326', crsTransform: affine, maxPixels: 1e9 }));
Zasadniczo wystarczy określić skalę, co sprawia, że kod jest bardziej czytelny. Earth Engine określa, które piksele mają być użyte w reduktorze, najpierw rasteryzując region. Jeśli skala jest określona bez CRS, region jest rasteryzowany w natywnej projekcji obrazu przeskalowanej do określonej rozdzielczości. Jeśli określono zarówno CRS, jak i skalę, region jest rasteryzowany na ich podstawie.
Piksele w regionie
Piksele są uznawane za znajdujące się w regionie (i ważone) zgodnie z tymi regułami, stosowanymi w określonej skali i projekcji:
- Reduktory bez wag (np.
ee.Reducer.count()lubee.Reducer.mean().unweighted()): piksele są uwzględniane, jeśli ich środek znajduje się w regionie, a maska obrazu jest różna od zera. - Reduktory z wagami (np.
ee.Reducer.mean()): piksele są uwzględniane, jeśli co najmniej (w przybliżeniu) 1/256 (~0,4%) piksela znajduje się w regionie, a maska obrazu jest różna od zera. Ich waga jest minimalną wartością maski obrazu i (przybliżonej) części piksela pokrytej przez region. Wagi przecięcia pikseli są reprezentowane wewnętrznie jako 8-bitowe liczby całkowite (od 0 do 255), które kwantyzują ułamkową pokrycie na 256 dyskretnych poziomów.
Aby obliczenie się powiodło, potrzebny jest parametr maxPixels. Jeśli ten
parametr zostanie pominięty w przykładzie, zostanie zwrócony błąd, który wygląda mniej więcej tak:
Aby rozwiązać te błędy, możesz zwiększyć wartość maxPixels,
jak w przykładzie, zwiększyć scale lub ustawić bestEffort na
true, co automatycznie obliczy nową (większą) skalę, tak aby nie przekroczyć wartości maxPixels. Jeśli nie określisz maxPixels, zostanie użyta wartość domyślna.