代码实现处理MODIS地表反射率数据,并进行以下步骤:
- 掩膜去除观测次数为0的像元。
- 去除含云像元。
- 裁剪影像到感兴趣区域(ROI)。
- 计算影像数据的中值,并生成真彩色合成图。
- 将处理后的影像和原始影像添加到地图上进行可视化。
- 输出筛选出的影像数量和影像的时间信息。
数据集
- MODIS/061/MOD09GA: 这是MODIS地表反射率数据集,提供1km分辨率的地表反射率数据。
功能实现
该代码实现了从MODIS数据集中筛选并处理特定时间段内的影像,通过去除观测次数为0和含云的像元,并裁剪到感兴趣区域,生成了可视化的真彩色合成图层,方便进行进一步的分析和研究。
结果
- 可视化:生成了两个图层,一个是去云后的真彩色合成图层,另一个是原始影像的真彩色合成图层,并将它们添加到地图上进行显示。
- 影像数量:输出了筛选出的影像数量。
- 影像时间:输出了各个影像的时间信息。
完整代码:
// 创建一个函数用来掩膜,保留观测次数大于0的像元。
// num_observations_1km表示观测次数
var ROI = table
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));
};
// 裁剪
var clip = function(image) {
return image.clip(ROI); // 假设ROI是你的感兴趣区域
};
// 选择MODIS地表反射率数据,并去除观测数为0的数据
var collection = ee.ImageCollection('MODIS/061/MOD09GA')
.filterDate('2020-09-25', '2020-09-26')
.map(maskEmptyPixels);
// 去云处理
var collectionCloudMasked = collection.map(maskClouds);
// 应用裁剪函数到图像集合
var nocloud = collectionCloudMasked.map(clip);
var allcloud = collection.map(clip);
// 计算影像数据集中值,并进行真彩色合成
Map.addLayer(
nocloud.median(),
{bands: ['sur_refl_b01', 'sur_refl_b04', 'sur_refl_b03'],
gain: 0.07,
gamma: 1.4
},
'mask clouds'
);
Map.addLayer(
allcloud.median(),
{bands: ['sur_refl_b01', 'sur_refl_b04', 'sur_refl_b03'],
gain: 0.07,
gamma: 1.4
},
'original image'
);
// 将地图居中显示到ROI
Map.centerObject(ROI,9);
// 输出筛选结果
var modisCount = allcloud.size();
if (modisCount.getInfo() > 0) {
print("已筛选出 " + modisCount.getInfo() + " 张影像");
} else {
print("没有满足筛选条件的影像");
}
// 输出各个遥感影像的时间
allcloud.aggregate_array('system:time_start').evaluate(function(dates) {
var formattedDates = dates.map(function(date) {
return new Date(date).toISOString(); // 输出年-月-日-时-分-秒
});
print('MODIS 影像时间:', formattedDates);
});
运行结果:
工作台:
去云前:
去云后: