基于GEE实现NDVI的theil-sen分析
时间: 2025-03-17 17:05:11 浏览: 62
### 基于 Google Earth Engine (GEE) 的 NDVI Theil-Sen 趋势分析方法
Theil-Sen 方法是一种稳健的趋势估计技术,适用于时间序列数据分析。它通过计算每一对观测值之间的斜率并取中位数来确定整体趋势[^1]。这种方法能够有效减少异常值的影响。
以下是实现基于 GEE 平台的 NDVI 数据 Theil-Sen 趋势分析的具体方法和代码示例:
#### 1. 加载 NDVI 时间序列数据
如果已有本地存储的 TIF 文件,则可以通过 `ee.ImageCollection.load` 或上传到资产的方式加载数据集;或者可以直接利用 GEE 中现有的 MODIS、Landsat 等卫星影像集合提取 NDVI 数据[^2]。
```javascript
// 定义研究区域(AOI)
var aoi = ee.Geometry.Rectangle([70, 15, 140, 55]); // 示例范围为中国地区
// 使用 Landsat 8 影像作为输入数据源
var collection = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA')
.filterBounds(aoi)
.filterDate('2013-01-01', '2022-12-31');
// 计算 NDVI
function addNDVI(image) {
var ndvi = image.normalizedDifference(['B5', 'B4']).rename('NDVI');
return image.addBands(ndvi);
}
var withNDVI = collection.map(addNDVI).select('NDVI');
```
#### 2. 构建年份列表并与图像匹配
为了应用 Sen 斜率算法,需创建对应的时间戳数组,并将其映射至每一幅影像上。
```javascript
// 获取年份数组
var years = ee.List.sequence(2000, 2022);
// 将年份附加到每张影像上
var yearlyImages = ee.ImageCollection.fromImages(
years.map(function(year){
var start = ee.Date.fromYMD(ee.Number.parse(year), 1, 1);
var end = start.advance(1, 'year');
var annualImage = withNDVI.filterDate(start, end)
.mean()
.set('year', year); // 设置属性
return annualImage;
})
);
```
#### 3. 应用 Theil-Sen Slope 和 Mann-Kendall 检验
使用内置函数执行 Theil-Sen 分析以及 Mann-Kendall 统计测试以评估显著性水平。
```javascript
// 导入工具包用于 MK 测试
var mk = require('users/gena/packages:mk');
// 执行 Theil-Sen Trend Analysis
var senSlope = mk.sensSlope(yearlyImages.select('NDVI'), 'year').clip(aoi);
// 显示结果图层
Map.centerObject(aoi, 6);
Map.addLayer(senSlope.updateMask(senSlope.gt(-0.001)), {min:-0.01,max:0.01}, 'Trend Magnitude');
// 添加 Mann Kendall Test 图层
var pValue = mk.mannKendallPvalue(yearlyImages.select('NDVI'), 'year').clip(aoi);
Map.addLayer(pValue.updateMask(pValue.lte(0.05)), {min:0,max:0.05,palette:['blue']}, 'Significance Level');
```
上述脚本实现了完整的流程:从原始遥感数据处理得到年度均值 NDVI 到最终完成趋势检测与可视化输出。
---
###
阅读全文
相关推荐
















