总体介绍
这段代码旨在处理MODIS地表反射率数据,计算归一化植被指数(NDVI),并进行以下步骤:
- 定义日期范围。
- 定义云和水体掩膜函数,去除被云或深海覆盖的像元。
- 加载MODIS数据,根据日期和地理范围进行筛选。
- 计算NDVI。
- 对NDVI进行平均处理。
- 将结果裁剪到感兴趣区域(ROI)。
- 可视化NDVI结果。
- 导出结果到云盘(注释)。
数据集
- MODIS/006/MOD09GA: MODIS地表反射率数据集,提供500m分辨率的地表反射率数据。
结果
- 可视化:生成了一个NDVI图层,并将其添加到地图上进行显示。
- 影像处理:去除了被云或深海覆盖的像元,计算了NDVI,并对结果进行了平均处理。
- 导出数据:可以将处理后的NDVI数据导出至云盘(当前代码中已注释)。
完整代码:
// 定义日期范围
var start_date = '2020-09-01';
var end_date = '2020-10-01';
// 定义云和水体掩膜函数
function maskCloudAndWater(image) {
var QA = image.select('QC_500m');
// 创建一个空的mask,初始值为1(即所有像素都不被掩膜覆盖)
var mask = ee.Image.constant(1);
// 遍历每个波段的数据质量标识
for (var i = 0; i < 2; i++) { // 因为我选取了两个波段进行ndvi的计算
// 计算当前波段的数据质量标识的起始位(是从2开始)
var startBit = 2 + i * 4;
// 提取当前波段的数据质量标识
var bandQuality = QA.rightShift(startBit).bitwiseAnd(15);
// 如果数据质量标识为15,说明该像素可能被云或深海覆盖,需要被掩膜覆盖
mask = mask.min(bandQuality.neq(15)); // min取两者间小的那个值,逐像元
}
// 应用掩膜
return image.updateMask(mask);
}
// 定义地理空间范围
var geom = table
// 加载MODIS数据根据日期和地理范围进行筛选
var modis_ndvi = ee.ImageCollection('MODIS/006/MOD09GA')
.filterDate(start_date, end_date)
.filterBounds(geom)
.select(['sur_refl_b02', 'sur_refl_b01', 'QC_500m'])
.map(function (img) {
img = maskCloudAndWater(img); // 水体和云掩膜
return img.normalizedDifference(['sur_refl_b02', 'sur_refl_b01']).rename('ndvi') // 计算ndvi
})
.mean().clip(geom)
// 添加到地图上以便可视化
print(modis_ndvi) // 命令面板输出简要信息
Map.addLayer(modis_ndvi.select('ndvi'), {min: 0, max: 1, palette: ['blue', 'white', 'green']}, 'MeanNDVI');
Map.centerObject(geom, 9)
// 导出至云盘
/*
Export.image.toDrive({
image: modis_ndvi.select('ndvi'),
description: 'Mean_NDVI',
region: geom,
scale: 500,
maxPixels: 1e13,
fileFormat: 'GeoTIFF'}) */
运行结果:
工作台: