目录
在地理空间分析领域,归一化植被指数(NDVI)是评估植被生长状况的关键指标。借助 Google Earth Engine(GEE)平台,开发者能够轻松访问和分析海量的地理空间数据。本文将通过一段完整的 GEE 代码,深入介绍如何进行 NDVI 时间序列分析,并实现可视化。
1 代码解析
1.1 数据加载与预处理
首先,代码将一个已有表格table赋值给mask,并将其添加到地图中,同时使地图聚焦该区域。此mask后续会用于影像裁剪。
var mask = table;
Map.addLayer(mask);
Map.centerObject(mask);
接着,代码从 GEE 数据目录中加载 MODIS NDVI 数据,并筛选 2018 年至 2020 年的数据。在数据处理过程中,为每个影像添加了一年中的第几天(DOY)属性。
var col = ee.ImageCollection("MODIS/061/MOD13Q1")
.select('NDVI')
.filterDate('2018-01-01', '2020-12-31')
.map(function(img) {
var doy = ee.Date(img.get('system:time_start')).getRelative('day', 'year');
return img.set('doy', doy);
});
1.2 影像裁剪与可视化
为了仅关注研究区域,代码使用mask对影像集合进行裁剪,并为裁剪后的影像设置可视化参数,以展示不同等级的 NDVI。
var colClipped = col.map(function(img) {
return img.clip(mask).visualize({
min: 0.0,
max: 9000.0,
palette: [
'darkblue',
'blue',
'cyan',
'yellow',
'green',
'darkgreen',
'brown',
'orange',
'red'
]
});
});
1.3 生成动画缩略图
为了直观展示 NDVI 随时间的变化,代码使用ui.Thumbnail函数生成动画缩略图,并设置了显示区域、尺寸、帧率等参数。
var region = mask.geometry().bounds();
var ndviGifParams = {
region: region,
dimensions: 600,
framesPerSecond: 5,
format: 'gif',
crs: 'EPSG:4326'
};
print(ui.Thumbnail(colClipped, ndviGifParams));
1.4 创建图例面板
为了让可视化结果更易理解,代码创建了一个包含 NDVI 等级说明的图例面板,并将其添加到地图中。
var legend = ui.Panel({
style: {
position: 'bottom-left',
padding: '8px 15px'
}
});
// 添加标题、颜色块和标签
// ...
Map.add(legend);
2 完整代码
var mask = table;
Map.addLayer(mask);
Map.centerObject(mask);
// 使用 MODIS 数据创建 NDVI 影像集合
var col = ee.ImageCollection("MODIS/061/MOD13Q1")
.select('NDVI')
.filterDate('2018-01-01', '2020-12-31')
.map(function(img) {
var doy = ee.Date(img.get('system:time_start')).getRelative('day', 'year');
return img.set('doy', doy);
});
// 影像裁剪 - 可视化
var colClipped = col.map(function(img) {
return img.clip(mask).visualize({
min: 0.0,
max: 9000.0,
palette: [
'darkblue', // 极低 NDVI
'blue', // 低 NDVI
'cyan', // 中低 NDVI
'yellow', // 中等 NDVI
'green', // 高 NDVI
'darkgreen', // 极高 NDVI
'brown', // 植被减少
'orange', // 植被受压
'red' // 植被高度受压
]
});
});
// 设置缩略图的显示区域
var region = mask.geometry().bounds();
// 为 NDVI 时间序列生成动画缩略图
var ndviGifParams = {
region: region,
dimensions: 600,
framesPerSecond: 5,
format: 'gif',
crs: 'EPSG:4326'
};
// 显示动画缩略图
print(ui.Thumbnail(colClipped, ndviGifParams));
// 创建图例面板
var legend = ui.Panel({
style: {
position: 'bottom-left',
padding: '8px 15px'
}
});
// 图例标题
var legendTitle = ui.Label({
value: 'NDVI 图例',
style: { fontWeight: 'bold', fontSize: '18px', margin: '0 0 6px 0', padding: '0' }
});
legend.add(legendTitle);
// 定义图例颜色和标签
var palette = [
{ color: 'darkblue', label: '极低' },
{ color: 'blue', label: '低' },
{ color: 'cyan', label: '中低' },
{ color: 'yellow', label: '中等' },
{ color: 'green', label: '高' },
{ color: 'darkgreen', label: '极高' },
{ color: 'brown', label: '植被减少' },
{ color: 'orange', label: '植被受压' },
{ color: 'red', label: '植被高度受压' }
];
// 添加文本标签函数
/*
function addDateLabel(img) {
var date = ee.String(img.get('date'));
var region = mask.geometry().bounds();
var position = region.coordinates().get(0).get(0);
var label = ee.Image().byte().paint({
featureCollection: ee.FeatureCollection([
ee.Feature(ee.Geometry.Point(position), { label: date })
]),
color: 1,
width: 2
});
var labeled = img.blend(label.visualize({
palette: 'white',
forceRgbOutput: true,
fontSize: 24,
opacity: 1,
}));
return labeled;
}
*/
// 向图例添加颜色和标签
palette.forEach(function(entry) {
var colorBox = ui.Label({
style: {
backgroundColor: entry.color,
padding: '8px',
margin: '0 0 4px 0'
}
});
var description = ui.Label({
value: entry.label,
style: { margin: '0 0 4px 6px' }
});
// 创建用于显示颜色和标签的面板
var legendRow = ui.Panel({
widgets: [colorBox, description],
layout: ui.Panel.Layout.Flow('horizontal')
});
legend.add(legendRow);
});
// 将图例添加到地图上
Map.add(legend);
3 运行结果


通过这段代码,我们展示了如何利用 GEE 平台进行 NDVI 时间序列分析,从数据加载、预处理、裁剪、可视化到动画生成和图例创建。希望本文能为地理空间分析领域的开发者提供有益的参考,帮助大家更好地利用 GEE 平台开展相关研究和项目。