0

I want to use the LANDSAT/LE07/C01/T1_TOA collection in google earth engine and I am struggling to understand how the bits work in order to mask out areas with clouds and shadows. I managed to write the following, but I am not very confident and do not know how to mask out shadows.

var dataset = ee.ImageCollection('LANDSAT/LE07/C01/T1_TOA')
 .filterBounds(geometry)
    .map(function(image){return image.clip(geometry)})
    .filter(ee.Filter.calendarRange(6,8,'month'))
      .filterDate('1999-05-01','2017-09-30');

var qas = function(image) {
  var qa = image.select('BQA');
  var mask = qa.eq(672);
  return image.updateMask(mask).copyProperties(image);
}
var merged = dataset.map(qas);


var addNDVI = function(image) {
  var ndvi = image.normalizedDifference(['B4', 'B3']).rename('NDVI');
  return image.addBands(ndvi);
};

var ndvi = merged.map(addNDVI);

How to properly do quality masking with bits?

foo
  • 33
  • 6

1 Answers1

1

Try It


var cloudMaskL7 = function(image) {
  var qa = image.select('BQA');
  var cloud = qa.bitwiseAnd(1 << 4)
                  .and(qa.bitwiseAnd(1 << 6))
                  .or(qa.bitwiseAnd(1 << 8));
  var mask2 = image.mask().reduce(ee.Reducer.min());
  return image
       .select(['B3', 'B4'], ['Red', 'NIR'])
       .updateMask(cloud.not()).updateMask(mask2)
       .set('system:time_start', image.get('system:time_start'));
};


var dataset = ee.ImageCollection("LANDSAT/LE07/C01/T1_TOA")
                            .filterBounds(geometry)
                            .filterDate('2012-05-01','2017-09-30')
                            .map(cloudMaskL7)

var NDVIofLANDSAT = function(image) {
  var ndvi = image.normalizedDifference(['NIR', 'Red']).rename('NDVI');
  return image.addBands(ndvi);
};

var ndviCollection = dataset
                     .map(NDVIofLANDSAT)
                     .select("NDVI");
print("Total no of LANDSAT Images ", ndviCollection);
Map.addLayer (ndviCollection.first().select('NDVI').clip(geometry),  {min:0, max:1,  'palette': ['red','yellow', 'green']}, 'NDVI')