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

Я хочу построить график количества пикселей прожига для продукта площади прожига Моди в моих геометрических областях, называемых «таблицей», только для сельскохозяйственных пикселей (полученных из коллекции изображений «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);

Ответы [ 2 ]

0 голосов
/ 30 декабря 2018

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

В этом случае просто сохраните старый код, который вычисляет 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.

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

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

0 голосов
/ 27 декабря 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 есть только одно изображение.

...