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 или указать систему координат и преобразование системы координат. (См. глоссарий для получения дополнительной информации о системах координат и преобразованиях системы координат). Например, приведенное выше сокращение 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 определяет, какие пиксели следует передать редуктору, сначала растеризуя область. Если масштаб указан без системы координат, область растеризуется в собственной проекции изображения, масштабированной до указанного разрешения. Если указаны и система координат, и масштаб, область растеризуется на их основе.
Пиксели в регионе
Пиксели определяются как находящиеся в заданной области (и им присваивается соответствующий вес) в соответствии со следующими правилами, применяемыми в указанном масштабе и проекции:
- Невзвешенные редукторы (например,
ee.Reducer.count()илиee.Reducer.mean().unweighted()): пиксели включаются, если их центроид находится в заданной области и маска изображения не равна нулю. - Взвешенные редукторы (например,
ee.Reducer.mean()): пиксели включаются, если по крайней мере (приблизительно) 1/256 (~0,4%) пикселя находится в области, и маска изображения не равна нулю; их вес равен минимуму из маски изображения и (приблизительной) доли пикселя, покрытой областью. Веса пересечения пикселей внутренне представлены в виде 8-битных целых чисел (от 0 до 255), квантуя долю покрытия на 256 дискретных уровней.
Параметр maxPixels необходим для успешного выполнения вычислений. Если этот параметр отсутствует в примере, возвращается ошибка, которая выглядит примерно так:
Существует несколько способов обойти эти ошибки: увеличить значение maxPixels , как в примере, увеличить scale или установить значение bestEffort равным true, что автоматически вычислит новый (больший) масштаб таким образом, чтобы maxPixels не было превышено. Если вы не укажете maxPixels , будет использовано значение по умолчанию.