reduceRegion
Чтобы получить статистику значений пикселей в области ee.Image
, используйте image.reduceRegion()
. Это сводит все пиксели в области(ях) к статистическому или другому компактному представлению данных пикселей в области (например, гистограмме). Регион представлен как Geometry
, который может быть многоугольником, содержащим множество пикселей, или это может быть одна точка, и в этом случае в регионе будет только один пиксель. В любом случае, как показано на рисунке 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);
Для принудительного вычисления достаточно распечатать результат, который Редактор кода отобразит в виде 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 обрабатывает масштаб.
Существует два способа установить масштаб: указав параметр 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
, используется значение по умолчанию.