简介
本篇博客将介绍如何使用Google Earth Engine (GEE) 对长时间序列的Landsat数据进行归一化植被指数(NDVI)分析。通过此分析,可以监测和评估1982年至2024年间的植被变化趋势。
背景知识
Landsat数据集
Landsat是美国地质调查局和美国航天局联合发射的一系列卫星,提供地表的长时间序列、中等分辨率的遥感数据。
NDVI
归一化植被指数(NDVI)是一种常用的遥感指数,用于估算植被覆盖度和植被健康状态。
完整代码
代码语言:javascript复制// 定义研究区域的坐标点
var cor = [
[48.62559911358055, 31.65418476680761],
[48.91124364483055, 31.65418476680761],
[48.91124364483055, 31.885355756064595],
[48.62559911358055, 31.885355756064595],
[48.62559911358055, 31.65418476680761]
];
// 创建多边形区域
var roi = ee.Geometry.Polygon(cor);
// 将地图中心设置为研究区域
Map.centerObject(roi);
// 定义NDVI计算函数
function ndvi_tm_etm(img) {
var bands = img.multiply(0.0000275).add(-0.2);
var ndvi = bands.normalizedDifference(['SR_B4', 'SR_B3']).rename('ndvi');
return ndvi.copyProperties(img, img.propertyNames());
}
// 定义SLC偏移修正函数
function slc_off(img) {
var bands = img.multiply(0.0000275).add(-0.2);
var ndvi = bands.normalizedDifference(['SR_B4', 'SR_B3']).rename('ndvi');
var filter = ndvi.focalMedian(1, 'square', 'pixels', 10);
var filled = filter.blend(ndvi).rename('ndvi');
return filled.copyProperties(img, img.propertyNames());
}
// 定义OLI传感器NDVI计算函数
function ndvi_oli(img) {
var bands = img.multiply(0.0000275).add(-0.2);
var ndvi = bands.normalizedDifference(['SR_B5', 'SR_B4']).rename('ndvi');
return ndvi.copyProperties(img, img.propertyNames());
}
// 筛选Landsat 4-9数据集并计算NDVI
var landsat4 = ee.ImageCollection("LANDSAT/LT04/C02/T1_L2")
.select('SR_B.*')
.filterDate('1982', '1994')
// ... 其他筛选条件 ...
.map(ndvi_tm_etm);
var landsat5 = ee.ImageCollection("LANDSAT/LT05/C02/T1_L2")
.select('SR_B.*')
.filterDate('1984', '2013')
// ... 其他筛选条件 ...
.map(ndvi_tm_etm);
// ... Landsat 7 SLC正常和偏移后的数据 ...
var landsat8 = ee.ImageCollection("LANDSAT/LC08/C02/T1_L2")
.select('SR_B.*')
.filterDate('2013', '2024')
// ... 其他筛选条件 ...
.map(ndvi_oli);
var landsat9 = ee.ImageCollection("LANDSAT/LC09/C02/T1_L2")
.select('SR_B.*')
.filterDate('2021', '2024')
// ... 其他筛选条件 ...
.map(ndvi_oli);
// 合并所有Landsat数据集并排序
var landsat_collections = landsat4.merge(landsat5)
.merge(landsat7_slcon).merge(landsat7_slcoff).merge(landsat8).merge(landsat9)
.sort('system:time_start');
// 打印NDVI时间序列图表
print(
ui.Chart.image.series({
imageCollection: landsat_collections,
region: roi,
reducer: ee.Reducer.mean(),
scale: 100,
xProperty: 'system:time_start'
})
);
// 导出2010年的NDVI图像到Google Drive
Export.image.toDrive({
image: landsat_collections.filterDate('2010', '2011').toBands().clip(roi).float(),
description: 'landsat2010',
scale: 30,
crs: 'EPSG:4326',
maxPixels: 1e13,
region: roi,
folder: 'test'
});
代码详解
1. 定义研究区域
创建一个多边形区域roi
,用于限定分析的地理范围,并设置地图中心。
2. 定义NDVI计算函数
定义ndvi_tm_etm
函数,用于计算Landsat 4-5和7(SLC正常)的NDVI。
3. 定义SLC偏移修正函数
定义slc_off
函数,用于处理Landsat 7 SLC偏移后的数据。
4. 定义OLI传感器NDVI计算函数
定义ndvi_oli
函数,用于计算Landsat 8-9的NDVI。
5. 筛选和处理Landsat数据集
分别筛选Landsat 4-9的数据集,应用相应的NDVI计算函数,并处理SLC偏移问题。
6. 合并和排序数据集
将所有处理过的Landsat数据集合并,并按时间排序。
7. 可视化NDVI时间序列
使用ui.Chart.image.series
打印NDVI时间序列图表。
8. 导出数据
将2010年的NDVI图像导出到Google Drive。
结论
本教程展示了如何使用GEE对长时间序列的Landsat数据进行NDVI分析。通过此分析,可以监测植被覆盖度的变化,为生态研究和环境监测提供支持。
进一步探索
GEE提供了多种工具和方法来进行时间序列分析和环境监测。在后续的教程中,我们将继续探索GEE在不同领域的应用。