You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Sentinel-2的EVI2提取及reduceRegion参数设置咨询

Sentinel-2 EVI2计算与导出问题解答

背景与原始代码

需求:基于Sentinel-2数据计算EVI2并导出为表格,因10米分辨率无法满足区域分析需求,计划为点要素添加30米缓冲以纳入周边信息,当前限制处理5个点以节省计算资源。

原始代码:

var table = ee.FeatureCollection("projects/ee-marciobcure/assets/coordenadas_dexter_2025").limit(5);

var geometry = table
  .limit(5)
  .geometry()
  .buffer({'distance': 30});
  
// Sentinel 2
var idCollection = 'COPERNICUS/S2_SR_HARMONIZED';

// 影像集定义与地理空间过滤
function maskS2clouds(image) {
  var qa = image.select('QA60');

  // 第10位和11位分别代表云与卷云
  var cloudBitMask = 1 << 10;
  var cirrusBitMask = 1 << 11;

  // 两个标志位都为0时表示无云
  var mask = qa.bitwiseAnd(cloudBitMask).eq(0)
      .and(qa.bitwiseAnd(cirrusBitMask).eq(0));

  return image.updateMask(mask)
  .copyProperties(image, ['system:time_start']);
}

var col = ee.ImageCollection(idCollection)
        .filterDate('2015-01-01', '2024-01-31')// 时间范围过滤
        .filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 30))// 云量过滤
        .map(maskS2clouds)
        .select(['B8', 'B4']); // 选择所需波段

col = col.filter(ee.Filter.bounds(geometry));

//Map.addLayer(col);
//print("col", col);
print(col.size());

var table_list = table.toList(table.size());

var newCol = table_list.map(function (ele) {
  
  var new_col = col.filter(ee.Filter.bounds(ee.Feature(ele).geometry()));
  
  var getData = new_col.toList(new_col.size()).map(function (e) {
    
    var date = ee.Date(ee.Image(e).get("system:time_start")).format().slice(0,10);
    
    var evi2 = ee.Image(e).expression(
    '2.5*(NIR-RED)/(NIR+(2.4*RED)+1)', {
      'NIR': ee.Image(e).select('B8').divide(10000),
      'RED': ee.Image(e).select('B4').divide(10000)
    }).rename('EVI2');
    
    
    var value = ee.Image(evi2).reduceRegion({
      reducer: ee.Reducer.mean(),
      geometry: ee.Feature(ele).geometry(),
      scale: 30
    }).get('EVI2');
    
    var ft = ee.Feature(null, {'date': date, 
                               'value': value,
                               'plot_id': ee.Feature(ele).get('plot_id'),
    });
    
    return ft;
    
  });
  
  return getData;
  
});

print(newCol.size());

// 导出时间序列为CSV
Export.table.toDrive({
    collection: ee.FeatureCollection(newCol.flatten()),
    selectors: 'date, value, plot_id',
    description: 's2_Dexter_2025',
    folder: 'Dexter2025_csv'
});

问题解答

1. 当前方法是否足以实现目标?

核心逻辑方向正确,但存在关键疏漏,无法完全实现“纳入周边区域信息”的目标:

  • 云掩膜、影像过滤、EVI2公式、导出流程均符合常规规范,无问题。
  • 疏漏点:你创建了全局的30米缓冲几何用于过滤影像,但在计算EVI2均值时,reduceRegion使用的是原始点要素的几何,而非缓冲后的区域。这意味着当前计算的是点所在30米像元的单一值,而非周边30米范围内的均值,没有达到纳入周边信息的目的。
  • 额外优化点:循环每个点时重复执行filter.bounds属于冗余操作,因为全局已经通过geometry过滤过影像集,可删除该步骤减少计算量。

结论:调整reduceRegion的几何参数为单个点的30米缓冲区域后,即可满足需求。

2. 如何设置reduceRegion的scale参数?当前使用是否正确?

scale参数用于指定计算时的空间分辨率(单位:米),直接影响影像重采样方式:

  • 当前设置scale:30是正确的:符合你对30米分辨率的需求,避免Earth Engine默认使用Sentinel-2 10米分辨率进行计算。
  • 注意事项:
    1. 当几何为点时,scale:30会提取该点所在30米像元的值;当几何为30米缓冲区域(直径60米)时,会计算该区域内所有30米像元的均值,这才是你需要的“周边信息聚合”。
    2. 建议添加maxPixels: 1e13参数:避免因缓冲区域覆盖像素数超过默认上限(1e5)导致计算失败。
    3. 不要依赖默认scale:默认会使用影像第一个波段的分辨率(此处为B8的10米),不符合你的需求,必须手动指定。

优化后的关键代码片段

修正核心问题,同时优化冗余操作:

var newCol = table_list.map(function (ele) {
  // 为单个点创建30米缓冲区域
  var pointBuffer = ee.Feature(ele).geometry().buffer(30);
  
  // 全局已过滤影像,无需再次单个过滤
  var getData = col.toList(col.size()).map(function (e) {
    var date = ee.Date(ee.Image(e).get("system:time_start")).format().slice(0,10);
    
    var evi2 = ee.Image(e).expression(
    '2.5*(NIR-RED)/(NIR+(2.4*RED)+1)', {
      'NIR': ee.Image(e).select('B8').divide(10000),
      'RED': ee.Image(e).select('B4').divide(10000)
    }).rename('EVI2');
    
    var value = ee.Image(evi2).reduceRegion({
      reducer: ee.Reducer.mean(),
      geometry: pointBuffer, // 使用缓冲后的区域计算均值
      scale: 30,
      maxPixels: 1e13 // 避免像素数超限
    }).get('EVI2');
    
    var ft = ee.Feature(null, {
      'date': date, 
      'value': value,
      'plot_id': ee.Feature(ele).get('plot_id')
    });
    
    return ft;
  });
  
  return getData;
});

内容的提问来源于stack exchange,提问作者Marcio Cure

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 17:04:56