0

我正在尝试对非洲的一个湖进行时间序列分析。由于我感兴趣的区域位于赤道,因此每隔几天就会受到传感器未覆盖整个区域的间隙的影响(参见下图)。下面的代码中给出了 2015 年 10 月 2 日的示例,其中仅湖的边缘包含在 MODIS 路径中。如果我将这张图片包含在我的时间序列中,那么当天 AOI 的平均值是不正确的。因此,我正在寻找一种方法来过滤 imageCollection 以排除未覆盖整个感兴趣区域的日期。

//Import image 
var image = ee.Image('MOD09GA/MOD09GA_005_2015_10_02');
//Area of interest 
var AOI = /* color: #d63000 */ee.Geometry.Polygon(
    [[[35.48583984375, 2.1967272417616712],
      [36.97998046875, 2.1967272417616712],
      [37.1337890625, 4.631179340411012],
      [35.3759765625, 4.653079918274051]]]);
// True Colour Composite 
 var visParams = {bands: ['sur_refl_b01', 'sur_refl_b04', 'sur_refl_b03']};
//Add to map 
Map.addLayer(image, visParams, '2ndOct2015');

MODIS 每日路径在赤道有间隙的图像: https ://eoimages.gsfc.nasa.gov/images/imagerecords/0/687/world_2000_110_rgb143_lrg.jpg

谢谢!

4

2 回答 2

0

这似乎有效,我改编自 GEE 帮助论坛上的一个帖子。

////// MODIS COLLECTION ////////
var ci = ee.ImageCollection('MOD09GA').filterDate('2015-10-01', '2016 08-05');

// Function to exclude MODIS swath gaps  
function filterEmpty(imageCollection, polygon) {
var scale = 500
return imageCollection.map(function(i) {
  return i.set('first_value', i.select(0)
      .reduceRegion({reducer: ee.Reducer.firstNonNull(), geometry: polygon, scale: scale})
     .values().get(0))
}).filter(ee.Filter.eq('first_value', 1))
}
var c = filterEmpty(ci, Turkana);
print(c);
于 2017-08-25T13:07:20.673 回答
0

你可以这样做:

var mod09 = ee.ImageCollection("MODIS/006/MOD09GA");
var image = ee.Image('MOD09GA/MOD09GA_005_2015_10_02');
var visParams = {bands: ['sur_refl_b01', 'sur_refl_b04', 'sur_refl_b03']};
Map.addLayer(image, visParams, '2ndOct2015');

//Area of interest 
var AOI = /* color: #d63000 */ee.Geometry.Polygon(
    [[[35.48583984375, 2.1967272417616712],
      [36.97998046875, 2.1967272417616712],
      [37.1337890625, 4.631179340411012],
      [35.3759765625, 4.653079918274051]]]);
Map.centerObject(AOI);
Map.addLayer(AOI);

var count = image.select('sur_refl_b01').unmask().reduceRegion({
  reducer: 'count', 
  geometry: AOI, 
  scale: image.select('sur_refl_b01').projection().nominalScale(),
});
print(count);

var counter = function(image) {
  return image.set(image.select('sur_refl_b01').unmask().reduceRegion({
    reducer: ee.Reducer.count(), 
    geometry: AOI, 
    scale: image.select('sur_refl_b01').projection().nominalScale(),
  }));
};

var filteredCollection = mod09
  .filterDate('2016-01-01', '2016-12-31')
  .map(counter)
  // You probably want to add some delta here.
  .filter(ee.Filter.gte('sur_refl_b01', count.get('sur_refl_b01')));
print(filteredCollection);
于 2017-08-22T20:37:45.957 回答