reduceRegion
Pour obtenir des statistiques sur les valeurs de pixel dans une région d'une ee.Image
, utilisez image.reduceRegion()
.
Tous les pixels de la ou des régions sont ainsi réduits à une statistique ou à une autre représentation compacte des données de pixel de la région (par exemple, un histogramme). La région est représentée par un Geometry
, qui peut être un polygone contenant de nombreux pixels ou un seul point, auquel cas il n'y aura qu'un seul pixel dans la région. Dans les deux cas, comme illustré dans la figure 1, la sortie est une statistique dérivée des pixels de la région.

ee.Reducer
appliqué à une image et à une région.Pour obtenir un exemple d'obtention de statistiques sur les pixels dans une région d'une image à l'aide de reduceRegion()
, envisagez de trouver les valeurs spectrales moyennes d'un composite Landsat sur cinq ans dans les limites de la forêt de conifères de la Sierra Nevada (illustrée par la figure 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);
Pour forcer le calcul, il suffit d'imprimer le résultat, que l'éditeur de code affichera sous forme de Dictionary
dans la console. Le résultat devrait ressembler à ceci:
B1: 25.406029716816853 B2: 23.971497014238988 B3: 22.91059593763103 B4: 54.83164133293403 B5: 38.07655472573677 B6_VCID_2: 198.93216428012906 B7: 24.063261634961563

Notez que dans cet exemple, la réduction est spécifiée en fournissant les valeurs reducer
(ee.Reducer.mean()
), geometry
(region.geometry()
), scale
(30 mètres) et maxPixels
pour le nombre maximal de pixels à saisir dans le réducteur. Une échelle doit toujours être spécifiée dans les appels reduceRegion()
. En effet, dans les flux de traitement complexes, qui peuvent impliquer des données provenant de différentes sources avec différentes échelles, l'échelle de la sortie ne sera pas déterminée de manière univoque à partir des entrées. Dans ce cas, l'échelle est définie par défaut sur 1 degré, ce qui produit généralement des résultats insatisfaisants. Pour en savoir plus sur la façon dont Earth Engine gère l'échelle, consultez cette page.
Il existe deux façons de définir l'échelle: en spécifiant le paramètre scale
ou en spécifiant un système de coordonnées et une transformation de système de coordonnées. (Pour en savoir plus sur les systèmes de coordonnées et les transformations de coordonnées, consultez le glossaire.) Par exemple, la réduction meanDictionary
(ci-dessus) équivaut à ce qui suit:
// 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 }));
En règle générale, spécifier l'échelle est suffisant et permet d'obtenir un code plus lisible. Earth Engine détermine les pixels à saisir dans le réducteur en rasterisant d'abord la région. Si une échelle est spécifiée sans système de coordonnées projetées, la région est rasterisée dans la projection native de l'image, mise à l'échelle à la résolution spécifiée. Si un système de coordonnées et une échelle sont spécifiés, la région est rasterisée en fonction de ces éléments.
Pixels dans la région
Les pixels sont déterminés comme étant dans la région (et pondérés) selon les règles suivantes, appliquées à l'échelle et à la projection spécifiées:
- Réducteurs non pondérés (par exemple,
ee.Reducer.count()
ouee.Reducer.mean().unweighted()
): les pixels sont inclus si leur centroïde se trouve dans la région et que le masque de l'image est différent de zéro. - Réducteurs pondérés (par exemple,
ee.Reducer.mean()
) : les pixels sont inclus si au moins (approximativement) 0,5% du pixel se trouve dans la région et que le masque de l'image est différent de zéro. Leur poids correspond au minimum du masque de l'image et de la fraction (approximative) du pixel recouvert par la région.
Le paramètre maxPixels
est nécessaire pour que le calcul aboutisse. Si ce paramètre est omis de l'exemple, une erreur est renvoyée, qui se présente comme suit:
Il existe plusieurs options pour contourner ces erreurs: augmenter maxPixels
, comme dans l'exemple, augmenter scale
ou définir bestEffort
sur "true", ce qui calcule automatiquement une nouvelle échelle (plus grande) afin que maxPixels
ne soit pas dépassé. Si vous ne spécifiez pas maxPixels
, la valeur par défaut est utilisée.