总体介绍

这段代码旨在处理MODIS地表反射率数据,计算归一化植被指数(NDVI),并进行以下步骤:

  1. 定义日期范围。
  2. 定义云和水体掩膜函数,去除被云或深海覆盖的像元。
  3. 加载MODIS数据,根据日期和地理范围进行筛选。
  4. 计算NDVI。
  5. 对NDVI进行平均处理。
  6. 将结果裁剪到感兴趣区域(ROI)。
  7. 可视化NDVI结果。
  8. 导出结果到云盘(注释)。

数据集

  • 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'}) */

运行结果:

工作台:

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐