目录
QA波段
MODIS去云
云量统计
MOD09用户指南官方文档:
https://lpdaac.usgs.gov/documents/925/MOD09_User_Guide_V61.pdfhttps://lpdaac.usgs.gov/documents/925/MOD09_User_Guide_V61.pdf
Note that bit 0 is the Least Significant Bit (LSB)
QA(data product quality assessment)是数据质量评估波段的简称,在不同的产品中有不同的名称,
在MOD09GA称为state_1km,在MOD09A1叫做StateQA等等。
QA波段中存储的值显示为十进制,但是该十进制数值得转换成二进制数值使用,二进制数值的不同的位表示不同的含义。
第十位为1表示为有云,为0表示无云
1033 —— 0000 0100 0000 1001 —— 有云
72 —— 0000 0000 0100 1000 —— 无云
76 —— 0000 0000 0100 1100 —— 无云,但又云阴影
位数 —— 98 7654 3210
1 —— 0000 0000 0000 0001
1>>10 —— 0000 0100 0000 0000
bitwiseAnd : 1&1=1,1&0=0,0&1=0,0&0=0
云不仅仅影响被云遮蔽的像元,也会一定程度上影响周围的像元(例如:云的阴影会影响附近的像元;如果云是亮色的,有云阴影的像元比无云无阴影的像元暗)。
要根据实验数据要求,对数据进行处理;如果对数据要求严格,仅去云即可;如果想要最好的效果,把cloud、choud shadow、pixel adjacent to cloud都去掉。同时,一般去云的时候,还会把雪去除。
cloud(10)→ cloud shadow(2)→ pixel is adjacent to cloud(13)
var table = ee.FeatureCollection("users/gis418670826/province_ALL");
var dataset = ee.ImageCollection('MODIS/061/MOD09GA')
.filter(ee.Filter.date('2018-04-01', '2018-06-01'));
var state = dataset.select('state_1km');
Map.centerObject(table, 4)
Map.addLayer(state.first().clip(table),{},'state_1km');
var trueColor143 =
dataset.select(['sur_refl_b01', 'sur_refl_b04', 'sur_refl_b03']);
var trueColor143Vis = {
min: -100.0,
max: 8000.0,
};
Map.addLayer(trueColor143.first().clip(table), trueColor143Vis, 'True Color (143)');
function maskclouds(image) {
var qa = image.select('state_1km');
// 去云 cloud
var cloudBitMask = 1 << 10;
var mask = qa.bitwiseAnd(cloudBitMask).eq(0)
// 去云阴影 cloud shadow
var shadowBitMask = 1 << 2;
var shadowMask = qa.bitwiseAnd(shadowBitMask).eq(0);
mask = mask.and(shadowMask);
// 去云附近的像素 Pixel is adacent to cloud
var adjacentBitMask = 1 << 13;
var adjacentMask = qa.bitwiseAnd(adjacentBitMask).eq(0);
mask = mask.and(adjacentMask);
// 去雪 show
var snowBitMask = 1 << 15;
var snowMask = qa.bitwiseAnd(snowBitMask).eq(0);
mask = mask.and(snowMask);
return image.updateMask(mask);
}
var NoCloud = dataset.map(maskclouds)
.select(['sur_refl_b01', 'sur_refl_b04', 'sur_refl_b03']);
Map.centerObject(table, 4)
Map.addLayer(NoCloud.first().clip(table),trueColor143Vis,'NoCloud');
var table = ee.FeatureCollection("users/gis418670826/shandong_province");
var dataset = ee.ImageCollection('MODIS/061/MOD09GA')
.filter(ee.Filter.date('2018-04-01', '2018-06-01'));
var totalPixel = dataset.first().reduceRegion({
crs: 'EPSG:4326',
reducer: ee.Reducer.count(),
geometry : table,
scale : 1000,
}).get('sur_refl_b01').getInfo()
print('totalPixel', totalPixel)
function maskclouds(image) {
var qa = image.select('state_1km');
var cloudBitMask = 1 << 10;
var mask = qa.bitwiseAnd(cloudBitMask).eq(0)
return image.updateMask(mask);
}
function computeCloudPixel(image) {
var data = image.reduceRegion({
crs: 'EPSG:4326',
reducer: ee.Reducer.count(),
geometry : table,
scale : 1000,
})
var NoCloudPixel_Sum = data.get('sur_refl_b01').getInfo()
var time = image.id().getInfo();
print(time, '无云像素数量:',NoCloudPixel_Sum, '无云像素占比:', NoCloudPixel_Sum/totalPixel)
}
var NoCloud = dataset.map(maskclouds)
.select(['sur_refl_b01', 'sur_refl_b04', 'sur_refl_b03'])
var trueColor143Vis = {
min: -100.0,
max: 8000.0,
};
Map.centerObject(table, 4)
//Map.addLayer(NoCloud.first().clip(table),trueColor143Vis,'NoCloud');
var num = 3
// 把ImageCollection转化为List
var list = NoCloud.toList(num);
print(list);
for (var i=0; i