Google Earth Engine: пытаюсь получить массив значений из коллекции объектов, но я получаю пустой массив - PullRequest
0 голосов
/ 04 марта 2020

У меня есть точечная функция, которую я использовал, чтобы уменьшить значения из коллекции изображений.

Значения получаются как свойство новой функции путем сопоставления изображений с этим кодом (в частности, получение значений 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 голосов
/ 04 марта 2020

Почему 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'));
...