GEE开发之Sentinel-2计算NDVI和数据分析

  • 1 基础知识
  • 2 影像、数据、变化趋势实现
  • 3 一年内所有影像数据查看和下载
    • 3.1 NDVI值影像获取
    • 3.2 原始影像获取
  • 4 月平均数据的变化趋势
  • 5 月平均影像数据的查看和下载
    • 5.1 NDVI值影像获取
    • 5.2 原始影像获取

前言:主要介绍哨兵2号卫星下计算NDVI的值、遥感影像和数据的获取。


1 基础知识

Sentinel-2:中文名哨兵2号卫星。

  • Sentinel-2是一种宽测绘带、高分辨率、多光谱成像任务,支持哥白尼土地监测研究,包括植被、土壤和水覆盖的监测,以及内陆水道和沿海地区的观察。
  • Sentinel-2 L2数据从scihub下载。它们是通过运行sen2cor计算的。警告:ESA没有为所有一级资产生成二级数据,早期的二级覆盖范围不是全局的。
  • 这些资源包含12个UINT16光谱带,代表按10000缩放的SR(与L1数据不同,没有B10)。还有几个L2特定的频段(有关详细信息,请参阅频段列表)。有关详细信息,请参阅Sentinel-2用户手册。此外,存在三个QA频带,其中一个(QA60)是具有云掩码信息的位掩码频带。有关更多详细信息,请参阅如何计算云遮罩的完整解释。
  • Sentinel-2 L2资产的EE资产ID具有以下格式:哥白尼/S2\U SR/20151128 002653\U 20151128 102149\U T56MNN。这里,第一个数字部分表示感应日期和时间,第二个数字部分代表产品生成日期和时间。最后一个6个字符的字符串是一个唯一的颗粒标识符,指示其UTM网格参考(请参阅MGRS)。
  • COPERNICUS/S2:分辨率为10m

NDVI的计算公式:NDVI = (近红外波段 - 红波段) / (近红外波段 + 红波段)
针对每种卫星的波段,选用的波段都有所不同,公式如下:

  • Landsat8: NDVI = (band5 - band4) / (band5 + band4)
  • Sentinel2: NDVI = (band8 - band4) / (band8 + band4)
  • Modis: NDVI = (band2 - band1) / (band2 + band1)
  • ETM/TM: NDVI = (band4 - band3) / (band4 + band3)
  • AVHRR: NDVI = (CH2 - CH1) / (CH2 + CH1)

2 影像、数据、变化趋势实现

代码如下(以鹿邑县为例)
注意:分辨率为10m

//以鹿邑县为例子
var geometry = ee.FeatureCollection('users/www1573979951/luyixian')
Map.centerObject(geometry,7)
//颜色设置
var colorizedVis = {min: -0.8,max: 0.8,palette: ['blue', 'white', 'green'],
};//使用QA波段去云
function maskS2clouds(image) {var qa = image.select('QA60');// Bits 10 and 11 are clouds and cirrus, respectively.var cloudBitMask = 1 << 10;var cirrusBitMask = 1 << 11;// Both flags should be set to zero, indicating clear conditions.var mask = qa.bitwiseAnd(cloudBitMask).eq(0).and(qa.bitwiseAnd(cirrusBitMask).eq(0));return image.updateMask(mask).divide(10000).set(image.toDictionary(image.propertyNames()));
}//NDVI的计算公式
function createNDVI(image){var ndvi = image.normalizedDifference(["B8","B4"]).rename('NDVI');return image.addBands(ndvi);
}//特别注意的是,在数学变换之后,保持原始影像的属性,所以这里.set(image.toDictionary(image.propertyNames()));
var S2_COL = ee.ImageCollection("COPERNICUS/S2")
.filterDate("2020-01-01", "2020-12-31")
.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE',20))
.filterBounds(geometry)
.map(maskS2clouds)
.map(createNDVI)
.select('NDVI');
print(S2_COL)
Map.addLayer(S2_COL.mean().clip(geometry), colorizedVis, 'col');//趋势线代码
var S2_chart = ui.Chart.image.series({imageCollection: S2_COL.select('NDVI'),region: geometry,reducer: ee.Reducer.mean(),scale: 500}).setOptions({interpolateNulls: true,lineWidth: 2,title: 'NDVI Time Seires',vAxis: {title: 'NDVI'},hAxis: {title: 'Date'},trendlines: { 0: {title: 'NDVI_trend',type:'linear', showR2: true,  color:'red', visibleInLegend: true}}});
print(S2_chart);

遥感影像截图:

数据集截图(51个数据集):

表格数据以及变化趋势截图:

CSV数据:

3 一年内所有影像数据查看和下载

3.1 NDVI值影像获取

分辨率:10m
代码如下(以鹿邑县为例):

//以鹿邑县为例子
var geometry = ee.FeatureCollection('users/www1573979951/luyixian')
Map.centerObject(geometry,7)
//颜色设置
var colorizedVis = {min: -0.8,max: 0.8,palette: ['blue', 'white', 'green'],
};//使用QA波段去云
function maskS2clouds(image) {var qa = image.select('QA60');// Bits 10 and 11 are clouds and cirrus, respectively.var cloudBitMask = 1 << 10;var cirrusBitMask = 1 << 11;// Both flags should be set to zero, indicating clear conditions.var mask = qa.bitwiseAnd(cloudBitMask).eq(0).and(qa.bitwiseAnd(cirrusBitMask).eq(0));return image.updateMask(mask).divide(10000).set(image.toDictionary(image.propertyNames()));
}//NDVI的计算公式
function createNDVI(image){var ndvi = image.normalizedDifference(["B8","B4"]).rename('NDVI');return image.addBands(ndvi);
}//特别注意的是,在数学变换之后,保持原始影像的属性,所以这里.set(image.toDictionary(image.propertyNames()));
var S2_COL = ee.ImageCollection("COPERNICUS/S2")
.filterDate("2020-01-01", "2020-12-31")
.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE',20))
.filterBounds(geometry)
.map(maskS2clouds)
.map(createNDVI)
.select('NDVI');// Map.addLayer(S2_COL.mean().clip(geometry), colorizedVis, 'col');print(S2_COL)function exportImageCollection(imgCol) {var indexList = imgCol.reduceColumns(ee.Reducer.toList(), ["system:index"]).get("list");indexList.evaluate(function(indexs) {for (var i=0; i<indexs.length; i++) {var image = imgCol.filter(ee.Filter.eq("system:index", indexs[i])).first();Map.addLayer(image.clip(geometry), colorizedVis, 'sentinel_10_ndvi_2020_'+indexs[i]);//tif数据下载Export.image.toDrive({image: image.clip(geometry),description: 'sentinel_10_ndvi_2020_'+indexs[i],fileNamePrefix: 'sentinel_10_ndvi_2020_'+indexs[i],folder: 'sentinel_10',region: geometry,scale: 10,crs: "EPSG:4326",maxPixels: 1e13});}});
}
exportImageCollection(S2_COL);

运行截图:


3.2 原始影像获取

分辨率:10m
代码如下(以鹿邑县为例):

var roi = ee.FeatureCollection('users/www1573979951/luyixian');;  //table为自己上传的矢量边界//去云
function maskS2clouds(image) {var qa = image.select('QA60');// Bits 10 and 11 are clouds and cirrus, respectively.var cloudBitMask = 1 << 10;var cirrusBitMask = 1 << 11;// Both flags should be set to zero, indicating clear conditions.var mask = qa.bitwiseAnd(cloudBitMask).eq(0).and(qa.bitwiseAnd(cirrusBitMask).eq(0));return image.updateMask(mask).divide(10000);
}//按条件筛选影像
var dataset = ee.ImageCollection('COPERNICUS/S2').filterBounds(roi).filterDate('2020-01-01','2020-12-31').filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 10)).map(maskS2clouds);
print(dataset)var rgbVis = {min: 0.0,max: 0.3,bands: ['B4', 'B3', 'B2'],
};// Map.addLayer(dataset.mean().clip(roi), rgbVis, 'dataset');
Map.centerObject(roi,7)//显示roi
var styling = {color:"red",fillColor:"00000000"};
Map.addLayer(roi.style(styling),{},"boundary")function exportImageCollection(imgCol) {var indexList = imgCol.reduceColumns(ee.Reducer.toList(), ["system:index"]).get("list");indexList.evaluate(function(indexs) {for (var i=0; i<indexs.length; i++) {var image = imgCol.filter(ee.Filter.eq("system:index", indexs[i])).first();// image = image.toInt16();image = image.clip(roi);Map.addLayer(image, rgbVis, indexs[i]);//查看具体的遥感影像//tif数据下载Export.image.toDrive({image: image,description: 'sentinel_'+indexs[i],fileNamePrefix: 'sentinel_'+indexs[i],folder: 'sentinel',region: roi,scale: 10,crs: "EPSG:4326",maxPixels: 1e13});}});
}
exportImageCollection(dataset);

运行截图:


4 月平均数据的变化趋势

注意:分辨率为10m
代码如下(以鹿邑县为例):

//以鹿邑县为例子
var geometry = ee.FeatureCollection('users/www1573979951/luyixian')
Map.centerObject(geometry,7)
//颜色设置
var colorizedVis = {min: -0.8,max: 0.8,palette: ['blue', 'white', 'green'],
};//使用QA波段去云
function maskS2clouds(image) {var qa = image.select('QA60');// Bits 10 and 11 are clouds and cirrus, respectively.var cloudBitMask = 1 << 10;var cirrusBitMask = 1 << 11;// Both flags should be set to zero, indicating clear conditions.var mask = qa.bitwiseAnd(cloudBitMask).eq(0).and(qa.bitwiseAnd(cirrusBitMask).eq(0));return image.updateMask(mask).divide(10000).set(image.toDictionary(image.propertyNames()));
}//NDVI的计算公式
function createNDVI(image){var ndvi = image.normalizedDifference(["B8","B4"]).rename('NDVI');return image.addBands(ndvi);
}//特别注意的是,在数学变换之后,保持原始影像的属性,所以这里.set(image.toDictionary(image.propertyNames()));
var S2_COL = ee.ImageCollection("COPERNICUS/S2")
.filterDate("2020-01-01", "2020-12-31")
.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE',20))
.filterBounds(geometry)
.map(maskS2clouds)
.map(createNDVI)
.select('NDVI');
print(S2_COL)
Map.addLayer(S2_COL.median().clip(geometry), colorizedVis, 'col');var years = ee.List.sequence(2020, 2020);
var months = ee.List.sequence(1, 12);
var S2_monthlymeanNDVI =  ee.ImageCollection.fromImages(years.map(function (y) {return months.map(function(m) {return S2_COL.filter(ee.Filter.calendarRange(y,y, 'year')).filter(ee.Filter.calendarRange(m, m, 'month')).mean().set('year', y).set('month', m).set('system:time_start', ee.Date.fromYMD(y, m, 1));});}).flatten()
);
// Create a monthly time series chart.
var plotNDVI = ui.Chart.image.seriesByRegion(S2_monthlymeanNDVI, geometry,ee.Reducer.mean(),
'NDVI',500,'system:time_start').setChartType('LineChart').setOptions({interpolateNulls: true,title: 'NDVI Monthly time series',hAxis: {title: 'Date'},vAxis: {title: 'NDVI',viewWindowMode: 'explicit', viewWindow: {max: 0.7,min: 0.3,},gridlines: {count: 10,}},trendlines: { 0: {title: 'NDVI_trend',type:'linear', showR2: true,  color:'red', visibleInLegend: true}}});
// Display.
print(plotNDVI);

影像截图:

表格变化趋势图:

CSV数据截图:

5 月平均影像数据的查看和下载

注意:分辨率为10m

5.1 NDVI值影像获取

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

//以鹿邑县为例子
var geometry = ee.FeatureCollection('users/www1573979951/luyixian')
Map.centerObject(geometry,7)
//颜色设置
var colorizedVis = {min: -0.8,max: 0.8,palette: ['blue', 'white', 'green'],
};//使用QA波段去云
function maskS2clouds(image) {var qa = image.select('QA60');// Bits 10 and 11 are clouds and cirrus, respectively.var cloudBitMask = 1 << 10;var cirrusBitMask = 1 << 11;// Both flags should be set to zero, indicating clear conditions.var mask = qa.bitwiseAnd(cloudBitMask).eq(0).and(qa.bitwiseAnd(cirrusBitMask).eq(0));return image.updateMask(mask).divide(10000).set(image.toDictionary(image.propertyNames()));
}//NDVI的计算公式
function createNDVI(image){var ndvi = image.normalizedDifference(["B8","B4"]).rename('NDVI');return image.addBands(ndvi);
}//特别注意的是,在数学变换之后,保持原始影像的属性,所以这里.set(image.toDictionary(image.propertyNames()));
var S2_COL = ee.ImageCollection("COPERNICUS/S2")
.filterDate("2020-01-01", "2020-12-31")
.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE',20))
.filterBounds(geometry)
.map(maskS2clouds)
.map(createNDVI)
.select('NDVI');// Map.addLayer(S2_COL.mean().clip(geometry), colorizedVis, 'col');var years = ee.List.sequence(2020, 2020);
var months = ee.List.sequence(1, 12);
var S2_monthlymeanNDVI =  ee.ImageCollection.fromImages(years.map(function (y) {return months.map(function(m) {return S2_COL.filter(ee.Filter.calendarRange(y,y, 'year')).filter(ee.Filter.calendarRange(m, m, 'month')).mean().set('year', y).set('month', m).set('system:time_start', ee.Date.fromYMD(y, m, 1));});}).flatten()
);print(S2_monthlymeanNDVI)function exportImageCollection(imgCol) {var indexList = imgCol.reduceColumns(ee.Reducer.toList(), ["system:index"]).get("list");indexList.evaluate(function(indexs) {for (var i=0; i<indexs.length; i++) {var image = imgCol.filter(ee.Filter.eq("system:index", indexs[i])).first();Map.addLayer(image.clip(geometry), colorizedVis, 'sentinel_10_ndvi_2020_'+indexs[i+1]);//tif数据下载Export.image.toDrive({image: image.clip(geometry),description: 'sentinel_10_ndvi_2020_'+indexs[i+1],fileNamePrefix: 'sentinel_10_ndvi_2020_'+indexs[i+1],folder: 'sentinel_10',region: geometry,scale: 10,crs: "EPSG:4326",maxPixels: 1e13});}});
}
exportImageCollection(S2_monthlymeanNDVI);

运行截图:

5.2 原始影像获取

代码如下(以鹿邑县9月份为例)

var roi = ee.FeatureCollection('users/www1573979951/luyixian');;  //table为自己上传的矢量边界//去云
function maskS2clouds(image) {var qa = image.select('QA60');// Bits 10 and 11 are clouds and cirrus, respectively.var cloudBitMask = 1 << 10;var cirrusBitMask = 1 << 11;// Both flags should be set to zero, indicating clear conditions.var mask = qa.bitwiseAnd(cloudBitMask).eq(0).and(qa.bitwiseAnd(cirrusBitMask).eq(0));return image.updateMask(mask).divide(10000);
}//按条件筛选影像
var dataset = ee.ImageCollection('COPERNICUS/S2').filterBounds(roi).filterDate('2020-09-01','2020-09-30')//自己更改时间时间获取影像 .filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 10)).map(maskS2clouds);
print(dataset)
var rgbVis = {min: 0.0,max: 0.3,bands: ['B4', 'B3', 'B2'],
};Map.addLayer(dataset.mean().clip(roi), rgbVis, 'dataset');
Map.centerObject(roi,7)//显示roi
var styling = {color:"red",fillColor:"00000000"};
Map.addLayer(roi.style(styling),{},"boundary")
//tif数据下载
Export.image.toDrive({image: dataset.mean().clip(roi),description: 'sentinel_09',fileNamePrefix: 'sentinel_09',folder: 'sentinel',region: roi,scale: 10,crs: "EPSG:4326",maxPixels: 1e13
});

运行截图:

GEE开发之Sentinel-2计算NDVI和数据分析相关推荐

  1. GEE开发之MODIS_NDVI年均值数据分析

    GEE开发之MODIS_NDVI年均值数据分析 前言:前面几篇博客主要介绍了NDVI的日均值和月均值的数据分析,这次主要介绍年均值的数据分析. 代码如下(以鹿邑县为例): var geometry = ...

  2. GEE开发之ERA5(气温、降水、压力、风速等)数据获取和分析

    GEE开发之ERA5(气温.降水.压力.风速等)数据获取和分析 1.ERA5介绍 2.初始ERA5数据 2.1 DAILY代码 2.2 MONTHLY代码 3.遥感影像查看(DAILY之mean_2m ...

  3. GEE开发之Modis_LST地表温度数据分析

    GEE开发之Modis_LST地表温度数据分析 1 MODIS/006/MOD11A1介绍 2 遥感影像获取(以LST为例子) 3 日遥感数据获取(以LST为例子) 3.1 日数据折线图展现如下(以鹿 ...

  4. GEE开发之Modis_NPP数据分析和获取

    GEE开发之Modis_NPP数据分析和获取 1.NPP 2.MOD系列和MYD系列区别 3.MOD17A3H_v006(500m/1年) 4.MOD17A3HGF_v006(500m/1年) 5.M ...

  5. GEE开发之Modis_ET数据分析和获取

    GEE开发之Modis_ET数据获取 1 ET(蒸散量) 2 MOD16A2(500米/8天) 2.1 MOD16A2下的所有指数 2.2 ET影像获取和查看 3 ET日数据下载(以MOD16A2为例 ...

  6. GEE开发之Worldpop人口数据分析

    GEE开发之Worldpop人口数据分析 1 基础知识 2 获取某地区的人口遥感影像 3 获取某地区每年人口的数据 4 TIF数据下载 前言:如何利用GEE平拍获取Worldpop人口数据. 1 基础 ...

  7. GEE开发之MODIS_MCD12Q1数据分析和获取

    GEE开发之MODIS_土地类型分类 0.MCD12Q1介绍 1.遥感影像查看 2.MCD12Q1分类介绍 3.年数据下载(LC_Type1/year/500m) 前言:主要介绍MODIS的MCD12 ...

  8. ios html清除缓存,iOS开发之1行代码实现缓存计算及清除缓存

    话不多说,直接撸代码 // // gzhCache.h // cache // // Created by 郭志贺 on 2020/5/27. // Copyright © 2020 郭志贺. All ...

  9. Google Earth Engine(GEE)计算NDVI、EVI、NDBI等指数并相关性分析

    Google Earth Engine(GEE)计算NDVI.EVI.NDBI等指数并相关性分析 NDVI为归一化植被指数.EVI为增强植被指数,据GEE官方介绍NDTI为归一化热差指数,用于区分城市 ...

  10. Google Earth Engine(GEE)——计算NDVI\EVI\RVI\DVI\SAVI计算并下载(2)

    有粉丝还问到关于Landsat8如何计算,上一次的文章提到了关于各类植被指数的下载和加载:Google Earth Engine(GEE)--计算NDVI\EVI\RVI\DVI\SAVI归一化植被指 ...

最新文章

  1. python3入门到精通pdf-Python3入门到精通实战特训
  2. 数据中台模型设计系列(一):维度建模初探
  3. linux c中的文件描述符与打开文件之间的关系
  4. java io流操作_【Java基础】IO流操作
  5. arduino 蓝牙示例_,arduino 蓝牙例子,
  6. Tiktok现阶段最简单的三种变现模式,小白也可轻松上手
  7. 案例分享|某医药集团的BI建设案例
  8. VB中DoEvents的注意事项
  9. 书matlab电子,MATLAB电子仿真与应用教程 第3版.pdf
  10. 游戏编程之路 -- 《Windows游戏编程大师技巧》第一章 笔记
  11. vc6.0到vc 2008(vc 9.0)的变化
  12. Unity3D 智能巡逻兵
  13. Idea设置字体大小
  14. 杭电数字电路课程设计——出租车计费器
  15. cnpm 安装yarn
  16. 【MATLAB】基本绘图 ( Marker 设置 | 设置 Marker 边框 | 设置 Marker 填充 )
  17. 几个国外广告联盟介绍
  18. 摩托罗拉刷机维修服务器,摩托罗拉手机通用刷机教程
  19. 博后招募 | 香港大学蒋海波齐晓娟教授联合招收AI4Science方向博士后/RA
  20. 打造完美用户体验:“天翼平台开放日”沙龙纪实

热门文章

  1. Treap(二)——#10144. 「一本通 4.6 练习 1」宠物收养所
  2. Codeforces Round #116 C.Letter
  3. VIJOS-P1626 桐桐的糖果计划
  4. 输入身高体重测身材_【测试】你的身材标准吗? 附赠20-39岁成年人身高体重评分标准...
  5. 计算机自动开机关机设置在哪里设置密码,怎样设置开关机密码
  6. SCIgen与野鸡期刊的梗
  7. Gartner:2017年存储技术成熟度曲线
  8. 手机用html电视,4种方法教你手机如何连接智能电视
  9. 汽车数据流分析常采用哪些方法?
  10. Chaos Mesh® 在腾讯——腾讯互娱混沌工程实践