【问题标题】:Google Earth Engine: Extract band values from pixel in each image of a collection?Google Earth Engine:从集合的每个图像中的像素中提取波段值?
【发布时间】:2020-02-27 09:14:31
【问题描述】:

对不起,我是 GEE 初学者。

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

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

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

with_ndvi 是我的图像集,“nd”是我感兴趣的波段,面积是点特征。

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

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

感谢您的帮助。

【问题讨论】:

    标签: google-earth-engine


    【解决方案1】:

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

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

    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 和/或 reduceColumns 对特征集合执行计算。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多