前几期我们挨个介绍了Modis、Landsat、Sentinel-2产品和数据在逐日和逐月时间序列方面的研究。还介绍了Whittaker Smoother在时间序列研究的应用。本期我们将介绍年尺度的时间序列变化,并通过NDVI的影像分析城市扩张。

  如果对大家有一点点的帮助,记得文末点个赞哦


  话不多说,我们继续搞代码(前几期也没有为大家讲解代码,后续的研究我们会慢慢增加一些注释):

//还是老样子哈,以广东省2020年为目标
var geometry = ee.FeatureCollection('users/ZhengkunWang/guangdongsheng')
Map.centerObject(geometry,6)
//去云的算法
var cloudMaskL457 = function(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 bandsvar mask2 = image.mask().reduce(ee.Reducer.min());return image.updateMask(cloud.not()).updateMask(mask2);
};
var years = ee.List.sequence(2000, 2011);
var L5_COL = ee.ImageCollection(years.map(function(y) {var start = ee.Date.fromYMD(y, 1, 1);var end = start.advance(12, 'month');var ndvi = ee.ImageCollection('LANDSAT/LT05/C01/T1_SR').filterDate(start, end).map(cloudMaskL457).map(function(image){var ndvi = image.normalizedDifference(['B4', 'B3']).rename('NDVI')return image.addBands(ndvi)})return ndvi.reduce(ee.Reducer.median()).clip(roi).set('Year',y)
}));
print (L5_COL);var years = ee.List.sequence(2012, 2012);
var L7_COL = ee.ImageCollection(years.map(function(y) {var start = ee.Date.fromYMD(y, 1, 1);var end = start.advance(12, 'month');var ndvi = ee.ImageCollection('LANDSAT/LE07/C01/T1_SR').filterDate(start, end).map(cloudMaskL457).map(function(image){var ndvi = image.normalizedDifference(['B4', 'B3']).rename('NDVI')return image.addBands(ndvi)})return ndvi.reduce(ee.Reducer.median()).clip(roi).set('Year',y)
}));
print (L7_COL);function maskL8sr(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);
}var years = ee.List.sequence(2013, 2020);
var L8_COL = ee.ImageCollection(years.map(function(y) {var start = ee.Date.fromYMD(y, 1, 1);var end = start.advance(12, 'month');var ndvi = ee.ImageCollection('LANDSAT/LC08/C01/T1_SR').filterDate(start, end).map(maskL8sr).map(function(image){var ndvi = image.normalizedDifference(['B5', 'B4']).rename('NDVI')return image.addBands(ndvi)})return ndvi.reduce(ee.Reducer.median()).clip(roi).set('Year',y)
}));
print (L8_COL);var data = ee.ImageCollection(L5_COL.merge(L7_COL).merge(L8_COL))
print(data)
// Create a time series chart.
var yearlychart = ui.Chart.image.series({imageCollection: data.select('NDVI_median'),region: roi,reducer: ee.Reducer.mean(),scale: 500,xProperty:'Year'}).setOptions({interpolateNulls: true,lineWidth: 2,title: 'NDVI Daily Time Seires',vAxis: {title: 'NDVI', viewWindow: {max: 0.8,min: 0.4,}},hAxis: {title: 'Date'},trendlines: { 0: {title: 'NDVI_trend',type:'linear', showR2: true,  color:'red', visibleInLegend: true}}});
print(yearlychart);

  我们使用2000-2020年Landsat5、7、8的SR影像进行NDVI的反演,当然是在去云之后进行计算,结果使用研究区域内的NDVI_median进行展示。结果如图:

  在2011-2013之间有一个明显的上升,对于这么大的区域来说,变化算是很大了。然后呢,我们继续通过影像判断一下发生的变化。因为广东实在太大了,而且2000和2020年的影像云量较多,于是我换了个大家都听说过的好地方!

这个区域的NDVI是这样的:

  看图的话,确实感觉不出它有什么变化,波澜不惊的那种。于是小编只能通过影像进行分析一波。

// 我就看门见山了,直接选取L5和L8在2000和2020的影像
var landsat5 = ee.ImageCollection("LANDSAT/LT05/C01/T1_SR").map(function(image){var ndvi = image.normalizedDifference(['B4', 'B3']).rename('NDVI')return image.addBands(ndvi);});
var landsat8 = ee.ImageCollection("LANDSAT/LC08/C01/T1_SR").map(function(image){var ndvi = image.normalizedDifference(['B5', 'B4']).rename('NDVI')return image.addBands(ndvi);});
// filterBounds() 代表只过滤研究区域内的影像,其他区域就不加载了
// filterDate() 那就是过滤研究时间一目了然
// sort()也就是按照云量排序,选择云量最少的那一幅
// clip()则是将筛选的影像按照研究区域的边界进行裁剪
var image_ls5 = ee.Image(landsat5.filterBounds(geometry).filterDate('2000-01-01', '2000-12-31').sort('CLOUD_COVER') .first().clip(geometry));var image_ls8 = ee.Image(landsat8.filterBounds(geometry).filterDate('2020-01-01', '2020-12-31').sort('CLOUD_COVER') .first().clip(geometry));
//接下来是调色
// 显示影像的真实颜色
var trueColor_ls5 = {bands: ['B3', 'B2', 'B1'], min: 0, max: 3000};
Map.addLayer(image_ls5, trueColor_ls5, 'Landsat5 yr2000 true color');var trueColor_ls8 = {bands: ['B4', 'B3', 'B2'], min: 0, max: 3000};
Map.addLayer(image_ls8, trueColor_ls8, 'Landsat8 yr2020 true color');// 显示NDVI的假彩色
var vegPalette = ['darkblue', 'blue', 'red', 'orange', 'yellow', 'green', 'darkgreen'];
Map.addLayer(image_ls5.select('NDVI'), {min: -0.4, max: 0.9, palette: vegPalette}, 'Landsat5 yr2000 NDVI');
Map.addLayer(image_ls8.select('NDVI'), {min: -0.4, max: 0.9, palette: vegPalette}, 'Landsat8 yr2020 NDVI');
Map.centerObject(geometry, 11.5)

2000年的原始影像:

 2020年的原始影像:

  应该是传感器的原因吧,有种焕然一新的感觉,不过这幅图已经能看出城市扩张的影子了。

2000年的NDVI:

2020年的NDVI:

  对比两幅图,我们一起来找不同~今天的日记就到这里。代码已经更新,获取年平均NDVI时间序列的代码请在公众号回复:123001

  获取城市扩张判断的代码请在公众号回复123002

  如果真的可以帮到你,记得给小编点个赞哦~

更多精彩内容请关注:

GEEer成长日记八:Landsat8_SR计算NDVI逐年时序变化,并通过影像判断城市扩张相关推荐

  1. GEEer成长日记十三:Landsat_SR计算地表温度时间序列

    更多精彩内容请关注微信公众号:GEEer成长日记 上期我们介绍了Modis_LST产品MODIS/006/MOD11A1的时间序列,因为这款产品是官方已经经过各种矫正和处理的产品,精度较高,且范围广, ...

  2. GEEer成长日记二十一:Sentinel-2影像计算多种指数

    欢迎关注公众号:GEEer成长日记 本次计算Sentinel-2影像计算几种常用指数的方法: var s2 = ee.ImageCollection("COPERNICUS/S2_SR&qu ...

  3. GEEer成长日记二十:使用Sentinel 2影像计算水体指数NDWI、MNDWI并下载到本地

    一.NDWI和MNDWI计算公式介绍 NDWI(归一化差异水体指数) NDWI = (GREEN-NIR)/(GREEN+NIR) 式中: GREEN为绿光波段: NIR为近红外波段.NDWI主要利用 ...

  4. GEEer成长日记十九:使用Landsat 8影像计算水体指数NDWI、MNDWI并下载到本地

    目录 一.NDWI和MNDWI计算公式介绍 1.NDWI(归一化差异水体指数) 2.MNDWI(改进的归一化差异水体指数) 二.使用Landsat8影像计算NDWI和MNDWI 1.获取Landsat ...

  5. GEEer成长日记十二:Modis_LST地表温度产品时间序列分析

    更多精彩内容请关注微信公众号:GEEer成长日记 今天我们介绍Modis_LST产品MODIS/006/MOD11A1,这款产品目前来说使用率很高,而且有每日数据,经过很多校正得到的. 之后我们将介绍 ...

  6. GEEer成长日记九:Worldpop100m分辨率人口数据可视化及批量下载

    最近看到好多小伙伴在找Worldpop人口数据.小编之前去看的时候,全国的影像一张就4G左右,太大了.不过小编已经为大家搜集好了全国的数据,关注微信公众号:GEEer成长日记.即可获取. 今天我们主要 ...

  7. GEEer成长日记一:GEE账号注册详细步骤

    写在最前面:非常开心能以这样的方式与各位同仁一起交流学习.作为GIS和RS的学生或从业者,GEE(Google Earth Engine)的出现无疑为我们的工作学习带来了很大的便利.短时间聚集了庞大的 ...

  8. GEEer成长日记五:Sentinel-2计算NDVI并逐月时间序列分析

    前几期我们介绍了MODIS和LANDSAT8遥感影像的MDVI时间序列,其他数据也与此类似,大家根据实际情况修改即可.本期我们介绍Sentinel-2   Level-2A数据在时间序列方面的研究. ...

  9. GEEer成长日记十七:在Google Earth Engine(GEE)中批量下载MODIS NDVI数据

    所使用数据集为:MOD13Q1.006 Terra Vegetation Indices 16-Day Global 250m 需注意的是,要得到真实的NDVI,需要乘以0.0001 完整代码如下: ...

最新文章

  1. 如何查看某个端口被哪个进程占用
  2. TeamViewer免费版和付费版有什么不同
  3. 转:Gulp使用指南
  4. html基礎之渐变属性(斑马线)
  5. 什么是Ajax? (转载于疯狂客的BLOG)
  6. 基于ansys命令流的水池静力学分析
  7. 二维拉普拉斯方程的数值解法
  8. 性能测试流程(完整版)
  9. PS 模块BAPI新建修改项目、WBS、网络、作业 (二)
  10. 大数据系统体系架构(含图示)
  11. lzg_ad:如何自定义Shell组件
  12. 【小程序】零基础微信小程序开发+实战项目
  13. 人工智能聊天机器人(有详细安装教程)/ 自动学习型
  14. JavaEE#JCA
  15. java求sobel算子代码_sobel算子原理及opencv源码实现
  16. 图像/短视频文件的MD5码的定义、作用以及获取方式
  17. 7大原因告诉你,为什么IT行业发展前景好
  18. 白大脑比超级计算机还,巨金怪 - 神奇宝贝百科,关于宝可梦的百科全书
  19. MySQL查询近7天、1年、5年内数据,无数据部分补0
  20. 一个小镇出身的程序员为何拒绝加入大厂?

热门文章

  1. python-弱引用
  2. 高德地图 web 端 JS API 遇到的坑及性能优化
  3. 为什么 Google 在前面加上 while(1);到他们的 JSON 响应?
  4. 模拟器上如何使用蓝牙
  5. Swift删除SceneDelegate
  6. 激光雷达F4与D1坐标校正
  7. 什么是木马和反弹木马?
  8. 公众号文章链接怎么做二维码?在线生成链接二维码的方法
  9. iOS后台音频播放及锁屏界面显示音频信息
  10. 第n小的质数(C语言)