Geographic Information Systems Asked on March 4, 2021
I have to mask all the cloudy pixels, and because the QA info is stored in bits I am trying to decode them using this code. However when I chart the masked timeseries, I get an error: Error generating chart: Data column(s) for axis #0 cannot be of type string. Is this code robust for masking modis cloudy pixels?
var M = ee.ImageCollection("MODIS/006/MOD09GA"),
geometry1 = /* color: #d63000 */ee.Geometry.Point([10.644168108701706, 64.4188479841206]),
single = ee.Image("MODIS/006/MOD09GA/2012_10_11");
var getQABits = function(single, 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 single.select([0], [newName])
.bitwiseAnd(pattern)
.rightShift(start);
};
// Select the QA band
var QA = single.select('state_1km');
// Get the cloud_state bits and find cloudy areas.
var cloud = getQABits(QA, 0, 1, 'cloud_state')
.expression("b(0) == 0 || b(0) == 2 ");
// Get the land_water_flag bits.
var landWaterFlag = getQABits(QA, 3, 5, 'land_water_flag');
// Create a mask that filters out deep ocean and cloudy areas.
//var mask = landWaterFlag.neq(7).and(cloud.not());
var filter = function(image){
var mask = landWaterFlag.neq(7).and(cloud.not())
return ee.Image(image).updateMask(mask)
};
var B1= M.filterDate('2010-04-01', '2014-10-31').select('sur_refl_b01')
var gooddata = B1.map(filter)
// chart b1 all quality data
var chartb1 = ui.Chart.image.seriesByRegion({
imageCollection: B1,
regions: geometry1,
reducer: ee.Reducer.mean(),
scale: 1000,
band: 'sur_refl_b01',
})
print(chartb1,'chartb1')
// chart b1 masked quality data
var chartb1mask = ui.Chart.image.seriesByRegion({
imageCollection: gooddata,
regions: geometry1,
reducer: ee.Reducer.mean(),
scale: 1000,
band: 'sur_refl_b01',
})
print(chartb1mask,'chartb1mask')
You get an error when charting because you don't have any unmasked data. Your cloud
expression is incorrect. According to the data catalog, values that are 0
and 3
are assumed to not be clouds. So your cloud
expression should probably be something like this:
b(0) != 0 && b(0) != 3
https://code.earthengine.google.com/e97e12fc7d5f6e6a783017385d378c3a
Answered by Daniel Wiell on March 4, 2021
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP