Google Earth Engine:从集合的每个图像中的像素中提取波段值?

Google Earth Engine: Extract band values from pixel in each image of a collection?

抱歉这个基本问题,我是 GEE 初学者。

本质上,我想做的是从集合中的每个图像中提取像素中某个波段的值,并将其放入数组中。

如果输出到图表,我知道如何执行此操作,例如:

print(ui.Chart.image.series(with_ndvi.select("nd"),area));

其中with_ndvi是我的图片集,"nd"是我感兴趣的波段,area是点特征。

但是,我需要将这些值放入一个数组中,因为我需要对每个值进行计算。

是否有一个简单的函数来映射集合以将值提取为要使用的数字?

感谢您的帮助。

通常,为了从图像中获取特定值,您使用 reduceRegion。因为你有一个点,所以没有任何缩减,但可以使用相同的操作从一个区域中获取平均值、中位数、最大值等,你需要选择一个缩减器来执行操作。 (如果您没有另外指定,ui.Chart.image.series 默认为 mean reducer)。

我根据标准化差异示例脚本中使用的图像构建了这个示例:

var imageCollection = ee.ImageCollection('MODIS/006/MOD09GA')
    .filterDate('2019-01-01', '2019-01-31');

var ndviCollection = imageCollection.map(function (img) {
  var ndImage = img.normalizedDifference(['sur_refl_b02', 'sur_refl_b01']);
  return ee.Feature(area, ndImage.reduceRegion(ee.Reducer.mean(), area));
});

print(ndviCollection);

Runnable example link

在这里,ndviCollection 是一个 FeatureCollection,其中每个要素都将原始点作为几何图形(如果您有多个兴趣点,则很有用,否则您可以将其设置为 null相反)和当时的 NDVI 作为 属性 命名为 nd.

如果您绝对需要数字列表而不是特征集合,您可以获得:

print(ndviCollection
    .toList(100)  // set this number to the maximum number of elements you expect
    .map(function (feature) { 
      return ee.Feature(feature).get('nd');
    }));

但如果可以避免,则不应这样做,因为列表始终作为一个整体保存在内存中,而不是以流方式处理。相反,使用 map and/or reduceColumns.

对特征集合执行计算