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 , используется значение по умолчанию.