LandTrendr是什么?
LandTrendr是一组频谱时间分割算法,可用于中等分辨率卫星图像(主要是Landsat)的时间序列中的变化检测以及生成很大程度上不存在年际信号噪声的基于轨迹的频谱时间序列数据。LT最初是用IDL(交互式数据语言)实现的,但是在Google工程师的帮助下,它已移植到GEE平台。
LandTrendr官方说明网站:
https://emapr.github.io/LT-GEE/index.html
该网站介绍了在Google Earth Engine(GEE)中运行LandTrendr(LT)的基础知识。
它描述了LT概念框架,运行LT-GEE所需的内容,如何运行它,输出是什么以及如何格式化它们。它还提供了三个示例脚本,用于LT操作的一系列用户界面以及一个有目的但易于使用的API。
GEE框架几乎消除了IDL实施中繁琐的数据管理和图像预处理方面。它比IDL实施要快几光年,后者的计算时间以分钟而不是天为单位。(GEE谷歌云平台动用全球的服务器运算)
以下介绍动用API,运行LandTrendr的代码。输出结果为最大的扰动发生的幅度和年份。
完整代码:https://code.earthengine.google.com/65d284842e453de5731810be16bfccf3?noload=true
扰动幅度结果如下图所示,(不同颜色代表扰动强度不同)
扰动发生的年份,结果如下图所示:(不同颜色代表扰动发生的不同年份)
// 定义影像集参数
var startYear = 1984;
var endYear = 2019;
var startDay = '06-20';
var endDay = '09-01';
//var aoi = ee.Geometry.Point(-122.8848, 43.7929);
var index = 'NBR';
var maskThese = ['cloud', 'shadow', 'snow', 'water'];
// 定义landtrendr参数
var runParams = {
maxSegments: 6,
spikeThreshold: 0.9,
vertexCountOvershoot: 3,
preventOneYearRecovery: true,
recoveryThreshold: 0.25,
pvalThreshold: 0.05,
bestModelProportion: 0.75,
minObservationsNeeded: 6
};
// 定义变化参数
var changeParams = {
delta: 'loss',
sort: 'greatest',
year: {checked:true, start:1986, end:2019},
mag: {checked:true, value:200, operator:'>'},
dur: {checked:true, value:4, operator:'<'},
preval: {checked:true, value:300, operator:'>'},
mmu: {checked:true, value:11},
};
//各项参数设置好了,就可以开始运行LandTrendr了!
// 加载API
var ltgee = require('users/emaprlab/public:Modules/LandTrendr.js');
// add index to changeParams object
changeParams.index = index;
// 运行landtrendr
var lt = ltgee.runLT(startYear, endYear, startDay, endDay, aoi, index, [], runParams, maskThese);
// 得到 change map layers
var changeImg = ltgee.getChangeMap(lt, changeParams);
// 可视化字典
var palette = ['#9400D3', '#4B0082', '#0000FF', '#00FF00', '#FFFF00', '#FF7F00', '#FF0000'];
var yodVizParms = {
min: startYear,
max: endYear,
palette: palette
};
// 可视化参数
var magVizParms = {
min: 200,
max: 800,
palette: palette
};
// 将扰动图可视化
Map.centerObject(aoi, 11);
Map.addLayer(changeImg.select(['mag']), magVizParms, 'Magnitude of Change');
Map.addLayer(changeImg.select(['yod']), yodVizParms, 'Year of Detection');
//设置显示样式:color代表边界颜色;fillcolor代表填充颜色
var styling={color:'red',fillColor:'00000000'}
//JX就是矢量边界
Map.addLayer(aoi.style(styling),{},"JX")
// 将结果下载到谷歌云盘
var exportImg = changeImg.clip(aoi).unmask(0).short();
Export.image.toDrive({
image: exportImg,
description: 'lt-gee_disturbance_map',
folder: 'lt-gee_disturbance_map_test',
fileNamePrefix: 'lt-gee_disturbance_map',
region: aoi,
scale: 30,
crs: 'EPSG:5070',
maxPixels: 1e13
});