• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

GEE 按月份处理遥感数据特征变量各月份NDVI均值合成,含完整代码链接

武飞扬头像
当我感到还是不要暴露tel比较好
帮助1

按月份提取遥感数据特征,可以比较好地反映数据的变化趋势,同时又由于数据缺失、成像质量等因素,每个月份的可用数据量可能比较小,那么合成得到的数据结果仍有可能具有一些异常值,而多年的数据,不考虑年份,只按照所属月份进行提取合成,可以较好地解决这一问题。
这里以Sentinel-2数据为例。
首先加载Sentinel-2数据,后面会对数据进行去云,因此在对数据筛选的时候,没有对影像含云量进行过滤。

//哨兵2 光学数据集
var dataset_s2 = ee.ImageCollection('COPERNICUS/S2')
    .filterBounds(roi_cm).filter(ee.Filter.date(startDate, endDate))
    .filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 100))

Sentinel-2影像去云函数。QA60波段按位存储像元含云量信息,根据该波段可去掉有云像元。

//  /*---------------去云函数---------------*\

function rmCloudByQA(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); 
} 

Sentinel-2影像添加变量波段函数。根据研究需要,对数据添加计算得到的NDVI等特征。

var addVariables = function(image) {
   return image
    // Add an NDVI band.
    .addBands(image.normalizedDifference(['B8', 'B4']).rename('NDVI')).float()
    // //Add an NDBI band.
    .addBands(image.normalizedDifference(['B6', 'B4']).rename('NDBI')).float()
  //Add an MNDWI band.
    .addBands(image.normalizedDifference(['B3', 'B8']).rename('MNDWI')).float()
  

     
};

Sentinel-2数据调用去云函数与添加变量波段函数,先去云再计算特征变量。

var imgCol_s2=dataset_s2.map(rmCloudByQA).map(addVariables);

以NDVI特征为例,进行按月均值合成。

var NDVI=imgCol_s2.select('NDVI');
  var MonthlyDataCol = NDVI.filter(ee.Filter.calendarRange(1,  1,'month'))
  .mean().rename('NDVI1');
var MonthlyDataColNDVI=MonthlyDataCol;

  for(var j=2;j<=12;j  ){
    var data_collection = NDVI.filter(ee.Filter.calendarRange(j,  j,'month')).mean().clip(roi_cm);   
    
    var StringBandName='NDVI' j.toString();
    var monthlydata=data_collection.select('NDVI').rename(StringBandName);
  
    MonthlyDataColNDVI=ee.Image.cat([MonthlyDataColNDVI,monthlydata.select(StringBandName)]);

  
  
  }
  print(MonthlyDataColNDVI.getInfo());
学新通

这里比较关键的是用到了ee.Filter.calender(start,end,field)函数,函数解释如下,根据field对时间进行筛选,如果field为’month’,就是按照起止月份筛选,想要筛选一月份的数据,就是ee.Filter.calender(1,1,‘month’),添加循环自动计算一月份、二月份…十二月份的数据,提取数据后按照需求进行均值、最值等不同处理方式合成即可。
学新通完整代码链接:GEE-各月份NDVI均值合成
https://code.earthengine.谷歌.com/24b69d45a2df14c6915ad231cd6c4336

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgekcbg
系列文章
更多 icon
同类精品
更多 icon
继续加载