在Google Earth Engine中,如何从一个图像集中选择与另一个图像集中所选像素值相对应的像素?

时间:2018-12-19 16:20:46

标签: mask google-earth-engine

我想在我的几何区域(称为“表格”)中绘制仅适用于农业像素(从“ lc”图像集合中获得)的modis燃烧区域产品的燃烧像素计数。我在文档中找不到任何内容来指示您可以在2个图像集合之间进行这样的查询。有人有建议吗?

我尝试过使用遮罩,但是似乎只能在单个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 :(得分:0)

据我了解,您要做的是用modba图像集合中的相应图像遮盖AgOnly图像集合中的每个图像(每月有12张图像或一个图像)(全年只有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中只有一张图像。

答案 1 :(得分:0)

在更宽的日期范围和几种土地覆盖类型下仍然可以使用。

在这种情况下,只需保留计算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

相同的想法可以应用于其他土地覆被类型。

希望这会有所帮助。