Google地球引擎:尝试从要素集合中获取值的数组,但出现空数组

时间:2020-03-03 22:02:34

标签: google-earth-engine

我有一个用于减少图像收集值的点特征。

通过使用以下代码在图像上进行映射(特别是获取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()返回一个空数组。

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()返回的对象)。

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

在这里为初学者的问题表示歉意,这是我一段时间以来一直在努力解决的问题。

谢谢!

1 个答案:

答案 0 :(得分:2)

为什么getArray不起作用:

collection.getArray('x')ee.Array(collection.get('x'))相同-也就是说,它查找您调用的属性。由于您的收藏集本身没有名为“ nd”的属性,因此没有数据。 get系列不处理集合的内容。

替代方法:

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

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