Google Earth Engine:尝试从要素集合中获取值数组,但我得到的是一个空数组

Google Earth Engine: trying to get an array of values from a feature collection but I'm getting an empty array out

我有一个点特征,我用它来减少图像集合中的值。

通过使用此代码映射图像(特别是获取 ndvi 值),这些值作为新特征的 属性 获得:

var my_vals = images.map(function (img){
    var ndviImg = img.normalizedDifference(['B5', 'B4']);
    return ee.Feature(area, ndviImg.reduceRegion(ee.Reducer.mean(), point)); 
}); 

我需要将这些值放入一个数组中,以便我可以对它们进行额外的计算。但是,函数 Feature.getArray() returns 一个空数组。

var myArray = my_vals.getArray("nd");
print(my_vals);   // returns "[]"

但是我知道这些值确实存在于属性中,因为如果我 运行 下面的代码我可以打印出属性列表。

var myList = my_vals.aggregate_array("nd");
print(myList)   // this prints a list of my values

我的目标是将这些值的一个列表除以另一个。据我所知,我需要数组中的值才能执行此操作(我找不到使用 .aggregate_array() returns 的对象执行此操作的方法)。

有人知道这是为什么吗?或者有更好的方法来获取这些值,我可以使用它们以编程方式进行数学计算吗?

对于这里的初学者问题,我深表歉意,这是我一直在努力解决的问题。

谢谢!

为什么 getArray 不起作用:

collection.getArray('x')ee.Array(collection.get('x')) 相同——也就是说,它查找您调用它的对象的属性。由于您的 collection 本身 没有名为 'nd' 的 属性,因此没有数据。 get 系列不对 collection 的内容进行操作。

改为做什么:

要从 collection 中获取任何类型的数据,请使用 reduceColumns 操作;如果您需要所有这些,请使用 ee.Reducer.toList() 作为减速器。

print(my_vals
    .reduceColumns(ee.Reducer.toList(), ['nd'])
    .get('list'));