本文分享利用MODIS地表反射率数据MOD09GA的state_1km质量评估波段去云处理。
MOD09GA提供1-7波段,包括500米反射率值和1km观测和地理位置统计数据。此产品提供的空间分辨率500m1-7波段的反射率,质量等级,观察范围,观察数和250m扫描信息。提供的1km科学数据集包括观测次数,质量状态,传感器角度,太阳角,地理位置标记和轨道指针。
state_1km波段:表示反射率数据状态质量,以二进制形式。
其不同位表示含义如下
Bit 0-1: cloud state bits
00 (0): clear
01 (1): cloudy
10 (2): mixed
11 (3): not set, assumed clear
Bit 2: cloud shadow data (1 = yes)
Bit 3-5: land/water flag
000 (0): shallow ocean
001 (1): land
010 (2): ocean coastlines and lake shorelines
011 (3): shallow inland water
100 (4): ephemeral water
101 (5): deep inland water
110 (6): continental/moderate ocean
111 (7): deep ocean
Bit 6-7: aerosol quantity
00 (0): climatology
01 (1): low
10 (2): average
11 (3): high
Bit 8-9: cirrus detected
00 (0): none
01 (1): small
10 (2): average
11 (3): high
Bit 10: internal cloud algorithm flag data (1 = Cloud)
Bit 11: internal fire algorithm flag data (1 = Fire)
Bit 12: MOD35 snow/ice flag data (1 = yes)
Bit 13: Pixel is adjacent to cloud data (1 = yes)
Bit 14: BRDF correction performed data (1 = yes)
Bit 15: internal snow mask data (1 = Snow)
//创建一个函数用来掩膜,保留观测次数大于0的像元。
//num_observations_1km表示观测次数
var maskEmptyPixels = function(image) {
var withObs = image.select('num_observations_1km').gt(0)
return image.updateMask(withObs)
}
// 创建一个函数用来去除有云的像元
var maskClouds = function(image) {
// 选择质量评估波段
var QA = image.select('state_1km')
// 1<<10表示二进制第10位,第10位表示有云
var bitMask = 1 << 10;
// 使得检测出含云像元置为0,进行掩膜去除含云
return image.updateMask(QA.bitwiseAnd(bitMask).eq(0))
}
//选择MODIS地表反射率数据,并去除观测数为0的数据
var collection = ee.ImageCollection('MODIS/006/MOD09GA')
.filterDate('2010-04-01', '2010-05-01')
.map(maskEmptyPixels)
// 获取在时间内像元观测值的数,以单个像元为单位
var totalObsCount = collection
.select('num_observations_1km')
.count()
//去云处理.
var collectionCloudMasked = collection.map(maskClouds)
//获取该时间间隔内非多云像素的观测值总数
var clearObsCount = collectionCloudMasked
.select('num_observations_1km')
.count()
.unmask(0)
//计算影像数据集中值,并进行真彩色合成
Map.addLayer(
collectionCloudMasked.median(),
{bands: ['sur_refl_b01', 'sur_refl_b04', 'sur_refl_b03'],
gain: 0.07,
gamma: 1.4
},
'median of masked collection'
)
//显示像元观测次数
Map.addLayer(
totalObsCount,
{min: 84, max: 92},
'count of total observations',
false
)
//无云像元数据
Map.addLayer(
clearObsCount,
{min: 0, max: 90},
'count of clear observations',
false
)
//显示无云像元占中像元比例
Map.addLayer(
clearObsCount.toFloat().divide(totalObsCount),
{min: 0, max: 1},
'ratio of clear to total observations'
)
代码运行结果