我有一个用于减少图像收集值的点特征。
通过使用以下代码在图像上进行映射(特别是获取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()返回的对象)。
有人知道这是为什么吗,或者以一种更好的方式来获得这些值,我可以通过编程方式使用它们来进行数学运算?
在这里为初学者的问题表示歉意,这是我一段时间以来一直在努力解决的问题。
谢谢!
答案 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'));