reduceRegion
Aby uzyskać statystyki wartości pikseli w regionie ee.Image
, użyj image.reduceRegion()
.
Spowoduje to zredukowanie wszystkich pikseli w regionach do statystyk lub innej zwartej reprezentacji danych pikseli w regionie (np. do histogramu). Region jest reprezentowany przez 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 rysunku 1, dane wyjściowe to statystyki utworzone na podstawie pikseli w danym regionie.

ee.Reducer
zastosowaną na obrazie i obszarze.Przykładem uzyskania statystyk pikseli w regionie obrazu za pomocą funkcji reduceRegion()
może być znalezienie średnich wartości widmowych 5-letniego obrazu złożonego Landsat w granicach lasu iglastego Sierra Nevada (ilustracja na rysunku 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ć wykonanie obliczeń, wystarczy wydrukować wynik, który edytor kodu wyświetli jako Dictionary
w konsoli. Dane wyjściowe powinny 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ślana przez podanie wartości reducer
(ee.Reducer.mean()
), geometry
(region.geometry()
), scale
(30 metrów) i maxPixels
dla maksymalnej liczby pikseli, które mają być podane do reduktora. W wywołaniach funkcji reduceRegion()
należy zawsze podawać skalę. Dzieje się tak, ponieważ w przypadku złożonych przepływów 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 jest domyślnie ustawiana na 1 stopień, co zwykle daje niezadowalające wyniki. Więcej informacji o tym, jak Earth Engine obsługuje skalowanie, znajdziesz na tej stronie.
Skalę można ustawić na 2 sposoby: przez podanie parametru scale
lub przez podanie transformacji CRS i CRS. (więcej informacji o systemach CRS i ich przekształceniach znajdziesz w glosariuszu). Na przykład redukcja meanDictionary
(powyżej) jest równoważna tym działaniom:
// 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 }));
Ogólnie określenie skali jest wystarczające i powoduje, że kod jest bardziej czytelny. Earth Engine określa, które piksele ma podać do narzędzia do redukcji, najpierw rasteryzując region. Jeśli skala jest określona bez CRS, region jest rastrowany w natywnej projekcji obrazu z wymiarami dostosowanymi do podanej rozdzielczości. Jeśli podano zarówno system CRS, jak i współrzędne, region jest rastrowany na ich podstawie.
Pixele w regionie
Piksel jest określany jako należący do regionu (i uwzględniany) zgodnie z tymi regułami: zastosowanymi w określonej skali i projekcji:
- Nieważone reduktor (np.
ee.Reducer.count()
lubee.Reducer.mean().unweighted()
): piksele są uwzględniane, jeśli ich centroid znajduje się w regionie, a maska obrazu ma wartość różną od zera. - Wagi redukujące (np.
ee.Reducer.mean()
): piksele są uwzględniane, jeśli co najmniej (w przybliżeniu) 0,5% piksela znajduje się w regionie, a maska obrazu ma wartość różną od 0; ich waga to minimum maski obrazu i (w przybliżeniu) ułamka piksela objętego przez region.
Aby obliczenia się powiodły, potrzebny jest parametr maxPixels
. Jeśli ten parametr zostanie pominięty, zwrócony zostanie komunikat o błędzie, który będzie wyglądał mniej więcej tak:
Istnieje kilka opcji, które pozwalają uniknąć tych błędów: zwiększenie wartości maxPixels
, jak w przykładzie, zwiększenie wartości scale
lub ustawienie wartości bestEffort
na true, co automatycznie oblicza nową (większą) skalę, aby nie przekroczyć wartości maxPixels
. Jeśli nie podasz wartości maxPixels
, zostanie użyta wartość domyślna.