【问题标题】:In Google Earth Engine, How do I select pixels from one image collection which correspond to a selected pixel value from another image collection?在 Google 地球引擎中,如何从一个图像集合中选择与另一个图像集合中的选定像素值相对应的像素?
【发布时间】:2019-03-27 09:28:36
【问题描述】:

我想绘制我的几何区域内称为“表”的 modis 烧毁区域产品的烧伤像素计数,仅用于农业像素(从“lc”图像集合中获得)。我在文档中找不到任何内容表明您可以在 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);

【问题讨论】:

    标签: mask google-earth-engine


    【解决方案1】:

    它仍然适用于更广泛的日期范围和多种土地覆盖类型。

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

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

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      据我了解,您要做的是用AgOnly 图像集合(只有 1全年的图像)。这是完全可行的。

      在您提供的代码中,您是 updateMask,使用 GEE 不允许的 AgOnly(图像集合)。

      您只需将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 中只有一张图片。

      【讨论】:

      • 我应该在原始代码中指定更宽的日期范围。你的方法似乎是用一张图片来做这件事的好方法。但是,我需要对大约 15 年的数据和几种不同的土地覆盖类型进行此操作。有没有办法做到这一点?谢谢!
      猜你喜欢
      • 2017-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多