применить функцию к 2 последовательным изображениям в коллекции изображений в google earth engine - PullRequest
0 голосов
/ 27 марта 2019

функция .map применяет функцию к каждому отдельному изображению в коллекции изображений.А функция .iterate применяет функцию к одному изображению, а вывод вычислений, выполненных к предшествующему изображению в коллекции изображений.Первое работает только с одним изображением каждый раз, а второе подразумевает модификацию каждого изображения и использование его для любых расчетов со следующим.

Мне нужна функция, которая работает как .iterate, но не изменяет предыдущее изображение.Мне просто нужно сделать: image (time -1) / image (time 0).Я не могу найти способ сделать это,

спасибо за вашу помощь

Я пытался,

var first = ee.List([
  ee.Image(1).set('system:time_start', time0).select([0], ['pc1'])
]);

var changeDET = function(image, list) {
  var previous = ee.Image(ee.List(list).get(-1));
  var change = previous.divide(image.select('pc1'))
    .set('system:time_start', image.get('system:time_start'));

  return ee.List(list).add(change);
};

var cumulative = ee.ImageCollection(ee.List(imageCollection.iterate(changeDET, first)))
  .sort('system:time_start', false)

1 Ответ

0 голосов
/ 28 марта 2019

Что вы можете сделать, это преобразовать вашу коллекцию imageCollection в объект ee.List, а затем отобразить этот список с помощью индексной переменной для доступа к предыдущему изображению.Пример кода приведен ниже:

var length = yourImageCollection.size();
var list = yourImageCollection.toList(length);

var calculated_list = list.map(function(img) {
    var index = list.indexOf(img)
    img = ee.Image(img);
    var previousIndex = ee.Algorithms.If(index.eq(0), index, index.subtract(1));
    var previousImage = ee.Image(list.get(previousIndex)):
    var change = ee.Image(previousImage.divide(img)
                                       .copyProperties(img, ["system:time_start"]));
    return change;
})

Я не уверен, что вы хотите сделать с первым изображением, поэтому, когда функция map достигнет первого изображения, previousIndex будет равен index.Другими словами, первое изображение будет разделено само по себе (так как перед ним нет изображения).

Надеюсь, это поможет.

...