reduceRegion
ee.Image
の領域内のピクセル値の統計情報を取得するには、image.reduceRegion()
を使用します。これにより、リージョン内のすべてのピクセルが、リージョン内のピクセルデータの統計情報やその他のコンパクトな表現(ヒストグラムなど)に圧縮されます。リージョンは Geometry
として表されます。これは、多くのピクセルが含まれるポリゴンである場合もあれば、単一の点である場合もあります。この場合、リージョンには 1 つのピクセルのみが含まれます。いずれの場合も、図 1 に示すように、出力はリージョン内のピクセルから導出された統計情報です。

ee.Reducer
のイラスト。reduceRegion()
を使用して画像の領域のピクセル統計情報を取得する例として、シエラネバダ針葉樹林の境界内の 5 年間の Landsat 合成画像の平均スペクトル値を求めてみましょう(図 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);
計算を強制するには、結果を出力するだけで十分です。Code Editor は、コンソールに Dictionary
として結果を表示します。出力は次のようになります。
B1: 25.406029716816853 B2: 23.971497014238988 B3: 22.91059593763103 B4: 54.83164133293403 B5: 38.07655472573677 B6_VCID_2: 198.93216428012906 B7: 24.063261634961563

この例では、reducer
(ee.Reducer.mean()
)、geometry
(region.geometry()
)、scale
(30 メートル)、maxPixels
(リデューサーに入力するピクセル数の上限)を指定して、縮小を指定しています。reduceRegion()
呼び出しでは常にスケールを指定する必要があります。これは、異なるスケールの異なるソースのデータが含まれる複雑な処理フローでは、出力のスケールが入力から明確に決定されないためです。その場合、スケールはデフォルトで 1 度になりますが、通常は満足できる結果が得られません。Earth Engine がスケールを処理する方法の詳細については、こちらのページをご覧ください。
スケールを設定する方法は 2 つあります。scale
パラメータを指定するか、CRS と CRS 変換を指定します。(CRS と CRS 変換の詳細については、用語集をご覧ください)。たとえば、上記の meanDictionary
の削減は次のようになります。
// 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 }));
一般的に、スケールを指定するだけで十分であり、コードの読みやすさが向上します。Earth Engine は、まず対象領域をラスター化して、どのピクセルをレジューダに入力するかを決定します。CRS なしでスケールが指定されている場合、リージョンは指定された解像度にスケーリングされた画像のネイティブ プロジェクションでラスター化されます。CRS とスケールの両方が指定されている場合、リージョンはこれらに基づいてラスター化されます。
地域内のピクセル
ピクセルが対象地域内にあるかどうか(および重み付け)は、指定されたスケールと投影で適用される次のルールに基づいて決定されます。
- 重み付けなしの集約関数(
ee.Reducer.count()
やee.Reducer.mean().unweighted()
など): ピクセルの重心が対象領域内にあり、画像のマスクがゼロでない場合、ピクセルは対象になります。 - 重み付きリデューサー(例:
ee.Reducer.mean()
): ピクセルの少なくとも(約)0.5% が領域内にあり、画像のマスクがゼロでない場合、ピクセルは含まれます。重みは、画像のマスクと、領域で覆われているピクセルの(近似)小数分の最小値です。
計算を成功させるには、maxPixels
パラメータが必要です。このパラメータを例から省略すると、次のようなエラーが返されます。
これらのエラーを回避するには、複数の方法があります。maxPixels
を増やす、例のように scale
を増やす、bestEffort
を true に設定する(これにより、maxPixels
が超過しないように新しい(大きい)スケールが自動的に計算されます)。maxPixels
を指定しないと、デフォルト値が使用されます。