GEE开发之Landsat8_SR计算NDVI逐年时序变化


前言:这次用到了LANDSAT/LT05/C01/T1_SR、LANDSAT/LE07/C01/T1_SR、LANDSAT/LC08/C01/T1_SR三个平台的数据,通过去云和计算NDVI的值,获取该地区20年NDVI值的变化。


1 去云算法

去云LANDSAT5和7的算法代码:

//去云457的算法 
function cloudMaskL457(image) {
  var qa = image.select('pixel_qa');
  // If the cloud bit (5) is set and the cloud confidence (7) is high
  // or the cloud shadow bit is set (3), then it's a bad pixel.
  var cloud = qa.bitwiseAnd(1 << 5).and(qa.bitwiseAnd(1 << 7)).or(qa.bitwiseAnd(1 << 3));
  // Remove edge pixels that don't occur in all bands
  var mask2 = image.mask().reduce(ee.Reducer.min());
  return image.updateMask(cloud.not()).updateMask(mask2);
};

去云LANDSAT8的算法代码:

//去云8的算法
function cloudMaskL8sr(image) {
  // Bits 3 and 5 are cloud shadow and cloud, respectively.
  var cloudShadowBitMask = (1 << 3);
  var cloudsBitMask = (1 << 5);
  // Get the pixel QA band.
  var qa = image.select('pixel_qa');
  // Both flags should be set to zero, indicating clear conditions.
  var mask = qa.bitwiseAnd(cloudShadowBitMask).eq(0)
                 .and(qa.bitwiseAnd(cloudsBitMask).eq(0));
  return image.updateMask(mask);
}

2 NDVI的计算

LANDSAT5和7的算法代码:

//计算57NDVI的值 
function opNdvi57(image){
  var ndvi = image.normalizedDifference(['B4', 'B3']).rename('NDVI')
  return image.addBands(ndvi);
}

LANDSAT8的算法代码:

//计算8NDVI的值 
function opNdvi8(image){
  var ndvi = image.normalizedDifference(['B5', 'B4']).rename('NDVI')
  return image.addBands(ndvi);
}

3 L5、L7、L8综合计算某地区NDVI逐年时序变化

代码如下(以鹿邑县为例):

var geometry = ee.FeatureCollection('users/www1573979951/luyixian')
Map.centerObject(geometry,6)

var L5_COL = getNdvi(2000, 2011, "LANDSAT/LT05/C01/T1_SR", cloudMaskL457, opNdvi57);

var L7_COL = getNdvi(2012, 2012, "LANDSAT/LE07/C01/T1_SR", cloudMaskL457, opNdvi57);

var L8_COL = getNdvi(2013, 2020, "LANDSAT/LC08/C01/T1_SR", cloudMaskL8sr, opNdvi8);

var data = ee.ImageCollection(L5_COL.merge(L7_COL).merge(L8_COL))

print(data);

var yearlychart = ui.Chart.image.series({
    imageCollection: data.select('NDVI_median'),
    region: geometry,
    reducer: ee.Reducer.mean(),
    scale: 500,
    xProperty:'Year'
    }).setOptions({
      interpolateNulls: true,
      lineWidth: 2,
      title: 'NDVI Daily Time Seires',
      vAxis: {title: 'NDVI', viewWindow: {max: 0.7,min: 0.2,}},
      hAxis: {title: 'Date'},
      trendlines: { 0: {title: 'NDVI_trend',type:'linear', showR2: true,  color:'red', visibleInLegend: true}}
    });
print(yearlychart);


function getNdvi(startYear, finishYear, name, cloudMask, op){
  var years = ee.List.sequence(startYear, finishYear);
  return ee.ImageCollection(years.map(function(year){
    var start = ee.Date.fromYMD(year, 1, 1);
    var end = start.advance(12, 'month');
    var ndvi = ee.ImageCollection(name).filterDate(start, end).map(cloudMask).map(op);
    return ndvi.reduce(ee.Reducer.median()).clip(geometry).set('Year',year);
}))
}


//去云457的算法 
function cloudMaskL457(image) {
  var qa = image.select('pixel_qa');
  // If the cloud bit (5) is set and the cloud confidence (7) is high
  // or the cloud shadow bit is set (3), then it's a bad pixel.
  var cloud = qa.bitwiseAnd(1 << 5).and(qa.bitwiseAnd(1 << 7)).or(qa.bitwiseAnd(1 << 3));
  // Remove edge pixels that don't occur in all bands
  var mask2 = image.mask().reduce(ee.Reducer.min());
  return image.updateMask(cloud.not()).updateMask(mask2);
};

//去云8的算法
function cloudMaskL8sr(image) {
  // Bits 3 and 5 are cloud shadow and cloud, respectively.
  var cloudShadowBitMask = (1 << 3);
  var cloudsBitMask = (1 << 5);
  // Get the pixel QA band.
  var qa = image.select('pixel_qa');
  // Both flags should be set to zero, indicating clear conditions.
  var mask = qa.bitwiseAnd(cloudShadowBitMask).eq(0)
                 .and(qa.bitwiseAnd(cloudsBitMask).eq(0));
  return image.updateMask(mask);
}


//计算57NDVI的值 
function opNdvi57(image){
  var ndvi = image.normalizedDifference(['B4', 'B3']).rename('NDVI')
  return image.addBands(ndvi);
}

//计算8NDVI的值 
function opNdvi8(image){
  var ndvi = image.normalizedDifference(['B5', 'B4']).rename('NDVI')
  return image.addBands(ndvi);
}

21年的数据集截图:
在这里插入图片描述
表格变化趋势截图:
在这里插入图片描述
CSV数据截图:
在这里插入图片描述

4 通过L8计算某地区不同月份的NDVI变化情况

代码如下(以鹿邑县为例):

var geometry = ee.FeatureCollection('users/www1573979951/luyixian')
Map.centerObject(geometry,11.5)

var landsat8 = ee.ImageCollection("LANDSAT/LC08/C01/T1_SR").map(opNdvi8);

var image_ls8_8 = ee.Image(landsat8.filterBounds(geometry).filterDate('2020-07-01', '2020-08-31').sort('CLOUD_COVER').first().clip(geometry));
var image_ls8_10 = ee.Image(landsat8.filterBounds(geometry).filterDate('2020-10-01', '2020-11-30').sort('CLOUD_COVER').first().clip(geometry));

// 显示影像的真实颜色
var trueColor_ls8 = {bands: ['B4', 'B3', 'B2'], min: 0, max: 3000};
Map.addLayer(image_ls8_8, trueColor_ls8, 'Landsat8 yr2020_07_08 true color');
Map.addLayer(image_ls8_10, trueColor_ls8, 'Landsat8 yr2020_10_11 true color');

//计算8NDVI的值 
function opNdvi8(image){
  var ndvi = image.normalizedDifference(['B5', 'B4']).rename('NDVI')
  return image.addBands(ndvi);
}

2020鹿邑县年7月8月遥感影像截图:
在这里插入图片描述
2020鹿邑县年10月11月遥感影像截图:
在这里插入图片描述
结果分析:虽然两张图片不是很全,但是也能得到7月8月的NDVI值比较高,植被比较丰富。10月11月的NDVI值比较低,植被比较稀少。原因:7月8月玉米生长阶段,10月11月玉米已经成熟且收获,田地里绿色植被很少。

  • 6
    点赞
  • 96
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
### 回答1: 很抱歉,我是AI语言模型,无法进行计算操作。但是,计算Landsat 5的NDVI需要使用Landsat 5卫星的遥感数据,通过遥感图像处理软件进行计算NDVI是一种植被指数,可以用来评估植被覆盖度和生长状况。 ### 回答2: 为了计算Landsat5的NDVI (归一化植被指数),需要使用遥感影像和处理软件。下面是计算步骤: 1. 获取Landsat5遥感影像:可以从USGS (美国地质调查局)的遥感数据下载中心下载,选择适当的日期和区域,确保数据集包括可见光和近红外波段。可以在数据下载页面上选择下载格式,如GeoTIFF。 2. 打开遥感数据处理软件,如ENVI、ArcGIS等。将下载的Landsat5数据导入软件。在ENVI中,选择File -> Open -> Landsat -> Georeferenced Data,选择所下载的遥感数据文件。 3. 确定植被和非植被区域。NDVI是通过比较植被与非植被区域中的反射率来计算的。可以使用软件中的分类工具将植被和非植被区域分割开来。在ENVI中,可以使用ISODAT聚类工具对像元进行分类。 4. 计算NDVI。在ENVI中,选择Spectral Indices -> Vegetation Indices -> NDVI,选择正确的波段,将其计算为一个新的图像。 5. 分析NDVI图像。NDVI值范围从-1到1,用来描述植被的密度和健康程度。高值表示植被密度高,低值表示植被稀疏。可以将NDVI图像导入到GIS软件中进行分析和可视化。 以上是用ENVI软件计算Landsat5的NDVI的大概步骤。需要注意的是,NDVI计算的精度受到许多因素的影响,如大气校正、遮蔽、高山阴影等,请确保数据质量和处理准确性。 ### 回答3: GEE是指Google Earth Engine,它是一个云计算平台,可以轻松访问获得全球环境数据集。在GEE计算Landsat5的NDVI需要以下步骤: 第一步:准备数据集。从遥感卫星数据中获得的Landsat5图像,包括反射波段和地形校正波段,需要通过EE Image对象加载到GEE中。 第二步:计算NDVI。可以使用函数expression'NDVI = (NIR - RED) / (NIR + RED)'计算NDVI,其中NIR和RED表示不加地形校正的NIR波段和RED波段。 第三步:应用云遮罩。由于遥感数据可能受到云的干扰,因此需要应用云遮罩来去除可能存在的云覆盖。 第四步:保存数据。通过Export.image.toDrive()函数将NDVI图像导出到Google云端硬盘或下载到本地计算机。 注意:在计算Landsat5的NDVI时,需要考虑Landsat卫星已于2013年退役,因此使用时建议使用较新的Landsat8或Sentinel2数据集。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

等待着冬天的风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值