基于 GEE 的 Landsat 9 数据实现 11 种植被指数批量计算与导出

目录

一、初始化配置:影像定位与缩放

二、云层掩膜函数:去除影像噪声

三、植被指数计算函数:核心分析模块

四、主流程:影像集加载与处理链

[五、批量导出:植被指数影像导出到 Google Drive](#五、批量导出:植被指数影像导出到 Google Drive)

六、代码设计亮点

七、适用场景与注意事项

八、运行结果


若觉得代码对您的研究 / 项目有帮助,欢迎点击打赏支持!需要完整代码的朋友,打赏后可在后台私信(复制文章标题发给我),我会尽快发您完整可运行代码,感谢支持!

本代码基于 Google Earth Engine(GEE)平台,针对 Landsat 9 卫星影像,实现了云层掩膜去噪11 种常用植被指数计算影像时间序列平均批量导出到 Google Drive的完整工作流。核心应用场景为 2024 年生长季(5-9 月)特定地理区域的植被生长状况监测,输出的植被指数可用于生态环境评估、农业长势分析等研究。
植被指数、计算公式

  • NDVI:归一化植被指数
  • GNDVI:绿度归一化植被指数
  • EVI:增强型植被指数
  • EVI2:双波段增强型植被指数
  • DVI:差值植被指数
  • GDVI:绿度差值植被指数
  • RVI:比值植被指数
  • SAVI:土壤调整植被指数
  • OSAVI:优化土壤调整植被指数
  • MSAVI:修正土壤调整植被指数
  • NDPI:归一化色素指数

一、初始化配置:影像定位与缩放

javascript 复制代码
Map.centerObject(geometry, 8);
  • 功能 :将 GEE 地图界面的中心定位到目标地理区域(geometry为预设的矢量边界,如研究区 shp 转译的 GEE 对象),并设置地图缩放级别为 8(缩放级别范围 1-20,数值越大视角越近,空间细节越清晰)。
  • 作用:方便用户在 GEE 编辑器中直观查看研究区范围,验证影像筛选的准确性。

二、云层掩膜函数:去除影像噪声

Landsat 9 影像的QA_PIXEL波段为质量控制波段,通过该波段的比特位编码可判断像素是否为云、卷云等干扰信息,该函数核心是筛选出 "无云 + 无卷云" 的有效像素。

javascript 复制代码
function maskL9Clouds(image) {
  var qa = image.select('QA_PIXEL');
  // 云像素判断条件:同时满足无云(bit3=0)和无卷云(bit1=0)
  var cloud = qa.bitwiseAnd(1 << 3).eq(0)
                .and(qa.bitwiseAnd(1 << 1).eq(0));
  return image.updateMask(cloud);
}

qa.bitwiseAnd(1 << 3):对QA_PIXEL波段进行按位与运算,筛选出第 3 位(bit3)的信息(Landsat 9 编码规则中,bit3 代表 "云",1 代表有云,0 代表无云)。

.eq(0):保留 bit3 为 0 的像素(无云);同理,1 << 1对应 bit1(卷云),筛选无卷云像素。

updateMask(cloud):将筛选出的有效像素保留,云像素设为透明(掩膜去除),避免云层对植被指数计算的干扰。

三、植被指数计算函数:核心分析模块

该函数是代码核心,先对 Landsat 9 的表面反射率波段进行标准化处理,再基于不同波段组合计算 11 种植被指数,覆盖了常用的植被生长状况评价指标。

javascript 复制代码
function addVegetationIndices(image) {
  // 1. 波段缩放:Landsat 9官方反射率缩放参数
  var scaled = image.select([
    'SR_B2', 'SR_B3', 'SR_B4', 'SR_B5', 'SR_B6'
  ]).multiply(0.0000275).subtract(0.2);
  // 2. 波段提取:定义蓝、绿、红、近红外、短波红外1波段
  var blue = scaled.select('SR_B2'); // 蓝光波段
  var green = scaled.select('SR_B3'); // 绿光波段
  var red = scaled.select('SR_B4'); // 红光波段
  var nir = scaled.select('SR_B5'); // 近红外波段
  var swir1 = scaled.select('SR_B6'); // 短波红外1波段
  // 3. 植被指数计算(以核心指数为例)
  // 归一化植被指数(NDVI):最常用,反映植被覆盖度和长势
  var ndvi = nir.subtract(red).divide(nir.add(red)).rename('NDVI').clamp(-1, 1);
  // 增强植被指数(EVI):优化NDVI对高植被覆盖区饱和问题,引入蓝光波段校正大气影响
  var evi = image.expression(
    '2.5 * (NIR - RED) / (NIR + 6 * RED - 7.5 * BLUE + 1)',
    { NIR: nir, RED: red, BLUE: blue }
  ).rename('EVI').clamp(-1, 3);
  // 土壤调整植被指数(SAVI):适用于土壤背景影响较大的区域(如稀疏植被区)
  var savi = image.expression(
    '(1.5 * (NIR - RED)) / (NIR + RED + 0.5)',
    { NIR: nir, RED: red }
  ).rename('SAVI').clamp(-1, 1);
  // 其他指数(GNDVI、EVI2等)逻辑类似,均基于特定波段组合与数学模型
  // 4. 指数添加:将计算的11种指数作为新波段添加到原始影像
  return image.addBands([ndvi, gndvi, evi, ...]); // 省略部分指数
}
  • 波段缩放:Landsat 9 的表面反射率原始数据为整数(避免存储精度损失),需通过官方参数multiply(0.0000275).subtract(0.2)转换为实际反射率值(范围 0-1)。
  • 指数取值限制:使用clamp(min, max)限制指数范围(如 NDVI 经典范围 - 1~1),避免异常值影响分析结果。
  • 波段对应关系:Landsat 9 的SR_B2-SR_B6分别对应蓝、绿、红、近红外、短波红外 1 波段,是植被指数计算的核心数据源。

四、主流程:影像集加载与处理链

javascript 复制代码
var l9 = ee.ImageCollection('LANDSAT/LC09/C02/T1_L2')
  .filterBounds(geometry) // 按研究区边界筛选影像
  .filterDate('2024-05-01', '2024-09-30') // 筛选2024年生长季(5-9月)影像
  .map(maskL9Clouds) // 应用云层掩膜
  .map(addVegetationIndices); // 计算植被指数
  • 影像集加载:LANDSAT/LC09/C02/T1_L2是 GEE 平台上 Landsat 9 的 Level-2 级产品(经过大气校正、几何校正的表面反射率产品),可直接用于定量分析。
  • 时空筛选:filterBounds(geometry)确保只处理研究区内的影像,filterDate聚焦生长季(植被生长最活跃的时期,指数信号最强)。
  • 处理链应用:map()函数对影像集中的每一幅影像依次执行云层掩膜和植被指数计算,生成包含 11 种指数波段的处理后影像集。

五、批量导出:植被指数影像导出到 Google Drive

javascript 复制代码
var viNames = ['NDVI', 'GNDVI', 'EVI', ...]; // 11种指数名称列表
viNames.forEach(function(viName) {
  // 1. 时间平均:计算生长季内该指数的平均值(消除单幅影像的随机噪声)
  var viImage = l9.select(viName).mean().rename(viName);
  // 2. 导出配置
  Export.image.toDrive({
    image: viImage.clip(geometry), // 裁剪到研究区(去除冗余区域)
    description: 'LANDSAT_LC09_' + viName, // 导出任务描述
    fileNamePrefix: 'LANDSAT_LC09_' + viName, // 导出文件前缀
    folder: 'landsat9_vi', // Google Drive中的目标文件夹
    region: geometry, // 导出区域(与研究区一致)
    scale: 30, // 空间分辨率(Landsat 9原生分辨率:30米)
    crs: 'EPSG:4326', // 坐标系统(WGS84,全球通用地理坐标系)
    maxPixels: 1e13 // 最大像素数(支持大范围研究区导出,避免像素超限报错)
  });
});
  • 时间平均:对生长季内的多幅影像取平均值,可减少云残留、大气波动等随机误差,得到更稳定的植被指数空间分布产品。
  • 导出参数:
    • scale:30:保持与 Landsat 9 原生分辨率一致,避免重采样导致的信息损失。
    • crs: 'EPSG:4326':WGS84 坐标系是 GIS 领域通用坐标系,方便后续与其他数据叠加分析。
    • clip(geometry):仅导出研究区内的影像部分,减小文件体积,提高后续处理效率。

六、代码设计亮点

  • 模块化设计:将云层掩膜、指数计算、导出功能拆分为独立函数,代码结构清晰,便于维护和修改(如更换传感器时仅需调整掩膜函数的比特位参数)。
  • 批量处理 :通过forEach()遍历指数列表,实现 11 种指数的自动计算与导出,避免重复代码,提高效率。
  • 数据质量控制:包含云层掩膜、反射率标准化、指数取值限制三重质量控制,确保输出结果的可靠性。

七、适用场景与注意事项

适用场景:

  • 区域尺度植被覆盖度评估、农业长势监测、生态环境变化分析等。
  • 基于 Landsat 9 数据的长时间序列植被动态研究(需扩展时间范围筛选条件)。

注意事项:

  • 研究区范围:geometry需提前定义(如通过 GEE 导入矢量文件或绘制边界),否则会导致影像筛选失败。
  • 影像可用性:若研究区在 2024 年 5-9 月无 Landsat 9 影像(如持续阴雨、传感器故障),会导致结果为空,需扩展时间范围或更换传感器。
  • 导出限制:GEE 导出文件大小有限制,大范围研究区需确保maxPixels参数足够(1e13 可支持约 100 万平方公里区域的 30 米分辨率影像导出)。
  • 指数选择:不同指数有其适用场景(如 NDVI 适用于一般植被覆盖,SAVI 适用于稀疏植被区),需根据研究目的选择核心指数进行重点分析。

八、运行结果

点击RUN即可下载数据

下面是利用 ArcMap 软件对下载的数据进行可视化制图的结果:
NDVI:归一化植被指数
GNDVI:绿度归一化植被指数
EVI:增强型植被指数
EVI2:双波段增强型植被指数
DVI:差值植被指数
GDVI:绿度差值植被指数
RVI:比值植被指数
SAVI:土壤调整植被指数
OSAVI:优化土壤调整植被指数
MSAVI:修正土壤调整植被指数
NDPI:归一化色素指数

若觉得代码对您的研究 / 项目有帮助,欢迎点击打赏支持!需要完整代码的朋友,打赏后可在后台私信(复制文章标题发给我),我会尽快发您完整可运行代码,感谢支持!

相关推荐
TG:@yunlaoda360 云老大2 小时前
如何了解华为云国际站代理商的GACS主要有什么作用呢?
大数据·华为云·云计算
咕噜企业分发小米3 小时前
阿里云基因测序数据分析平台有哪些成功案例?
阿里云·数据分析·云计算
Zhou-XueLin3 小时前
虚拟环境(云主机)下使用多显示器环境连接RDP远程桌面提示协议错误0x112f需禁用WDDM驱动
windows·云计算
wanhengidc3 小时前
巨 椰 云手机 性能稳定
运维·服务器·arm开发·智能手机·云计算
翼龙云_cloud3 小时前
阿里云渠道商:阿里云GPU怎么搭建部署个人作品集博客?
运维·服务器·阿里云·云计算
Elastic 中国社区官方博客3 小时前
Elastic 在 AWS re:Invent:总结一年在 agentic AI 创新中的合作
大数据·人工智能·elasticsearch·搜索引擎·云计算·全文检索·aws
TG:@yunlaoda360 云老大3 小时前
华为云国际站代理商的CCE主要有什么作用呢?
大数据·华为云·云计算·产品运营
TG:@yunlaoda360 云老大3 小时前
华为云国际站代理商DSS主要有什么作用呢?
大数据·华为云·云计算·产品运营
TG:@yunlaoda360 云老大4 小时前
华为云国际站代理商的UCS主要有什么作用呢?
人工智能·自然语言处理·华为云·云计算