基于 GEE 利用 MODIS 数据创建归一化植被指数 NDVI 的时空变化图像

目录

1 代码解析

1.1 数据加载与预处理

1.2 影像裁剪与可视化​

1.3 生成动画缩略图​

1.4 创建图例面板​

2 完整代码

3 运行结果


在地理空间分析领域,归一化植被指数(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 运行结果

归一化植被指数 NDVI 的时空变化图像
NDVI图例

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值