GEE基础-实现NDVI年最大值合成

GEE基础-实现NDVI年最大值合成

  • 思路
  • 实践
  • 遇到的问题

思路

目的是计算研究区的年NDVI,基本实现逻辑如下:

GEE基础-实现NDVI年最大值合成_第1张图片

实践

拼凑代码如下:

// 创建一个函数用来掩模云层以及云阴影
var cloudMask = function(image) {
  var qa = image.select('pixel_qa');
  //云层表示为第五位,云层置信度为6-7位,云阴影为第三位
  //选择出有云并且云层置信度为中等,以及有云阴影覆盖的像元。
  var cloud = qa.bitwiseAnd(1 << 5)
          .and(qa.bitwiseAnd(1 << 7))
          .or(qa.bitwiseAnd(1 << 3))
  // 移除边界像元
  var mask2 = image.mask().reduce(ee.Reducer.min());
  //将检测有关云像元置为0,掩模保留位置不为0的数据。
  return image.updateMask(cloud.not()).updateMask(mask2);
};
//创建一个函数用来计算NDVI
function NDVI(img) {
 var ndvi = img.normalizedDifference(["B5","B4"]);
 return ndvi;
}
 // 选择Landsat8地表反射率数据进行去云处理,并计算NDVI 
var collection = ee.ImageCollection('LANDSAT/LC08/C01/T1_SR')
    .filterDate('2020-05-01', '2020-9-30')
    .filterBounds(myl)
    .map(cloudMask)
    .map(NDVI)
//取影像数据集最大值 
var NDVI_2020 = collection.max();
var visParam = {
 min: -0.2,
 max: 0.8,
 palette: 'FFFFFF, CE7E45, DF923D, F1B555, FCD163, 99B718, 74A901, 66A000, 529400,' +
   '3E8601, 207401, 056201, 004C00, 023B01, 012E01, 011D01, 011301'
};
var result = NDVI_2020.clip(myl)
Map.addLayer(NDVI_2020.clip(myl), visParam, 'ndvi');
print(result)
//导出到谷歌云盘
Export.image.toDrive({
  image: result,
  description: 'NDVI2020_1',
  scale: 30,
  region: myl,
  maxPixels:10e10,
 });

遇到的问题

通过搜罗CSDN上各路去云方法,发现最后的nodata的结果是不一样的!
上面的去云函数出来的结果是这样的:
而使用下面这个去云函数

//创建一个函数进行去云掩膜处理
function maskL8sr(image) {
  //<<表示二进制左移几位
  // 二进制第三位表示有云阴影,第五位表示有云。
  var cloudShadowBitMask = 1 << 3;
  var cloudsBitMask = 1 << 5;
  // 选择质量评估波段
  var qa = image.select('pixel_qa');
  // 按位与运算,将检测出云以及云阴影像元值为0
  var mask = qa.bitwiseAnd(cloudShadowBitMask).eq(0)
      .and(qa.bitwiseAnd(cloudsBitMask).eq(0));
  // 掩膜云以及云阴影,并选择波段1-9将单位变为0-1之间,并复制影像时间属性。
  return image.updateMask(mask).divide(10000)
      .select("B[0-9]*")
      .copyProperties(image, ["system:time_start"]);
}

出来的结果是这样的
GEE基础-实现NDVI年最大值合成_第2张图片

你可能感兴趣的:(GEE基础-实现NDVI年最大值合成)