Extract the QA bits to mask clouds and cirrus
The code below uses the getQABits helper function to extract information from the stateQA band. Click here for the example.
// import data
var collection = ee.ImageCollection("MODIS/MOD09A1")
// Define dates
var iniDate = ee.Date.fromYMD(2010,1,1);
var endDate = ee.Date.fromYMD(2010,1,31);
// bands
var modisBands = ['sur_refl_b03','sur_refl_b04','sur_refl_b01','sur_refl_b02','sur_refl_b06','sur_refl_b07'];
var lsBands = ['blue','green','red','nir','swir1','swir2'];
// helper function to extract the QA bits
function getQABits(image, start, end, newName) {
// Compute the bits we need to extract.
var pattern = 0;
for (var i = start; i <= end; i++) {
pattern += Math.pow(2, i);
}
// Return a single band image of the extracted QA bits, giving the band
// a new name.
return image.select([0], [newName])
.bitwiseAnd(pattern)
.rightShift(start);
}
// create cloud free composite
var first = collection.filterDate(iniDate,endDate).first().select(modisBands,lsBands);
// vis parameters
var visParams = {bands:['red','green','blue'],min:0,max:3000,gamma:1.3};
Map.addLayer(first,visParams,"first image rgb")
/*Bits 8-9: Cirrus detected
0: None
1: Small
2: Average
3: High*/
var cirrus = getQABits(collection.filterDate(iniDate,endDate).first().select('StateQA'),8,9,'internal_quality_flag');
Map.addLayer(cirrus.eq(0),{min:0,max:1},"no cirrus")
Map.addLayer(cirrus.eq(1),{min:0,max:1},"small cirrus")
Map.addLayer(cirrus.eq(2),{min:0,max:1},"average cirrus")
Map.addLayer(cirrus.eq(3),{min:0,max:1},"high cirrus")
/*Bit 10: Internal cloud algorithm flag
0: No cloud
1: Cloud*/
var clouds = getQABits(collection.filterDate(iniDate,endDate).first().select('StateQA'),10,10,'internal_quality_flag');
Map.addLayer(clouds.eq(0),{min:0,max:1},"clouds")
/* Bit 13: Pixel is adjacent to cloud
0: No
1: Yes*/
var adjClouds = getQABits(collection.filterDate(iniDate,endDate).first().select('StateQA'),13,13,'internal_quality_flag');
Map.addLayer(adjClouds.eq(0),{min:0,max:1},"adjacent to cloud")
Hi there, I am trying to replicate the code to get Bitmask to the AOD
I am using GEE to get AOD value from MODIS (MCD19A2.006: Terra & Aqua MAIAC Land Aerosol Optical Depth). I am trying to apply a quality assurance mask “AOD_QA” to get the data with the Bits 8-11 and set it to zero (0= Best quality), and the cloud mask (Bits 0-2, 1 = clear). The mask is applied to the green band ‘Optical_Depth_055’. But I get the following error “Optical Depth 055: Layer error: reduce.mean: Error in map(ID=MCD19A2_A2019133_h10v08_006_2019135031459_01): Image.select: Pattern ‘AOD_QA’ did not match any bands.” Also, I don’t know if the code that I tried to do is good. I would appreciate any help. Here is my code.
You know what the problem could be?
LikeLike
I have the same problem,are you slove this trouble?
LikeLike