【GEE实例操作】植被状况指数VCI与干旱检测--以河南省为例

1.全文代码

// 加载河南省边界数据
var heNan = ee.FeatureCollection('projects/ee-wu196552/assets/HeNan');

// 定义时间范围
var time_start = '2001', time_end = '2023';

// 加载MODIS NDVI数据集
var ndvi = ee.ImageCollection("MODIS/061/MOD13A2")
  .select(['NDVI'])
  .filterDate(time_start, time_end);

// 计算VCI
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']);
});

// 计算VCI中值
var vci_median = vci.median();
Map.addLayer(vci_median.clip(heNan), [], 'vci_median', false);

// 打印VCI直方图
print(ui.Chart.image.histogram(vci_median, heNan, 1000));

// VCI分类
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);

Map.addLayer(moderate.clip(heNan), {min: 1, max: 7}, 'drought_map', false);

// VCI时间序列分类
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']);
});

// 修正:vci_class 应使用 vci2 而不是 vci_median
var vci_class = vci2.map(function (img) {
  var vci_value = img.select('vci');
  return img.expression(
    'extreme + severe + moderate + light + no1 + no2 + no3',
    {
      'extreme': vci_value.gte(0).and(vci_value.lt(10)).multiply(1),
      'severe': vci_value.gte(10).and(vci_value.lt(20)).multiply(2),
      'moderate': vci_value.gte(20).and(vci_value.lt(30)).multiply(3),
      'light': vci_value.gte(30).and(vci_value.lt(40)).multiply(4),
      'no1': vci_value.gte(40).and(vci_value.lt(60)).multiply(5),
      'no2': vci_value.gte(60).and(vci_value.lt(80)).multiply(6),
      'no3': vci_value.gte(80).multiply(7)
    }
  ).rename('class');
});

var vci_map = vci_class.mode();

Map.addLayer(vci_map.clip(heNan), {
  palette: ['black', 'brown', 'red', 'orange', 'yellow', 'lightgreen', 'darkgreen'],
  min: 1,
  max: 7
}, 'vci_mode', false);

// 导出VCI分类图
Export.image.toDrive({
  image: vci_map.clip(heNan),
  description: 'vci_map_henan',
  region: heNan,
  maxPixels: 1e13,
  crs: 'EPSG:4326',
  folder: 'drought',
  scale: 1000
});

// 计算干旱面积
var drought_area = (ee.Image.pixelArea().divide(1e6)).addBands(vci_map);

print(ui.Chart.image.byClass(drought_area, 'class', heNan, ee.Reducer.sum(), 1000, ['nan', 'extreme drought', 'severe drought', 'moderate drought', 'light drought', 'no drought1', 'nodrought2', 'no drought3']));

这段代码的主要目的是利用MODIS卫星数据,基于NDVI(归一化植被指数)计算河南省的VCI(植被状况指数),以便评估从2001年到2024年的干旱情况。代码包括数据的预处理、VCI计算、干旱等级分类、结果可视化和干旱面积的计算。下面是代码的详细解读:

大概代码的主要目的是利用MODIS卫星数据,根据NDVI(归一化植被指数)计算省的VCI(植被状况指数),以便评估从2001年到2024年的干旱情况。代码包括数据的示意图、VCI计算、干旱等级分类、结果可视化和干旱面积的计算。下面是代码的

2.详细解读

var heNan = ee.FeatureCollection('projects/ee-wu196552/assets/HeNan');
var time_start = '2001', time_end = '2003';
var ndvi = ee.ImageCollection("MODIS/061/MOD13A2")
  .select(['NDVI'])
  .filterDate(time_start, time_end);

从MODIS的卫星影像库中加载NDVI(归一化植被指数)数据集,并选择与定义时间范围内的数据。MODIS/061/MOD13A2是MODIS第13层数据,提供16天合成的植被指数。 

计算VCI(植被状况指数)

var ndvi_min = ndvi.min().multiply(0.0001);
var ndvi_max = ndvi.max().multiply(0.0001);

计算NDVI的简单和顶峰,规定了其缩放(乘以0.0001),因为MODIS NDVI数据的原始值需要缩放到0到1之间。 

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']);
});

计算VCI:VCI公式为((NDVI - NDVI最小值) / (NDVI最大值 - NDVI最小值)) * 100,结果值范围为0到100。

  • VCI越低,表示干旱程度越低;VCI越低,表示植物生长状况较好。
  • copyProperties用于保留每个图像的时间信息。

var vci_median = vci.median();
Map.addLayer(vci_median.clip(heNan), [], 'vci_median', false);

计算时间范围内的VCI中值,将其修剪至河南省边界内。在地图上显示VCI中值图层。 

print(ui.Chart.image.histogram(vci_median, heNan, 1000));
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);

根据VCI值将区域划分为7个干旱等级:

  • 1: 极端干旱 (VCI 0-10)
  • 2: 严重干旱 (VCI 10-20)
  • 3:中度干旱(VCI 20-30)
  • 4:轻度干旱(VCI 30-40)
  • 5: 无干旱1 (VCI 40-60)
  • 6: 无干旱2 (VCI 60-80)
  • 7:无干旱3(VCI>80)

添加抗旱措施

Map.addLayer(moderate.clip(heNan), {min: 1, max: 7}, 'drought_map', false);
  • 将干旱结果图层添加到地图上,颜色从黑色到绿色表示干旱程度从严重到轻微。

 跨越2001-2024的时间序列

var time_start = '2001', time_end = '2024';
var ndvi2 = ee.ImageCollection("MODIS/061/MOD13A2")
  .select(['NDVI'])
  .filterDate(time_start, time_end);

延长时间范围至2001年至2024年,重新加载NDVI数据。

 重新计算VCI并分类

var vci_class = vci2.map(function (img) {
  var vci_value = img.select('vci');
  return img.expression(
    'extreme + severe + moderate + light + no1 + no2 + no3',
    {
      'extreme': vci_value.gte(0).and(vci_value.lt(10)).multiply(1),
      'severe': vci_value.gte(10).and(vci_value.lt(20)).multiply(2),
      'moderate': vci_value.gte(20).and(vci_value.lt(30)).multiply(3),
      'light': vci_value.gte(30).and(vci_value.lt(40)).multiply(4),
      'no1': vci_value.gte(40).and(vci_value.lt(60)).multiply(5),
      'no2': vci_value.gte(60).and(vci_value.lt(80)).multiply(6),
      'no3': vci_value.gte(80).multiply(7)
    }
  ).rename('class');
});

再次基于新的时间范围(2001-2024年)计算VCI,并对每个计算的VCI进行分类。

添加最终分类目标

var vci_map = vci_class.mode();
Map.addLayer(vci_map.clip(heNan), {
  palette: ['black', 'brown', 'red', 'orange', 'yellow', 'lightgreen', 'darkgreen'],
  min: 1,
  max: 7
}, 'vci_mode', false);

计算时间序列上的分类模式(最常见的干旱等级),将其重要性放在地图上。

Export.image.toDrive({
  image: vci_map.clip(heNan),
  description: 'vci_map_henan',
  region: heNan,
  maxPixels: 1e13,
  crs: 'EPSG:4326',
  folder: 'drought',
  scale: 1000
});

将分类后的VCI地图导出到Google Drive中,以便进一步分析或展示。

计算干旱面积

var drought_area = (ee.Image.pixelArea().divide(1e6)).addBands(vci_map);
print(ui.Chart.image.byClass(drought_area, 'class', heNan, ee.Reducer.sum(), 1000, ['nan', 'extreme drought', 'severe drought', 'moderate drought', 'light drought', 'no drought1', 'nodrought2', 'no drought3']));
  • 使用pixelArea函数计算每个干旱等级对应面积的(单位为弱势),并通过直方图显示不同等级干旱的区域大小。

3.总结

主要代码用于评估河南省2001年至2024年的干旱情况,根据MODIS卫星图像的NDVI数据,计算并分类VCI,最终生成了时间序列的干旱等级图,并计算了各干旱等级的面积。

结果分析:1,图层显示:颜色从黑色到绿色表示干旱程度从严重到轻微。颜色越深代表越严重

 2.干旱等级时间序列图 

  • 1: 极端干旱 (VCI 0-10)
  • 2: 严重干旱 (VCI 10-20)
  • 3:中度干旱(VCI 20-30)
  • 4:轻度干旱(VCI 30-40)
  • 5: 无干旱1 (VCI 40-60)
  • 6: 无干旱2 (VCI 60-80)
  • 7:无干旱3(VCI>80)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值