目录
大家好!今天我们来聊聊如何利用Google Earth Engine(GEE)分析长时间序列的NDVI数据,结合Sen斜率和Mann-Kendall(MK)检验来研究植被变化趋势。
1 代码解析
1.1 数据准备与NDVI集合构建
首先,代码通过Map.centerObject(table)将地图中心定位到一个特定的几何区域(table通常是一个矢量数据集,如研究区域的边界)。
接着,定义时间范围为2001年至2023年,并基于MODIS的MOD13A1数据集构建NDVI图像集合:
var stary = 2001, endy = 2023;
var NDVICL = ee.ImageCollection(ee.List.sequence(stary, endy).map(function(year) {
var startd = ee.Date.fromYMD(year, 1, 1);
var endd = ee.Date.fromYMD(year, 12, 31);
return ee.ImageCollection('MODIS/006/MOD13A1')
.filterDate(startd, endd)
.select('NDVI')
.max()
.addBands(ee.Image.constant(year).toFloat().rename('year'));
}));
- 逻辑:使用ee.List.sequence生成2001-2023的年份列表,通过map函数为每一年加载MODIS NDVI数据。
- 细节:filterDate按年份过滤数据,select('NDVI')提取NDVI波段,max()计算每年最大值以减少云影响,最后添加一个常量波段year记录年份。
- 输出:NDVICL是一个包含23个图像的集合,每个图像有NDVI和year两个波段。
1.2 计算Sen斜率
Sen斜率是一种非参数方法,用于估计时间序列的趋势斜率。代码如下:
var senSlope = NDVICL.select(['NDVI', 'year'])
.reduce(ee.Reducer.sensSlope())
.clip(table);
- 逻辑:sensSlope()计算NDVI随年份变化的斜率,结果是一个包含slope和offset波段的图像。clip(table)将结果裁剪到研究区域。
- 意义:正斜率表示NDVI随时间增加(植被变好),负斜率表示减少(植被退化)。
- 可视化:
var