Как в Google Earth Engine выбрать пиксели из одной коллекции изображений, которые соответствуют выбранному значению пикселя из другой коллекции изображений?

Я хочу отобразить количество сожженных пикселей для продукта сгоревшей площади modis в моих областях геометрии, называемых «таблицей», только для сельскохозяйственных пикселей (полученных из коллекции изображений «lc»). Я не смог найти ничего в документах, чтобы указать, что вы можете сделать такой запрос между двумя коллекциями изображений. У кого-нибудь есть предложения?

Я пытался использовать маску, но кажется, что это может работать только для отдельных ee.Image, а не между разными коллекциями изображений. Код показан ниже:

var modba = ee.ImageCollection('MODIS/006/MCD64A1').filterDate('2017-01- 
01', '2017-12-31').select('BurnDate')

var modbaN = ee.ImageCollection('MODIS/006/MCD64A1').filterDate('2017-01- 
01', '2017-12-31').select('Uncertainty')

var lc = ee.ImageCollection('MODIS/006/MCD12Q1').filterDate('2017-01-01', 
'2017-12-31').select('LC_Type1')

var AgOnly = lc.map(function(img) {
  var ag = img.select('LC_Type1');
  return ag.eq(12); 
//Would also like to maybe have 2 or 3 LC types to select here
});

var mask_ba = modba.map(function(img){
  return img.updateMask(AgOnly);
});

var bats =
    //ui.Chart.image.seriesByRegion(modba, table, ee.Reducer.count());
    ui.Chart.image.seriesByRegion(mask_ba, table, ee.Reducer.count());

print(bats);
var unts =
    ui.Chart.image.seriesByRegion(modbaN, table, ee.Reducer.mean());

print(unts);

person toferkey    schedule 19.12.2018    source источник


Ответы (2)


Это все еще выполнимо с более широким диапазоном дат и несколькими типами земного покрова.

В этом случае просто сохраните свой старый код, вычисляющий AgOnly, и измените код, вычисляющий mask_ba, как показано ниже:

var mask_ba = modba.map(function(img){
  var img_year = img.date().format('YYYY');
  var start_date = ee.Date(img_year.cat('-01-01'));
  var end_date = start_day.advance(1, 'year');

  var Agri_this_year = AgOnly.filterDate(start_date, end_date).max();
  return img.updateMask(Agri_this_year);
});

По сути, приведенный выше код просто извлекает год текущего img, затем использует метод filterDate для выбора типа земельного покрова этого года из коллекции изображений AgOnly и, наконец, применяет updateMask.

Та же идея может быть применена к другим типам растительного покрова.

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

person Kevin    schedule 30.12.2018

Насколько я понимаю, вы пытаетесь замаскировать каждое изображение в коллекции изображений modba (в которой 12 изображений или одно в месяц) соответствующим изображением в коллекции изображений AgOnly (в которой есть только 1 изображение за весь год). Это вполне выполнимо.

В предоставленном вами коде вы updateMask используете AgOnly (коллекцию изображений), что не разрешено GEE.

Все, что вам нужно сделать, это просто создать AgOnly изображение, прежде чем использовать его для updateMask.

Попробуй это:

var AgOnly = lc.map(function(img) {
  var ag = img.select('LC_Type1');
  return ag.eq(12); 
  //Would also like to maybe have 2 or 3 LC types to select here
}).max();

Метод max() преобразует вашу коллекцию изображений в изображение. Вы также можете использовать min() или mean(), если хотите, все они дадут один и тот же результат, так как в AgOnl есть только одно изображение.

person Kevin    schedule 27.12.2018
comment
Я должен был указать более широкий диапазон дат в исходном коде. Ваш подход кажется отличным способом сделать это с одним изображением. Однако мне нужно сделать это для данных примерно за 15 лет и нескольких разных типов земельного покрова. Будет ли способ сделать это? Спасибо! - person toferkey; 28.12.2018