GEE学习:Sentinel2哨兵2影像下载+计算植被指数(详细代码)

1.选择研究区内Sentinel-2影像,并对影像数据进行去云,筛选等操作


Map.centerObject(table, 10);
// 将地图中心设置为table几何对象,并将缩放级别设为10。

// 定义一个函数,用于掩膜掉云层和卷云的像素
function maskS2clouds(image) {
  var qa = image.select('QA60'); // 选择QA60波段,QA60波段包含质量评估信息

  // 定义云层和卷云的掩膜位,分别为第10位和第11位
  var cloudBitMask = 1 << 10;
  var cirrusBitMask = 1 << 11;

  // 生成掩膜,确保第10位和第11位为0,表示无云层和卷云
  var mask = qa.bitwiseAnd(cloudBitMask).eq(0)
      .and(qa.bitwiseAnd(cirrusBitMask).eq(0));

  // 应用掩膜,并将像素值缩放到0-1之间(原始像素值乘以0.0001)
  return image.updateMask(mask).divide(10000);
}

// 创建一个Sentinel-2影像集合,应用各种过滤条件
var dataset = ee.ImageCollection('COPERNICUS/S2_SR') // 选择Sentinel-2 Level-2A影像集合
                  .filterBounds(table) // 过滤影像集合,仅保留覆盖table区域的影像
                  .filterDate('2023-01-01', '2023-10-31') // 进一步过滤,仅保留指定日期范围内的影像,【可以定义时间】                  .filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 10)) // 仅保留云量小于10%的影像
                  .map(maskS2clouds) // 应用maskS2clouds函数,去除云层和卷云
                  .median() // 计算时间范围内的影像中值,减少噪声
                  .clip(table); // 将影像裁剪到table区域

print(dataset); // 输出处理后的影像集合以供查看


2.定义需要提取的波段参数,本文提取的是b1-b12,arvi,ndvi,sr,osavi,vigreen植被指数

// 从dataset中选择指定波段并创建新的合并影像
var mergedImage = dataset.select('B1','B2','B3','B4','B5','B6','B7','B8','B8A','B9','B11','B12');
print(mergedImage); // 输出合并后的影像以供查看

// 定义计算植被指数的函数
function addVegetationIndices(image) {
  // 计算ARVI (Atmospherically Resistant Vegetation Index)
  var arvi = image.expression(
    '(NIR - (2 * Red - Blue)) / (NIR + (2 * Red - Blue))', {
      'NIR': image.select('B8'),
      'Red': image.select('B4'),
      'Blue': image.select('B2')
    }).rename('ARVI').toFloat(); // 转换为Float32

  // 计算NDVI (Normalized Difference Vegetation Index)
  var ndvi = image.normalizedDifference(['B8', 'B4']).rename('NDVI').toFloat(); // 转换为Float32

  // 计算SR (Simple Ratio)
  var sr = image.select('B8').divide(image.select('B4')).rename('SR').toFloat(); // 转换为Float32

  // 计算OSAVI (Optimized Soil-Adjusted Vegetation Index)
  var osavi = image.expression(
    '(NIR - Red) / (NIR + Red + 0.16)', {
      'NIR': image.select('B8'),
      'Red': image.select('B4')
    }).rename('OSAVI').toFloat(); // 转换为Float32

  // 计算VIGreen (Green Vegetation Index)
  var vigreen = image.expression(
    '(Green - Red) / (Green + Red)', {
      'Green': image.select('B3'),
      'Red': image.select('B4')
    }).rename('VIGreen').toFloat(); // 转换为Float32

  // 将计算的指数添加到影像中
  return image.addBands([arvi, ndvi, sr, osavi, vigreen]);
}

// 对mergedImage应用指数计算函数
var vegetationIndicesImage = addVegetationIndices(mergedImage);
print(vegetationIndicesImage); // 输出包含指数的影像以供查看


3.可视化,并导出


// 定义RGB可视化参数,设置显示波段为红、绿、蓝(B4、B3、B2),以及显示的最小和最大值
var rgbVis = {
  min: 0.0,
  max: 0.3,
  bands: ['B4', 'B3', 'B2'],
};

// 将处理后的影像以RGB形式添加到地图上显示
Map.addLayer(vegetationIndicesImage, rgbVis, 'RGB');

// 定义NDVI的可视化参数,并将NDVI添加到地图
var ndviVis = {
  min: 0.0,
  max: 1.0,
  palette: ['blue', 'white', 'green']
};
Map.addLayer(vegetationIndicesImage.select('NDVI'), ndviVis, 'NDVI');

// 导出影像至Google Drive,包含植被指数
Export.image.toDrive({
    image: vegetationIndicesImage, // 包含指数的影像
    description: 'VegetationIndices_2023', // 导出任务描述
    folder: 'Sentinel2-L2A', // 保存文件夹
    scale: 10, // 空间分辨率
    maxPixels: 1e13, // 最大像素数
    region: table, // 导出区域
    fileFormat: 'GeoTIFF', // 文件格式
    crs: "EPSG:4326", // 坐标系
    formatOptions: {
      cloudOptimized: true // 启用云优化
    }
});

完整代码


Map.centerObject(table, 10);
// 将地图中心设置为table几何对象,并将缩放级别设为10。您可以根据需要调整这个级别。

// 定义一个函数,用于掩膜掉云层和卷云的像素
function maskS2clouds(image) {
  var qa = image.select('QA60'); // 选择QA60波段,QA60波段包含质量评估信息

  // 定义云层和卷云的掩膜位,分别为第10位和第11位
  var cloudBitMask = 1 << 10;
  var cirrusBitMask = 1 << 11;

  // 生成掩膜,确保第10位和第11位为0,表示无云层和卷云
  var mask = qa.bitwiseAnd(cloudBitMask).eq(0)
      .and(qa.bitwiseAnd(cirrusBitMask).eq(0));

  // 应用掩膜,并将像素值缩放到0-1之间(原始像素值乘以0.0001)
  return image.updateMask(mask).divide(10000);
}

// 创建一个Sentinel-2影像集合,应用各种过滤条件
var dataset = ee.ImageCollection('COPERNICUS/S2_SR') // 选择Sentinel-2 Level-2A影像集合
                  .filterBounds(table) // 过滤影像集合,仅保留覆盖table区域的影像
                  .filterDate('2023-01-01', '2023-10-31') // 进一步过滤,仅保留指定日期范围内的影像
                  .filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 10)) // 仅保留云量小于10%的影像
                  .map(maskS2clouds) // 应用maskS2clouds函数,去除云层和卷云
                  .median() // 计算时间范围内的影像中值,减少噪声
                  .clip(table); // 将影像裁剪到table区域

print(dataset); // 输出处理后的影像集合以供查看

// 从dataset中选择指定波段并创建新的合并影像
var mergedImage = dataset.select('B1','B2','B3','B4','B5','B6','B7','B8','B8A','B9','B11','B12');
print(mergedImage); // 输出合并后的影像以供查看

// 定义计算植被指数的函数
function addVegetationIndices(image) {
  // 计算ARVI (Atmospherically Resistant Vegetation Index)
  var arvi = image.expression(
    '(NIR - (2 * Red - Blue)) / (NIR + (2 * Red - Blue))', {
      'NIR': image.select('B8'),
      'Red': image.select('B4'),
      'Blue': image.select('B2')
    }).rename('ARVI').toFloat(); // 转换为Float32

  // 计算NDVI (Normalized Difference Vegetation Index)
  var ndvi = image.normalizedDifference(['B8', 'B4']).rename('NDVI').toFloat(); // 转换为Float32

  // 计算SR (Simple Ratio)
  var sr = image.select('B8').divide(image.select('B4')).rename('SR').toFloat(); // 转换为Float32

  // 计算OSAVI (Optimized Soil-Adjusted Vegetation Index)
  var osavi = image.expression(
    '(NIR - Red) / (NIR + Red + 0.16)', {
      'NIR': image.select('B8'),
      'Red': image.select('B4')
    }).rename('OSAVI').toFloat(); // 转换为Float32

  // 计算VIGreen (Green Vegetation Index)
  var vigreen = image.expression(
    '(Green - Red) / (Green + Red)', {
      'Green': image.select('B3'),
      'Red': image.select('B4')
    }).rename('VIGreen').toFloat(); // 转换为Float32

  // 将计算的指数添加到影像中
  return image.addBands([arvi, ndvi, sr, osavi, vigreen]);
}

// 对mergedImage应用指数计算函数
var vegetationIndicesImage = addVegetationIndices(mergedImage);
print(vegetationIndicesImage); // 输出包含指数的影像以供查看

// 定义RGB可视化参数,设置显示波段为红、绿、蓝(B4、B3、B2),以及显示的最小和最大值
var rgbVis = {
  min: 0.0,
  max: 0.3,
  bands: ['B4', 'B3', 'B2'],
};

// 将处理后的影像以RGB形式添加到地图上显示
Map.addLayer(vegetationIndicesImage, rgbVis, 'RGB');

// 定义NDVI的可视化参数,并将NDVI添加到地图
var ndviVis = {
  min: 0.0,
  max: 1.0,
  palette: ['blue', 'white', 'green']
};
Map.addLayer(vegetationIndicesImage.select('NDVI'), ndviVis, 'NDVI');

// 导出影像至Google Drive,包含植被指数
Export.image.toDrive({
    image: vegetationIndicesImage, // 包含指数的影像
    description: 'VegetationIndices_2023', // 导出任务描述
    folder: 'Sentinel2-L2A', // 保存文件夹
    scale: 10, // 空间分辨率
    maxPixels: 1e13, // 最大像素数
    region: table, // 导出区域
    fileFormat: 'GeoTIFF', // 文件格式
    crs: "EPSG:4326", // 坐标系
    formatOptions: {
      cloudOptimized: true // 启用云优化
    }
});

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值