目录
简介
利用2001-2024年的MODIS数据长时序ndvi指数归一化后的结果分析,并加载时序图。
指数
NDVI指数(Normalized Difference Vegetation Index)是用来评估地表植被覆盖度和健康程度的指数。它通过计算红光和近红外光反射率的差异来衡量植被的光合作用活性和生长状况。NDVI值范围从-1到1,较高的值表示较高的植被覆盖度和健康程度。
VCI指数(Vegetation Condition Index)是衡量植被状况的指数。它是基于NDVI指数计算得出的,用来表征植被的生长和状况。VCI指数通常表达为百分比形式,数值越高表示植被状况越好,数值越低表示植被状况越差。
VCI指数是根据NDVI的变化来计算的,通常将一段时间(如一年)内的NDVI数据与长期平均值进行比较,得出植被状况指数。在农业和生态环境监测中,VCI指数被用来评估植被的退化状况、旱情监测以及预测植被的生长情况。
总的来说,NDVI指数用来衡量植被覆盖程度和健康程度,而VCI指数则是根据NDVI的变化计算得出的,用来评估植被的生长和状况。
数据
MODIS/061/MOD13A2数据是来自于MODIS(Moderate Resolution Imaging Spectroradiometer)遥感传感器的产品之一。MODIS是美国国家航空航天局(NASA)和美国国家环境信息中心(NEIC)联合研发的一款具有高空间分辨率和全球覆盖能力的遥感传感器。
MOD13A2数据是基于MODIS传感器观测到的地表植被指数(Vegetation Index,VI)数据集。它提供了有关地表植被覆盖度和健康状况的信息。MOD13A2数据的空间分辨率为500米,时间分辨率为16天。数据包括以下几个主要的植被指数:
-
植被指数(Vegetation Index,VI):包括了常用的NDVI(Normalized Difference Vegetation Index)、EVI(Enhanced Vegetation Index)等。这些指数用于评估植被的光合活性和健康状况,反映了地表植被的覆盖度和生长状态。
-
植被覆盖度(Fractional Vegetation Cover,FVC):表示地表被植被覆盖的比例,可用于监测植被覆盖变化和评估土地利用。
-
植被生长指标(Vegetation Growth Index,VGI):用于评估地表植被的生长情况,根据植被指数的变化来反映植被的生长速率和季节变化。
MOD13A2数据的应用广泛,包括农业监测、水资源管理、气候变化研究、生态环境监测等。通过分析MOD13A2数据,可以获得关于地表植被的信息,为决策制定和资源管理提供科学依据。
代码
var feature = ee.FeatureCollection("FAO/GAUL/2015/level0")
var point = /* color: #98ff00 */ee.Geometry.Point([-89.8212566433932, 40.15005408150289]);
var roi = feature.filterBounds(point);
Map.centerObject(roi)
Map.addLayer(roi)
// define start and end time
var time_start = '2001', time_end = '2003'
// call modis ndvi images
var ndvi = ee.ImageCollection("MODIS/061/MOD13A2")
.select(['NDVI'])
.filterDate(time_start, time_end);
// clculate the vci
// vegetation condition index
// vci = ((ndvi - min)/(max - min)) * 100
var ndvi_min = ndvi.min().multiply(0.0001);
var ndvi_max = ndvi.max().multiply(0.0001);
var vci = ndvi.map(function(img){
var band = img.multiply(0.0001);
var index = band.expression('((ndvi - min)/(max - min))*100.0',{
'ndvi': band, 'min': ndvi_min, 'max': ndvi_max
}).rename('vci');
return index
.copyProperties(img, ['system:time_start','system:time_end'])
});
// drought mapping using vci
var vci_median = vci.median();
Map.addLayer(vci_median.clip(roi),[],'vci_median',false)
// histogram
print(
ui.Chart.image.histogram(vci_median, roi, 1000)
)
// vci classification
// making a constant image
var cons = ee.Image.constant(0);
// define classes
var extreme = cons.where(vci_median.gte(0).and(vci_median.lt(10)), 1);
var severe = extreme.where(vci_median.gte(10).and(vci_median.lt(20)), 2);
var moderate = severe.where(vci_median.gte(20).and(vci_median.lt(30)), 3);
var light = moderate.where(vci_median.gte(30).and(vci_median.lt(40)), 4);
var no1 = light.where(vci_median.gte(40).and(vci_median.lt(60)), 5);
var no2 = no1.where(vci_median.gte(60).and(vci_median.lt(80)), 6);
var no3 = no2.where(vci_median.gte(80), 7);
Map.addLayer(moderate.clip(roi),{min:1, max: 7},'drought_map',false)
// vci classification for each date
var time_start = '2001', time_end = '2024'
var ndvi2 = ee.ImageCollection("MODIS/061/MOD13A2")
.select(['NDVI'])
.filterDate(time_start, time_end);
var ndvi_min2 = ndvi2.min().multiply(0.0001);
var ndvi_max2 = ndvi2.max().multiply(0.0001);
var vci2 = ndvi2.map(function(img){
var band = img.multiply(0.0001);
var index = band.expression('((ndvi - min)/(max - min))*100.0',{
'ndvi': band, 'min': ndvi_min2, 'max': ndvi_max2
}).rename('vci');
return index
.copyProperties(img, ['system:time_start','system:time_end'])
});
var vci_class = vci2.map(function(img){
var cons = ee.Image.constant(0);
var extreme = cons.where(vci_median.gte(0).and(vci_median.lt(10)), 1);
var severe = extreme.where(vci_median.gte(10).and(vci_median.lt(20)), 2);
var moderate = severe.where(vci_median.gte(20).and(vci_median.lt(30)), 3);
var light = moderate.where(vci_median.gte(30).and(vci_median.lt(40)), 4);
var no1 = light.where(vci_median.gte(40).and(vci_median.lt(60)), 5);
var no2 = no1.where(vci_median.gte(60).and(vci_median.lt(80)), 6);
var no3 = no2.where(vci_median.gte(80), 7);
return no3
.copyProperties(img, img.propertyNames())
});
var vci_map = vci_class.mode();
Map.addLayer(vci_map.clip(roi),{palette: ['black','brown','red','orange','yellow', 'lightgreen','darkgreen'],
min: 1, max: 7},'vci_mode', false)
Export.image.toDrive({
image: vci_map.clip(roi),
description: 'vci_map',
region: roi,
maxPixels: 1e13,
crs: 'EPSG:4326',
folder: 'drought',
scale: 1000
})
// drought area calculation
var drought_area = (ee.Image.pixelArea().divide(1e6)).addBands(vci_map);
print(
ui.Chart.image.byClass(drought_area, 'constant',
roi, ee.Reducer.sum(), 1000, ['nan','extreme drought','severe drought','moderate drought','light drought','no drought1','nodrought2','no drought3'])
)