reduceRegion
Wenn Sie Statistiken zu Pixelwerten in einer Region eines ee.Image abrufen möchten, verwenden Sie
image.reduceRegion().
Dadurch werden alle Pixel in der Region(en) auf eine
Statistik oder eine andere kompakte Darstellung der Pixeldaten in der Region reduziert (z.B.
Histogramm). Die Region wird als Geometry dargestellt, die ein
Polygon mit vielen Pixeln oder ein einzelner Punkt sein kann. In diesem Fall gibt es nur ein Pixel in der Region.
In beiden Fällen ist die Ausgabe, wie in Abbildung 1 dargestellt, eine Statistik, die aus den Pixeln in der Region abgeleitet wird.
ee.Reducer, der auf ein Bild
und eine Region angewendet wird.Ein Beispiel für das Abrufen von Pixelstatistiken in einer Region eines Bildes mit
reduceRegion() ist das Ermitteln der mittleren Spektral
werte eines 5-jährigen Landsat-Composites innerhalb der Grenzen des Sierra Nevada
Coniferous Forest (siehe Abbildung 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);
Um die Berechnung zu erzwingen, reicht es aus, das Ergebnis auszugeben. Der Code-Editor zeigt es dann als Dictionary in der Konsole an. Die Ausgabe sollte in etwa so aussehen:
B1: 25.406029716816853 B2: 23.971497014238988 B3: 22.91059593763103 B4: 54.83164133293403 B5: 38.07655472573677 B6_VCID_2: 198.93216428012906 B7: 24.063261634961563
In diesem Beispiel wird die Reduzierung durch Angabe von reducer
(ee.Reducer.mean()), geometry (region.geometry()),
scale (30 Meter) und maxPixels für die maximale Anzahl von
Pixeln, die in den Reducer eingegeben werden sollen, festgelegt. In
reduceRegion() Aufrufen sollte immer eine Skalierung angegeben werden. Bei komplexen Verarbeitungsabläufen, die
Daten aus verschiedenen Quellen mit unterschiedlichen Skalierungen umfassen können, lässt sich die Skalierung der Ausgabe
nicht eindeutig aus den Eingaben bestimmen. In diesem Fall wird standardmäßig die Skalierung 1 Grad verwendet, was in der Regel zu unbefriedigenden Ergebnissen führt. Weitere Informationen zur Verarbeitung von Skalierungen in Earth Engine finden Sie auf dieser
Seite.
Es gibt zwei Möglichkeiten, die Skalierung festzulegen: durch Angabe des Parameters scale oder durch Angabe eines CRS und einer CRS-Transformation. Weitere Informationen zu CRS und CRS-Transformationen finden Sie in the glossary for
more information about CRS's and CRS transforms). Die Reduzierung
meanDictionary (siehe oben) entspricht beispielsweise Folgendem:
// 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 }));
Im Allgemeinen reicht es aus, die Skalierung anzugeben. Das führt zu besser lesbarem Code. Earth Engine bestimmt, welche Pixel in den Reducer eingegeben werden sollen, indem zuerst die Region gerastert wird. Wenn eine Skalierung ohne CRS angegeben wird, wird die Region in der nativen Projektion des Bildes gerastert, skaliert auf die angegebene Auflösung. Wenn sowohl ein CRS als auch eine Skalierung angegeben werden, wird die Region anhand dieser Werte gerastert.
Pixel in der Region
Pixel werden gemäß den folgenden Regeln als in der Region befindlich bestimmt und gewichtet: angewendet in der angegebenen Skalierung und Projektion:
- Ungewichtete Reducer (z.B.
ee.Reducer.count()oderee.Reducer.mean().unweighted()): Pixel werden einbezogen, wenn ihr Schwerpunkt in der Region liegt und die Maske des Bildes nicht null ist. - Gewichtete Reducer (z.B.
ee.Reducer.mean()): Pixel werden einbezogen, wenn mindestens (ungefähr) 1/256 (~0,4%) des Pixels in der Region liegt und die Maske des Bildes nicht null ist.Das Gewicht ist das Minimum der Maske des Bildes und des (ungefähren) Anteils des Pixels, der von der Region abgedeckt wird. Pixel-Schnittgewichte werden intern als 8-Bit-Ganzzahlen (0 bis 255) dargestellt, wobei die fraktionale Abdeckung in 256 diskrete Stufen quantisiert wird.
Der Parameter maxPixels ist erforderlich, damit die Berechnung erfolgreich ist. Wenn dieser
Parameter im Beispiel fehlt, wird ein Fehler zurückgegeben, der in etwa so aussieht:
Es gibt mehrere Möglichkeiten, diese Fehler zu beheben: Erhöhen Sie maxPixels, wie im Beispiel, erhöhen Sie die scale oder setzen Sie bestEffort auf
„true“. Dadurch wird automatisch eine neue (größere) Skalierung berechnet, sodass maxPixels
nicht überschritten wird. Wenn Sie maxPixels nicht angeben, wird der Standardwert verwendet.