LXX
读完需要
速读仅需 1 分钟
前言:
干旱给农业和经济发展造成巨大损失,人类已经探索了许多抗旱措施来减轻干旱的影响。植被健康指数(VHI)代表实际条件下实际农业干旱严重程度,其干旱频率和受灾地区的差异反映了缓解农业干旱的抗旱措施水平;同时VHI 是综合考虑植被状态和温度状态的遥感植被指数,可以同时反映区域内水分与温度的变化,监测不同时间尺度和地区的干旱变化情况。因此,本文分享使用植被健康指数 (VHI) 评估植被健康状况作为农业干旱的替代指标。
希望各位同学点个关注,点个小赞,这将是更新的动力,不胜感激❥(^_-)
1
式中:VCI 为植被状态指数;NDVI 为归一化植被指数;NDVImax 和 NDVImin 分别为研究时期 NDVI 的最大值和最小值;TCI 为温度状态指数;LST 为地表温度;LSTmax和 LSTmin分别为研究时期 LST 的最大值和最小值;α 为 VCI 和 TCI 的加权系数,取 α=0.5。
2
本文将计算研究区域内从2010年-2022年的VHI指数,并进行逐年导出,显示每年VHI指数的平均值。
// 定义感兴趣区
var aoi = ee.FeatureCollection("users/geestudy2/yibin");
Map.addLayer(aoi)
Map.centerObject(aoi, 8)
// 定义分析时间段
var startDate = "2010-01-01";
var endDate = "2022-12-31";
var startDate = ee.Date(startDate);
var endDate = ee.Date(endDate);
// 获取MODIS影像集合并选择NDVI波段
var filteredNDVI = ee.ImageCollection("MODIS/061/MOD13Q1").select('NDVI');
// ---------------- 计算植被状况指数(VCI) ----------------- //
// 定义计算VCI的函数
function calcVCI(image) {
var min = filteredNDVI.reduce(ee.Reducer.min());
var max = filteredNDVI.reduce(ee.Reducer.max());
var vci = image.subtract(min).divide(max.subtract(min)).multiply(100);
return vci.rename('VCI').copyProperties(image, ['system:time_start', 'system:time_end']);
}
// 应用函数计算VCI
var VCI = filteredNDVI.filterDate(startDate, endDate).map(calcVCI);
// -------------- 计算温度状况指数(TCI) --------------- //
// 获取MODIS陆地表面温度数据并选择白天温度数据(LST_Day_1km)
var LST = ee.ImageCollection("MODIS/061/MOD11A2").select('LST_Day_1km');
// 定义将8天温度数据合并为16天的数据的函数(取平均)
function convertLstDatesToModisDates(ndvimg) {
var start = ndvimg.get('system:time_start');
var end = ndvimg.get('system:time_end');
var composite = LST.filterDate(start, end).mean(); // 使用均值合并影像
return composite
.set('system:time_start', start)
.set('date', ee.Date(start).format())
.set('system:time_end', end)
.set('empty', composite.bandNames().size().eq(0));
}
// 过滤温度数据,匹配NDVI数据的时间段
var filteredlst = filteredNDVI.filterDate(startDate, endDate).map(convertLstDatesToModisDates);
// 定义计算TCI的函数
function calcTCI(image1) {
var min = LST.reduce(ee.Reducer.min());
var max = LST.reduce(ee.Reducer.max());
var tci = max.subtract(image1).divide(max.subtract(min)).multiply(100);
return tci.rename('TCI').copyProperties(image1, ['system:time_start', 'system:time_end']);
}
// 应用函数计算TCI
var TCI = filteredlst.filterDate(startDate, endDate).map(calcTCI);
// ------------------- 计算植被健康指数(VHI) ---------------------- //
// 定义过滤条件,将VCI和TCI进行配对
var filter = ee.Filter.equals({leftField: 'system:time_start', rightField: 'system:time_start'});
var join = ee.Join.saveFirst({matchKey: 'match'});
// 将VCI和TCI集合进行配对合并
var both = ee.ImageCollection(join.apply(VCI, TCI, filter))
.map(function(img) {
return img.addBands(img.get('match')).set('date', img.date().format('YYYY_MM_dd'));
});
// 计算VHI并将其添加为集合中的一个波段
var VHI = both.map(function(img) {
return img.addBands(
img.expression('a1/2 + b1/2', {
"a1": img.select('VCI'),
"b1": img.select('TCI'),
}).rename('VHI')
);
});
// 创建每年5月对应的VHI影像列表
var imageList = VHI.toList(VHI.size());
var my_indices = ee.List([9,32,55,78,101,124,147,170,193,216,239,262,285]);
// 使用索引选择影像
function getImages(list){
var img = ee.Image(imageList.get(list));
return img;
}
// 创建包含所选影像的影像集合
var finalCollection = ee.ImageCollection.fromImages(my_indices.map(getImages));
// 将每年的VHI波段提取并裁剪到感兴趣区
var VHI_Collection = finalCollection.map(function(image) {
return image.select("VHI").clip(aoi);
});
// 导出每年VHI的结果到Google Drive
for (var i = 0; i < my_indices.length().getInfo(); i++) {
var img = ee.Image(VHI_Collection.toList(VHI_Collection.size()).get(i));
var year = 2010 + i;
Export.image.toDrive({
image: img,
description: 'VHI_' + year,
folder: 'VHI_Export',
scale: 500,
region: aoi.geometry(),
crs: 'EPSG:4326',
maxPixels: 1e13
});
}
// 可视化VHI的参数
var VisParams = {
min: 0,
max: 100,
palette: ['#d73027', '#fdae61', '#ffffbf', '#a6d96a', '#1a9850']
};
// 显示2014年的VHI影像
var VHI_2020 = VHI_Collection.toList(VHI_Collection.size()).get(10);
Map.addLayer(ee.Image(VHI_2020), VisParams, 'VHI 2020');
// ------------------------- 图例 --------------------------//
// 定义图例信息
var classInfo = [
{name: '极端干旱', color: '#d73027'},
{name: '严重干旱', color: '#fdae61'},
{name: '中度干旱', color: '#ffffbf'},
{name: '轻度干旱', color: '#a6d96a'},
{name: '无干旱', color: '#1a9850'}
];
// 创建图例条目:颜色和标签并排显示
function legendEntry(info) {
var color = ui.Panel({style: {
width: '20px',
height: '20px',
backgroundColor: info.color,
margin: '6px 0px 0px 0px'
}});
var label = ui.Label({
value: info.name,
});
return ui.Panel({
widgets: [color, label],
layout: ui.Panel.Layout.flow('horizontal'),
style: {
stretch: 'horizontal',
margin: '-6px 0px 0px 0px'
}});
}
// 定义用于保存所有图例条目的面板
var legend = ui.Panel({
style: {
position: 'top-left',
padding: '8px 8px 0px 8px'
}
});
// 创建图例标题
var legendTitle = ui.Label({
value: 'VHI 2020',
style: {
fontWeight: 'bold',
fontSize: '18px',
margin: '0 0 4px 0',
padding: '0'
}});
// 将标题添加到面板
legend.add(legendTitle);
// 遍历类信息,将每个条目添加到图例面板
for (var i = 0; i < classInfo.length; i++) {
legend.add(legendEntry(classInfo[i]));
}
// 将图例显示在地图上
Map.add(legend);
// ------------------- 绘制每年5月的VHI折线图 ---------------------- //
// 获取每年5月的VHI均值
var vhiMeans = finalCollection.map(function(image) {
var mean = image.reduceRegion({
reducer: ee.Reducer.mean(),
geometry: aoi,
scale: 500
}).get('VHI');
return ee.Feature(null, {'VHI': mean});
});
// 创建年份列表
var years = ee.List.sequence(2010, 2022);
// 将年份和VHI值组合成特征集合
var chartData = ee.FeatureCollection(years.zip(vhiMeans.toList(vhiMeans.size())).map(function(val) {
val = ee.List(val);
return ee.Feature(null, {
'year': val.get(0),
'VHI': ee.Feature(val.get(1)).get('VHI')
});
}));
// 将特征集合转换为图表
var chart = ui.Chart.feature.byFeature(chartData, 'year', ['VHI'])
.setOptions({
title: 'VHI 每年5月平均值',
hAxis: {title: '年份'},
vAxis: {title: 'VHI 值'},
lineWidth: 2,
pointSize: 4,
});
// 显示折线图
print(chart);
3
结果
【参考】