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()): 如果至少(大约)1/256 (~0.4%) 的像素位于区域中且 图像的掩码不为零,则会包含这些像素;其权重是图像的掩码和 区域覆盖的像素(近似)比例中的最小值。像素交集权重在内部表示为 8 位整数(0 到 255),将分数覆盖量量化为 256 个离散级别。
需要 maxPixels 参数才能使计算成功。 如果示例中缺少此
参数,系统会返回错误,如下所示:
您可以通过多种方式来解决这些错误:增加 maxPixels、
如示例中所示,增加 scale,或将 bestEffort 设置为
true,这会自动计算新的(更大的)比例,以使 maxPixels
不会被超出。如果您未指定 maxPixels,则系统会使用默认值。