保姆级教程:在GEE上5分钟搞定Sentinel-2数据的植被覆盖度(FVC)计算
2026/6/13 19:37:58 网站建设 项目流程

5分钟极速实战:用GEE计算Sentinel-2植被覆盖度的完整指南

当研究区域的植被动态变化时,植被覆盖度(FVC)是最直观的量化指标之一。对于遥感初学者或需要快速获取结果的研究者来说,Google Earth Engine(GEE)平台提供了强大的云端计算能力,可以绕过复杂的数据下载和处理步骤,直接在线完成从数据获取到结果导出的全流程。本文将手把手带你用Sentinel-2数据,在GEE平台上5分钟内完成植被覆盖度的计算和可视化。

1. 准备工作与环境设置

在开始之前,确保你已经拥有一个可用的Google账号并成功登录了GEE平台(https://code.earthengine.google.com/)。GEE的代码编辑器界面主要分为四个区域:左上角的脚本管理区、右上角的地图展示区、下方的代码编辑区和右侧的控制台输出区。

对于植被覆盖度计算,我们需要明确几个关键参数:

  • 研究区域:本文以云南省普洱市为例,你可以替换为自己的研究区
  • 时间范围:选择植被生长季(如2018年11月至2019年4月)
  • 云量阈值:设置为10%以下以保证数据质量
// 定义研究区域 - 普洱市边界 var roi = ee.FeatureCollection("users/chuanbaojiangpr/puer_merge"); Map.centerObject(roi, 10); // 以研究区为中心,缩放级别10 // 设置区域显示样式 var style = {color: "red", fillColor: "00000000"}; Map.addLayer(roi.style(style), {}, "Study Area");

2. Sentinel-2数据预处理

Sentinel-2卫星提供的高分辨率多光谱数据是植被监测的理想选择。在GEE中,我们可以直接调用预处理过的Surface Reflectance(SR)数据,但仍需进行云掩膜处理以提高数据质量。

关键预处理步骤包括:

  1. 按日期和空间范围筛选数据
  2. 应用云掩膜函数去除云和云影影响
  3. 选择所需波段(蓝、绿、红和近红外)
  4. 计算时间序列中值合成图像
// 定义云掩膜函数 function maskS2clouds(image) { var qa = image.select("QA60"); var cloudBitMask = 1 << 10; var cirrusBitMask = 1 << 11; var mask = qa.bitwiseAnd(cloudBitMask).eq(0) .and(qa.bitwiseAnd(cirrusBitMask).eq(0)); return image.updateMask(mask).divide(10000); // 同时将DN值转换为反射率 } // 获取并处理Sentinel-2 SR数据 var S2 = ee.ImageCollection("COPERNICUS/S2_SR") .filterDate("2018-11-01", "2019-04-30") .filterBounds(roi) .filter(ee.Filter.lt("CLOUDY_PIXEL_PERCENTAGE", 10)) .map(maskS2clouds) .select("B2", "B3", "B4", "B8") // 蓝、绿、红、近红外波段 .median() .clip(roi); // 可视化参数设置 var RGBvis = {min: 0, max: 0.5, bands: ["B4", "B3", "B2"]}; Map.addLayer(S2, RGBvis, "Sentinel-2 Composite");

3. NDVI计算与统计

归一化植被指数(NDVI)是计算植被覆盖度的基础,它利用植被在近红外和红光波段的反射特性差异来量化植被活力。计算NDVI后,我们需要统计研究区内NDVI的5%和95%分位数,作为像元二分模型的两个端元值。

// 计算NDVI var NDVI = S2.expression( "(NIR - R) / (NIR + R)", { "R": S2.select("B4"), // 红波段 "NIR": S2.select("B8") // 近红外波段 }).rename("NDVI"); // 统计NDVI的5%和95%分位数(像元二分模型的端元值) var threshold = NDVI.reduceRegion({ reducer: ee.Reducer.percentile([5, 95]), geometry: roi.geometry().bounds(), scale: 110, // 重采样尺度以避免内存溢出 maxPixels: 1e13 }); // 获取具体数值 var NDVI_5 = ee.Number(threshold.get("NDVI_p5")); var NDVI_95 = ee.Number(threshold.get("NDVI_p95")); // 可选:可视化NDVI var NDVIvis = {min: -0.5, max: 1, palette: ["red", "yellow", "green"]}; Map.addLayer(NDVI, NDVIvis, "NDVI");

注意:在实际应用中,NDVI_5和NDVI_95分别代表裸土和茂密植被的典型NDVI值。不同地区可能需要调整这些端元值,可通过查看NDVI直方图或结合实地调查数据来确定。

4. 植被覆盖度(FVC)计算

基于像元二分模型,我们利用NDVI和两个端元值来计算每个像元的植被覆盖度。公式为:FVC = (NDVI - NDVI_soil) / (NDVI_veg - NDVI_soil)。计算结果需要限制在0到1之间,并进行分类可视化。

// 计算原始FVC var imgFVC = NDVI.subtract(ee.Image(NDVI_5)) .divide(ee.Image(NDVI_95).subtract(ee.Image(NDVI_5))) .float(); // 将FVC限制在0-1范围内 var FVC = imgFVC.lt(0).multiply(0) // 小于0的设为0 .add(imgFVC.gt(0).and(imgFVC.lte(1)).multiply(imgFVC)) // 0-1之间的保持原值 .add(imgFVC.gt(1).multiply(1)); // 大于1的设为1 // 对FVC进行分类(5个等级) var FVC_rank = FVC.where(FVC.lt(0.2), 1) // 0-20%:裸地/非植被 .where(FVC.gte(0.2).and(FVC.lt(0.4)), 2) // 20-40%:低覆盖 .where(FVC.gte(0.4).and(FVC.lt(0.6)), 3) // 40-60%:中低覆盖 .where(FVC.gte(0.6).and(FVC.lt(0.8)), 4) // 60-80%:中高覆盖 .where(FVC.gte(0.8), 5); // 80-100%:高覆盖 // 可视化FVC分类结果 Map.addLayer(FVC_rank, { min: 1, max: 5, palette: ["DCDCDC", "FFEBCD", "99B718", "529400", "011301"] }, "FVC Classification");

5. 结果导出与应用

完成计算和可视化后,你可能需要将结果导出到Google Drive进行进一步分析或制图。GEE支持多种导出格式,对于植被覆盖度结果,GeoTIFF是最常用的格式。

// 导出FVC分类结果到Google Drive Export.image.toDrive({ image: FVC_rank, description: "FVC_Puer_2018", folder: "GEE_Exports", // 指定Google Drive中的文件夹 fileNamePrefix: "FVC_Puer", region: roi, scale: 110, // 输出分辨率 crs: "EPSG:4326", // 坐标系 fileFormat: "GeoTIFF", formatOptions: { cloudOptimized: true } });

在实际研究中,计算得到的植被覆盖度可以用于:

  • 生态系统健康状况评估
  • 土地利用/覆盖变化监测
  • 植被生产力估算
  • 生态模型输入参数

对于需要更高空间分辨率的应用,可以考虑:

  1. 使用Sentinel-2的10m分辨率波段(如B2、B3、B4、B8)计算NDVI
  2. 将研究区分块处理以避免内存溢出
  3. 适当延长处理时间窗口以获得更多无云影像

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询