对不起,我是GEE初学者。
本质上,我想做的是从集合中的每个图像中提取像素中某个带的值,并将其放入数组中。
如果输出是图表,我知道如何做到这一点,例如:
print(ui.Chart.image.series(with_ndvi.select("nd"),area));
其中with_ndvi是我的图像集合,"nd"是我感兴趣的波段,面积是一个点特征。
但是,我需要将这些值放入一个数组中,因为我需要对每个值执行计算。
有没有一个简单的函数可以映射到集合上,将值提取为数字来处理?
谢谢你的帮助。
通常,为了从图像中获得特定的值,可以使用reduceRegion
。由于只有一个点,因此没有任何缩减,但可以使用相同的运算来获得区域的平均值、中值、最大值等,因此需要选择一个缩减器来执行该运算。(如果未另行指定,则ui.Chart.image.series
默认为mean
减速器(。
我根据Normalized Difference示例脚本中使用的图像构建了这个示例:
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);
可运行的示例链接
这里,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
对特征集合执行计算。