本文主要是介绍GEE计算VCI(植被状况指数)及VHI(植被健康指数),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Google Earth Engine(GEE)提供了强大的工具和功能,使得对遥感数据进行高效处理和分析成为可能。其中,计算植被状况指数(VCI)和植被健康指数(VHI)是遥感领域中的重要应用之一。本文将介绍如何使用GEE计算VCI和VHI,并解释这些指数在遥感分析中的重要性。
植被状况指数(VCI)和植被健康指数(VHI)简介
植被状况指数(VCI)是一种用于评估当前植被健康状况的指数,其基本原理是将当前时段的归一化差异植被指数(NDVI)与历史时段的最小值和最大值进行比较。VCI通过将NDVI值与历史范围进行归一化,从而反映出植被当前的状况相对于历史情况的位置。这有助于区分天气变化对NDVI的影响与植被自身生长状态的影响。
植被健康指数(VHI)则是植被状况指数(VCI)与温度状态指数(TCI)的加权平均。温度状态指数(TCI)反映了地表温度对植被生长的影响,结合VCI,可以更全面地评估植被的健康状况。
在接下来的部分,我们将介绍如何使用GEE计算VCI和VHI,并展示这些指数在遥感数据分析中的应用。
代码实现
加载数据部分代码引用生态遥感监测笔记
Google Earth Engine(GEE)计算长时序的月VCI和TCI_计算植被状况指数与温度状况指数-CSDN博客
设置研究区
首先,使用ee.FeatureCollection()获取研究区范围
接着,调用Map.centerObject()
函数,将地图的视角移动到感兴趣区域,设置缩放级别
然后,设置图层上显示的研究区包络线,,边界线的颜色为红色("FF0000"),填充颜色为红色的透明度为0.5的色值("FF000088"),线宽为1.5像素。
最后,将研究区包络线添加到地图上
var roi = ee.FeatureCollection("projects/ee-dxtgchrvhffge47576/assets/henanArea");
Map.centerObject(roi, 7);
var styling = {color: "FF0000", fillColor: "FF000088", width: 1.5};
Map.addLayer(roi.style(styling), {}, "geometry");
加载数据
-
首先,定义了起始年份(startYear)和结束年份(endYear),并将它们转换为ee.Date类型的对象。
-
然后,通过ee.ImageCollection()函数加载了MODIS数据集中的NDVI(MOD13Q1)和LST(MOD11A2)图像集合。
-
使用filterDate()方法将NDVI和LST图像集合中的图像筛选出指定时间范围内的图像。
-
使用select()方法选择NDVI和LST图像集合中的相应波段("NDVI"和"LST_Day_1km")。
-
使用ee.Algorithms.If()方法检查NDVI和LST图像集合是否为空。如果为空,则创建一个包含全零值的图像集合;如果不为空,则保持原始图像集合不变。
-
最后,将处理后的NDVI和LST图像集合分别赋值给Coll_NDVI和Coll_LST变量。
var startYear = 2012;
var endYear = 2022;
var startDate = ee.Date.fromYMD(startYear, 1, 1);
var endDate = ee.Date.fromYMD(endYear, 12, 31);
//添加MODIS植被指数16天全球250米
var Coll_NDVI = ee.ImageCollection("MODIS/006/MOD13Q1")
//MODIS/006/MOD13A1
var Coll_LST = ee.ImageCollection("MODIS/006/MOD11A2")
//MODIS/006/MOD11A1
Coll_NDVI = Coll_NDVI.filterDate(startDate, endDate).select("NDVI");
Coll_NDVI = ee.ImageCollection(ee.Algorithms.If(Coll_NDVI.size().eq(0),ee.ImageCollection(ee.Image(0).selfMask().rename('NDVI')),Coll_NDVI));
Coll_LST = Coll_LST.filterDate(startDate, endDate).select("LST_Day_1km");
Coll_LST = ee.ImageCollection(ee.Algorithms.If(Coll_LST.size().eq(0),ee.ImageCollection(ee.Image(0).selfMask().rename('LST_Day_1km')),Coll_LST));
数据预处理
- 对NDVI图像集合进行了比例缩放
- 对LST图像集合进行了单位转换,将其从原始单位(0.02)转换为摄氏度(℃)。
- 使用print()函数将处理后的NDVI和LST图像集合打印输出到控制台,以便查看处理结果。
var Coll_NDVI = Coll_NDVI.map(function(img) {return img.clip(roi).divide(10000).float().set("system:time_start", img.get("system:time_start")); // keep time info});var Coll_LST = Coll_LST.map(function(img) {return img.clip(roi).multiply(0.02).subtract(273.15).float().set("system:time_start", img.get("system:time_start")); // keep time info
});print(Coll_NDVI);
print(Coll_LST);
计算最大最小值与显示
// 获取Coll_NDVI和Coll_LST集合的第一个影像
var first_NDVI = Coll_NDVI.first();
var first_LST = Coll_LST.first();// 在地图上显示第一个NDVI影像
Map.addLayer(first_NDVI, {min: -0.2, max: 1, palette: ['blue', 'white', 'green']}, 'First NDVI');// 在地图上显示第一个LST影像
Map.addLayer(first_LST, {min:-10, max:20 ,palette: ['blue', 'green', 'red']}, 'First LST');
// 计算十年间每个像素点的NDVI最大值和最小值
var ndviMinMax = Coll_NDVI.reduce(ee.Reducer.minMax());
var lstMinMax = Coll_LST.reduce(ee.Reducer.minMax());
// 裁剪NDVI最大值和最小值图层
var clippedNDVIMin = ndviMinMax.select('NDVI_min');
var clippedNDVIMax = ndviMinMax.select('NDVI_max');
var clippedLSTMin = lstMinMax.select('LST_Day_1km_min');
var clippedLSTMax = lstMinMax.select('LST_Day_1km_max');
// 可视化裁剪后的NDVI最大值和最小值
Map.addLayer(clippedNDVIMin, {min:-0.2, max: 0.5 ,palette: ['blue', 'white', 'green']}, 'Clipped NDVI_min');
Map.addLayer(clippedNDVIMax, {min: -0.2, max:1, palette: ['blue', 'white', 'green']}, 'Clipped NDVI_max');
Map.addLayer(clippedLSTMin, {min:-10, max: 20 ,palette: ['blue', 'white', 'red']}, 'Clipped lst_min');
Map.addLayer(clippedLSTMax, {min: 30, max:50, palette: ['blue', 'white', 'red']}, 'Clipped lst_max');
计算VCI&TCI
var newStartDate = ee.Date.fromYMD(2022, 1, 1);
var newEndDate = ee.Date.fromYMD(2022, 12, 31);
var newNDVI = Coll_NDVI.filterDate(newStartDate, newEndDate);
var newLST = Coll_LST.filterDate(newStartDate, newEndDate);
var clippedNDVI = newNDVI.mean();
var clippedLST = newLST.mean();// 计算VCI
var vci = newNDVI.map(function(image) {return image.subtract(ndviMinMax.select('NDVI_min')).divide(ndviMinMax.select('NDVI_max').subtract(ndviMinMax.select('NDVI_min'))).rename('VCI').copyProperties(image, ['system:time_start']);
});
// 计算TCI
var tci = newLST.map(function(image) {return image.subtract(lstMinMax.select('LST_Day_1km_min')).divide(lstMinMax.select('LST_Day_1km_max').subtract(lstMinMax.select('LST_Day_1km_min'))).rename('TCI').copyProperties(image, ['system:time_start']);
});
计算VHI
// 将具有相同时间戳的VCI和TCI影像合并到一个集合中
var vci_tci_merged = ee.Join.inner().apply({primary: vci,secondary: tci,condition: ee.Filter.equals({leftField: 'system:time_start',rightField: 'system:time_start'})
});// 将结果转换为 ImageCollection
var vci_tci_merged_collection = ee.ImageCollection(vci_tci_merged.map(function(feature) {var vci_image = ee.Image(feature.get('primary'));var tci_image = ee.Image(feature.get('secondary'));return vci_image.addBands(tci_image);
}));// 计算 VHI
var vhi_collection = vci_tci_merged_collection.map(function(image) {var vci_image = image.select('VCI');var tci_image = image.select('TCI');var vhi_image = tci_image.multiply(0.5).add(vci_image.multiply(0.5)).rename('VHI');return vhi_image.set('system:time_start', image.get('system:time_start'));
});
显示VCI、VHI、TCI
// 查看VCI、TCI、VHI第一个layer
var vci_first = vci.reduce(ee.Reducer.first());
var tci_first = tci.reduce(ee.Reducer.first());
var vhi_first = vhi_collection.reduce(ee.Reducer.first());
Map.addLayer(vci_first, {min:0, max:1 ,palette: ['blue', 'white', 'green']}, 'VCI');
Map.addLayer(tci_first, {min:0, max:0.5 ,palette: ['green', 'white', 'red']}, 'TCI');
Map.addLayer(vhi_first, {min:0, max:0.5 ,palette: ['blue', 'white', 'green']}, 'VHI');
导出数据
均值数据导出
Export.image.toDrive({image: clippedVCI.toFloat(),description: 'VCI',folder: 'GEE_exports',fileNamePrefix: 'VCI',region: roi,scale: 250,fileFormat: 'GeoTIFF',formatOptions: {cloudOptimized: true}
});
Export.image.toDrive({image: clippedVHI.toFloat(),description: 'VHI',folder: 'GEE_exports',fileNamePrefix: 'VHI',region: roi,scale: 250,fileFormat: 'GeoTIFF',formatOptions: {cloudOptimized: true}
});
这篇关于GEE计算VCI(植被状况指数)及VHI(植被健康指数)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!