基于 Google Earth Engine 的北京市植被 NDVI 时间序列分析

GEEer成长日记三:Landsat8_NDVI产品逐月时间序列分析 Landsat_NDVI产品时间序列分析 阅读详情

一、引言

植被归一化差异指数(NDVI)是衡量植被生长状况和覆盖度的重要指标。通过分析 NDVI 的时间序列变化,可以了解植被的季节性和年际变化规律,对于生态环境监测、农业生产管理等领域具有重要意义。Google Earth Engine(GEE)是一个强大的地理空间分析平台,提供了丰富的卫星影像数据和高效的计算能力,能够方便地进行 NDVI 时间序列分析。本文将详细介绍如何使用 GEE 对北京市的植被 NDVI 进行时间序列分析,并生成可视化图表和导出数据。

二、代码实现

2.1 步骤 1:定义区域和时间范围

// ------------------------- 1. 定义区域和时间范围 ------------------------- //
// 定义研究区域,以北京市中心坐标 [116.3975, 39.9087] 为中心,创建一个半径为 10 公里的缓冲区
var roi = ee.Geometry.Point([116.3975, 39.9087]).buffer(10000); 

// 将地图中心定位到研究区域,并设置缩放级别为 10
Map.centerObject(roi, 10); 

// 在地图上添加研究区域的可视化图层,颜色设置为红色,标签为 'ROI'
Map.addLayer(roi, {color:'red'}, 'ROI');

// 定义数据获取的时间范围,从 2018 年 1 月 1 日到 2023 年 12 月 31 日
var startDate = '2018-01-01';
var endDate = '2023-12-31';

此步骤确定了研究区域和数据的时间范围。通过创建缓冲区定义研究区域,方便后续筛选符合条件的影像数据。

2.2 步骤 2:加载 Landsat 8 数据并去云

// ------------------------- 2. 加载Landsat 8数据并去云 ------------------------- //
// 从 GEE 的影像集合中加载 Landsat 8 的二级数据产品
var landsat = ee.ImageCollection('LANDSAT/LC08/C02/T1_L2')
  // 筛选位于研究区域内的影像
  .filterBounds(roi)
  // 筛选时间范围内的影像
  .filterDate(startDate, endDate)
  // 过滤云量大于 20% 的影像
  .filter(ee.Filter.lt('CLOUD_COVER', 20)); 

// 自定义云掩膜函数,使用 QA 波段去除云和阴影
var cloudMask = function(image) {
  // 选择 QA 波段
  var qa = image.select('QA_PIXEL');
  // 定义云掩膜位
  var cloudBitMask = 1 << 3; 
  // 定义阴影掩膜位
  var shadowBitMask = 1 << 4; 
  // 创建掩膜,去除云和阴影
  var mask = qa.bitwiseAnd(cloudBitMask).eq(0)
    .and(qa.bitwiseAnd(shadowBitMask).eq(0));
  // 应用掩膜并裁剪到研究区域
  return image.updateMask(mask).clip(roi);
};

// 对影像集合应用云掩膜
var landsatFiltered = landsat.map(cloudMask);

这里从 GEE 中加载 Landsat 8 数据,并通过云量筛选和自定义云掩膜函数去除云和阴影的影响,提高数据质量。

2.3 步骤 3:计算 NDVI 并生成时间序列

// ------------------------- 3. 计算NDVI并生成时间序列 ------------------------- //
// 定义 NDVI 计算函数
var calculateNDVI = function(image) {
  // 计算 NDVI
  var ndvi = image.normalizedDifference(['SR_B5', 'SR_B4']).rename('NDVI');
  // 将 NDVI 波段添加到影像中,并设置日期属性
  return image.addBands(ndvi)
    .set('date', image.date().format('YYYY-MM-dd')); 
};

// 对去云后的影像集合逐景计算 NDVI
var ndviCollection = landsatFiltered.map(calculateNDVI);

此步骤定义了 NDVI 计算函数,并对去云后的影像集合逐景计算 NDVI,同时为每个影像添加日期属性,方便后续生成时间序列。

2.4 步骤 4:生成时间序列图表

// ------------------------- 4. 生成时间序列图表 ------------------------- //
// 生成时间序列图表(区域均值)
var chart = ui.Chart.image.seriesByRegion({
  // 选择 NDVI 波段的影像集合
  imageCollection: ndviCollection.select('NDVI'),
  // 统计研究区域内的均值
  regions: roi, 
  // 使用均值统计器
  reducer: ee.Reducer.mean(),
  // Landsat 分辨率
  scale: 30, 
  // X 轴为日期
  xProperty: 'date' 
})
// 设置图表类型为折线图
.setChartType('LineChart') 
// 设置图表选项
.setOptions({
  // 图表标题
  title: '北京市植被 NDVI 时间序列(2018 - 2023)',
  // Y 轴标题和范围
  vAxis: {title: 'NDVI', minValue: 0, maxValue: 1},
  // X 轴标题和日期格式
  hAxis: {title: '日期', format: 'YYYY-MM'},
  // 线条宽度
  lineWidth: 2,
  // 线条颜色
  colors: ['green']
});

// 打印图表
print(chart);

通过 ui.Chart.image.seriesByRegion 函数生成 NDVI 时间序列的折线图,展示北京市植被 NDVI 在 2018 - 2023 年的变化情况。

2.5 步骤 5:导出图表数据到 Google Drive

// ------------------------- 5. 可选:导出图表数据到Google Drive ------------------------- //
// 将时间序列数据导出为 CSV(用于进一步分析)
var exportTable = ndviCollection.select(['NDVI', 'date'])
  .map(function(image) {
    // 计算研究区域内的 NDVI 均值
    var mean = image.reduceRegion({
      reducer: ee.Reducer.mean(),
      geometry: roi,
      scale: 30
    });
    // 创建特征,包含日期和 NDVI 均值
    return ee.Feature(null, {
      'date': image.get('date'),
      'NDVI': mean.get('NDVI')
    });
  });

// 导出数据到 Google Drive
Export.table.toDrive({
  collection: exportTable,
  description: 'NDVI_TimeSeries_Beijing',
  folder: 'GEE_Exports',
  fileFormat: 'CSV'
});

print('代码执行完成!图表已生成,数据导出至 Google Drive。');

最后,将 NDVI 时间序列数据导出为 CSV 文件到 Google Drive,方便后续进行更深入的分析。

三、完整代码

// ------------------------- 1. 定义区域和时间范围 ------------------------- //
var roi = ee.Geometry.Point([116.3975, 39.9087]).buffer(10000); // 北京市中心10公里缓冲区
Map.centerObject(roi, 10); // 地图居中显示
Map.addLayer(roi, {color: 'red'}, 'ROI');

// 时间范围(示例:过去5年)
var startDate = '2018-01-01';
var endDate = '2023-12-31';

// ------------------------- 2. 加载Landsat 8数据并去云 ------------------------- //
var landsat = ee.ImageCollection('LANDSAT/LC08/C02/T1_L2')
  .filterBounds(roi)
  .filterDate(startDate, endDate)
  .filter(ee.Filter.lt('CLOUD_COVER', 20)); // 过滤云量>20%的图像

// 自定义云掩膜函数(使用QA波段去除云和阴影)
var cloudMask = function(image) {
  var qa = image.select('QA_PIXEL');
  var cloudBitMask = 1 << 3; // 云掩膜位
  var shadowBitMask = 1 << 4; // 阴影掩膜位
  var mask = qa.bitwiseAnd(cloudBitMask).eq(0)
    .and(qa.bitwiseAnd(shadowBitMask).eq(0));
  return image.updateMask(mask).clip(roi);
};

// 应用云掩膜并选择NDVI波段
var landsatFiltered = landsat.map(cloudMask);

// ------------------------- 3. 计算NDVI并生成时间序列 ------------------------- //
// 定义NDVI计算函数
var calculateNDVI = function(image) {
  var ndvi = image.normalizedDifference(['SR_B5', 'SR_B4']).rename('NDVI');
  return image.addBands(ndvi)
    .set('date', image.date().format('YYYY-MM-dd')); // 添加日期属性
};

// 对影像集合逐景计算NDVI
var ndviCollection = landsatFiltered.map(calculateNDVI);

// ------------------------- 4. 生成时间序列图表 ------------------------- //
// 生成时间序列图表(区域均值)
var chart = ui.Chart.image.seriesByRegion({
  imageCollection: ndviCollection.select('NDVI'),
  regions: roi, // 统计ROI范围内的均值
  reducer: ee.Reducer.mean(),
  scale: 30, // Landsat分辨率
  xProperty: 'date' // X轴为日期
})
.setChartType('LineChart') // 折线图
.setOptions({
  title: '北京市植被NDVI时间序列(2018-2023)',
  vAxis: {title: 'NDVI', minValue: 0, maxValue: 1},
  hAxis: {title: '日期', format: 'YYYY-MM'},
  lineWidth: 2,
  colors: ['green']
});

// 打印图表
print(chart);

// ------------------------- 5. 可选:导出图表数据到Google Drive ------------------------- //
// 将时间序列数据导出为CSV(用于进一步分析)
var exportTable = ndviCollection.select(['NDVI', 'date'])
  .map(function(image) {
    var mean = image.reduceRegion({
      reducer: ee.Reducer.mean(),
      geometry: roi,
      scale: 30
    });
    return ee.Feature(null, {
      'date': image.get('date'),
      'NDVI': mean.get('NDVI')
    });
  });

Export.table.toDrive({
  collection: exportTable,
  description: 'NDVI_TimeSeries_Beijing',
  folder: 'GEE_Exports',
  fileFormat: 'CSV'
});

print('代码执行完成!图表已生成,数据导出至Google Drive。');

四、结果展示:

GEE数据集高效检索与实战应用指南:从官方Catalog到个性化工作流 遥感数据是地理空间分析的基础,其核心价值在于将原始观测转化为可用的信息。Google Earth Engine(GEE)作为领先的云平台,集成了海量地理空间数据集,其关键在于如何高效检索与正确应用。理解数据集的波段信息、时空属性和预处理级别是技术落地的核心。本文聚焦于构建系统性的数据检索方法论,通过结合官方Catalog的权威性与社区资源的实战经验,帮助用户精准定位如Landsat、Sentinel-2等核心数据集。掌握分层筛选策略与Code Editor即时验证技巧,能显著提升科研与工程效率,最终将数据价 阅读详情

相关推荐

从USGS EarthExplorer免费获取近30年历史遥感影像TIFF数据全攻略

遥感影像数据是地理信息系统(GIS)和空间分析的基础,其核心原理是通过卫星或航空传感器记录地球表面的电磁波信息,形成带有地理坐标的栅格数据。这类数据的技术价值在于能够进行长时间序列的定量分析,例如监测土地利用变化、评估环境演变。在众多应用场景中,获取高质量、长时间序列的历史影像对于城市规划回溯、生态环境研究至关重要。针对这一需求,USGS EarthExplorer平台提供了覆盖全球、时间跨度长达数十年的Landsat等系列卫星影像档案,用户可以通过其检索系统,依据地理位置、时间范围和云量等条件筛选数据,并

weixin_34195546的博客 395

PIE-engine 教程 ——影像集合的使用map()映射函数(北京市NDVI计算)

在PIE中并没有像GEE中那种集成好的归一化植被指数的计算函数,所以这里我们只能通过函数计算表达式和map的方式来进行NDVI的计算。在地图上添加图层,图层可以是Image,可以是FeatureCollection,返回图层唯一的ID。对影像集合进行指定空间范围过滤,然后返回过滤后的影像集合。对影像集合进行指定日期范围过滤,然后返回过滤后的影像集合。要添加的图层对象,可以是影像或者矢量数据。设置地图以图形为中心显示。设置地图以图形为中心显示。影像对象或者矢量对象。影像对象或者矢量对象。

此星光明博客 1900

时间序列中最高的25%的NDVI值及其平均影像分析

在遥感图像处理和农业监测中,归一化植被指数(Normalized Difference Vegetation Index,简称NDVI)是一项重要的指标,用于评估植被覆盖的状况和生长活力。本文将介绍如何计算时间序列中最高的25%的NDVI值,并获取对应的平均影像。首先,我们需要一系列的NDVI影像数据,这些数据可以通过遥感卫星或无人机获取,并使用合适的算法计算得出。首先,我们需要找到最高的25%的NDVI值所对应的百分位数。接下来,我们将使用Python编程语言来计算时间序列中最高的25%的NDVI值。

EbCoder的博客 204

基于 GEE 的研究区 1986-2024 年年均归一化植被指数 NDVI 时间序列分析

基于 GEE 的研究区 1986-2024 年年均归一化植被指数 NDVI 时间序列分析。

@HNUSTer的博客 1484

探索Google Earth Engine:超级全的NDVI时间序列分析

基于GEE的NDVI时间序列分析

Promising_GEO的博客 3533

Open Earth Engine Library (OEEL)——Savitzky-Golay滤波拟合法进行NDVI波段拟合(北京市为例)

Savitzky-Golay滤波拟合法是根据NDVI时间序列曲线的平均趋势,确定合适的滤波参数,用多项式实现滑动窗内的最小二乘拟合;利用Savitzky-Golay滤波方法(基于最小二乘的卷积拟合算法)进行迭代运算,模拟整个NDVI时序数据获得长期变化趋势。中文名Savitzky-Golay滤波拟合法出 处遥感应用分析原理与方法非对称高斯函数拟合法是使用分段高斯函数(曲线)组合来模拟植被季相生长(物候)规律、一个组合代表一次植被盛衰过程,最后通过平滑连接各高斯拟合曲线,实现时间序列重建。具体过程包括:

此星光明博客 1714

Google Earth Engine(GEE)基于机器学习进行遥感地物分类-从数据到结果(水体 / 植被识别为例,包含随机森林、SVM、CART、GTB等模型)试读

本文提供了一份基于Google Earth Engine(GEE)平台的遥感地物分类实操指南,以北京市为研究区,使用Landsat8 OLI影像,完整展示了从数据准备到分类结果导出的全流程。教程详细介绍了遥感数据筛选(时间、云量、研究区)、预处理(比例换算、去云)、光谱指数构建(NDVI/MNDWI等)、标签数据标注/导入方法,以及随机森林、SVM等机器学习模型的训练与评估。重点解析了混淆矩阵、总体精度、Kappa系数等精度指标的计算逻辑和解读方法,并通过可视化对比验证分类效果。教程注重实用性和可复用性,提

lwbCUMT的博客 1261

Google Earth Engine:使用MODIS(MYD13Q1.061)数据进行2002-至今北京市逐年最大值合成的NDVI和EVI数据下载

MYD13Q1 V6.1 产品按像素提供植被指数 (VI) 值。主要有两个植被层。第一个是归一化植被指数(NDVI),它是现有的美国国家海洋和大气管理局-高级甚高分辨率辐射计(NOAA-AVHRR)得出的 NDVI 的连续性指数。第二个植被层是增强植被指数(EVI),它能最大限度地减少冠层背景变化,并保持对茂密植被条件的敏感性。增强植被指数还使用蓝色波段去除烟雾和亚像素薄云造成的残余大气污染。

此星光明博客 700

别再手动算NDVI了!用GEE处理Landsat8/9数据,5分钟搞定区域植被指数统计

本文介绍如何利用Google Earth Engine(GEE)快速处理Landsat8/9数据,5分钟内完成区域植被指数(NDVI)统计。通过云端计算和极简代码,大幅提升生态监测和农业评估效率,特别适合县域植被覆盖评估和农作物长势监测。

weixin_30443731的博客 184

Google Earth Engine(GEE)基于机器学习进行遥感地物分类-从数据到结果(水体 / 植被识别为例,随机森林、SVM、CART、GTB等模型)-遥感数据准备

本文介绍了基于Landsat8 OLI数据的遥感影像处理流程,以北京市2023年6-10月植被生长季为例。首先筛选云量<30%的37景影像,通过比例换算将整型数据还原为反射率浮点值,利用QA_PIXEL波段进行去云处理。随后构建NDVI(植被指数)、BSI(裸土指数)、LSWI(水分指数)和MNDWI(改进水体指数)四个光谱特征,增强地物区分度。最后采用中位数合成法生成研究区影像,并进行真彩色和指数可视化展示。该流程完整展示了从数据筛选、预处理到特征构建的关键步骤。

lwbCUMT的博客 105

Google Earth Engine(GEE)——绘制北京市监测地表水(归一化差值水指数 (NDWI))应用

管理水资源需要空间明确的知识,了解水在景观中的位置,以及它如何随时间变化。该实验室的目标是从空间绘制地表水的存在情况,并计算不同水体的淹没频率。 我们将在此练习中使用 Landsat 8 TOA 第 1 层集合 (LANDSAT/LC08/C01/T1_TOA)。 var L8 = ee.ImageCollection('LANDSAT/LC08/C01/T1_TOA'); // 设置时间 var startdate = ee.Date('2013-05-01'); var enddate = ee.

此星光明博客 333

GEE实战:5种最实用的Sentinel-2植被指数计算代码(附避坑指南)

本文详细介绍了在Google Earth Engine(GEE)平台上使用Sentinel-2数据计算5种实用植被指数(NDVI、EVI、SAVI、NDWI、GCVI)的代码实现,并提供避坑指南。内容涵盖数据加载、指数计算、可视化及常见问题解决方案,帮助科研人员和开发者高效开展植被监测与分析工作。

weixin_33734785的博客 187

北京市2000-2020年NDVI数据及各个区2000-2020年的NDVI平均值数据

MODIS产品采用年最大值合成法 北京市2000-2020年16个区的NDVI年平均值 excel表格形式

GEE实战:5分钟用Landsat影像批量计算NDVI、EVI等10个核心植被指数(附完整代码)

本文详细介绍了如何在Google Earth Engine(GEE)平台上利用Landsat影像快速批量计算NDVI、EVI等10个核心植被指数。通过完整的代码示例和分步指导,帮助用户5分钟内完成从数据加载、云掩膜处理到植被指数计算和结果导出的全流程,大幅提升遥感数据分析效率。

weixin_32267731的博客 105

基于MODIS数据近十年北京市植被指数变化分析

基于MODIS数据近十年北京市植被指数变化分析,党慧,袁涛,利用2003-2012年6、7、8月份的MODIS影像数据,以NDVI为研究对象,分别计算了北京市域各功能区的植被指数和大于0.1的NDVI差值指数,从时间�

使用mne包来对脑电数据进行预处理(一)

MNE(MNE-Python)是一个用于处理脑电(EEG)、磁图(MEG)和其他神经科学数据的Python库。它提供了丰富的功能,包括数据加载、预处理、分析和可视化,旨在帮助研究人员和神经科学家更轻松地进行脑电数据的处理和分析。在本文中,我们使用mne来对不同的格式的脑电数据集进行数据读取。

m0_71596228的博客 4303

保姆级教程:用Python和GEE免费下载处理Sentinel-2 L2A地表反射率数据(附代码)

本文提供了一份详细的Python和Google Earth Engine(GEE)教程,指导用户如何免费下载和处理Sentinel-2 L2A地表反射率数据。通过代码示例和步骤解析,帮助读者掌握从数据检索、预处理到可视化的全流程,特别适合遥感数据分析和科研应用。

weixin_30924239的博客 193

提取abaqus中节点集合的应力应变

节点是没有应力应变的,只有积分点才有,所以直接在odb文件里面用FieldOutput是整不出来的(结果是个空列表),只能用session这种让abaqus自己帮你处理。具体的代码需要根据自己操作的时候abaqus.rpy这个文件中代码的变化来更改。

蓝胖子的博客 4553

基于Landsat 1-8提取点或区域的覆盖度

植被覆盖度(fractional vegetation coverage)是一些生态水文过程模型的重要输入参数,本文的主要目的是提取年均覆盖度的时间序列,以约束生态水文模型。

weixin_44021581的博客 1218

扫地机器人:从仿真到决策,一个完整SLAM导航系统的自研之路

本文详细记录了从零开始自研扫地机器人SLAM导航系统的全过程,涵盖ROS-Gazebo仿真系统搭建、地图预处理优化、全覆盖规划算法迭代等关键技术。通过三次算法升级,最终实现92%的清洁效率,并分享DWA调参、状态机设计等实战经验,为开发者提供从仿真到落地的完整解决方案。

weixin_29053695的博客 352

iphone查看/private/var/mobile/Containers/Data/Application/文件

xcode查看iPhone的private/var/文件夹xcode连接iPhone真机选择app下载Containers文件夹到mac电脑中查看手机中下载的文件 使用xcode真机调试的时候,文件目录都是这种/private/var/mobile/Containers/Data/Application/FAEFDF4D-5CE4-474F-9C53-C19789DB59F6/tmp/ xcode连接iPhone真机 不需要越狱,使用xcode上连接iPhone,然后选择运行的app,选择window-&g

小手琴师的博客 101万+

基于 GEE 的 Landsat 8 影像归一化植被指数(NDVI)计算与植被覆盖度(FVC)反演

基于 GEE 的 Landsat 8 影像归一化植被指数(NDVI)计算与植被覆盖度(FVC)反演。

@HNUSTer的博客 1503

anaconda的conda国内加速镜像源(pytorch 快速安装)

最近清华源不太好使了,所以推荐中科大镜像源,如下 1.还原原始通道 conda config --remove-key channels 2.

qq_41719643的博客 2万+
上一篇: 基于 Google Earth Engine 的北京市中心区域地表温度反演
下一篇: 基于 Google Earth Engine 的南京江宁区土地利用分类(K-Means 聚类)
遥感AI实战
博客等级 码龄9年 1002粉丝 107原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

遥感AI实战

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值