微信关注——辽宁微健康

reduceRegion

百度 报名时间:2018年3月24日18:00至2018年4月8日24:00。

如需获取 ee.Image 某个区域的像素值的统计信息,请使用 image.reduceRegion()。 这会将区域中的所有像素都缩减为统计数据或区域中像素数据的其他紧凑表示法(例如直方图)。该区域表示为 Geometry,它可以是多边形,包含许多像素,也可以是单个点,在这种情况下,该区域中只有一个像素。无论是哪种情况,如图 1 所示,输出都是从区域中的像素派生的统计信息。

reduceRegion 示意图
图 1. 一张插图,显示了对图片和区域应用了 ee.Reducer

如需查看使用 reduceRegion() 获取图片某个区域的像素统计信息的示例,不妨考虑查找 Sierra Nevada 针叶林边界内的 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
reduceRegion 示意图
图 2. 加利福尼亚州和内华达州的 Landsat 图像数据的假彩色合成图。要缩减的区域以白色显示。

请注意,在此示例中,通过提供 reducer (ee.Reducer.mean())、geometry (region.geometry())、scale (30 米) 和 maxPixels(输入到 reducer 的像素数上限)来指定缩减。在 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,则系统会使用默认值。