GEE:如何批量处理并下载指定时间范围的月尺度NDVI数据集(MOD09GA为例)

目录

01 说明

 02 完整代码


01 说明

源码链接:https://code.earthengine.google.com/4f02959684e1ad8bd70df97175540b89

这里仅说明如何查找GAUL数据集的各个行政区划的属性信息,特别是行政区划的名称.

var fvLayer = ui.Map.FeatureViewLayer('FAO/GAUL/2015/level1_FeatureView');
var visParams = {
  color: '00909F',
  fillColor: 'b5ffb4',
  opacity: 1,
  width: 1,
  pointSize: 1
};
fvLayer.setVisParams(visParams);
fvLayer.setName('First Level Administrative Units');
Map.setCenter(7.82, 49.1, 4);
Map.add(fvLayer);

 运行上述代码,通过显示在图层上的各个行政区划,将鼠标状态切换到Inspector,点击指定区域获取该位置的行政区划要素的属性信息。操作如下:

 02 完整代码

/*
该程序用于获取指定时间范围的MOD09GA数据集的月尺度NDVI产品
*/

// 定义日期范围
var start_date = '2000-02-01';  // 必须以一号结尾
var end_date = '2020-12-31';
var roi_name = 'Sichuan Sheng';

// 定义云和水体掩膜函数
function maskCloudAndWater(image) {
  var QA = image.select('QC_500m');
  // 创建一个空的mask,初始值为1(即所有像素都不被掩膜覆盖)
  var mask = ee.Image.constant(1);
  
  // 遍历每个波段的数据质量标识
  for (var i = 0; i < 2; i++) {  // 因为我选取了两个波段进行ndvi的计算
    // 计算当前波段的数据质量标识的起始位(是从2开始)
    var startBit = 2 + i * 4;
    // 提取当前波段的数据质量标识
    var bandQuality = QA.rightShift(startBit).bitwiseAnd(15);
    // 如果数据质量标识为15,说明该像素可能被云或深海覆盖,需要被掩膜覆盖
    mask = mask.min(bandQuality.neq(15));  // min取两者间小的那个值,逐像元
  }
  
  // 应用掩膜
  return image.updateMask(mask);
}

// 定义获取日期列表的函数
function month_list(start_date, end_date) {
  // 将字符串转换为ee.Date对象
  var startDate = ee.Date(start_date);
  var endDate = ee.Date(end_date);
  
  // 计算总共有多少个月
  var diff = endDate.difference(startDate, 'month').round();
  
  // 创建每个月的开始和结束日期的列表
  var dates = ee.List.sequence(0, diff.subtract(1)).map(function (n) {
    var start = startDate.advance(n, 'month');
    var end = start.advance(1, 'month').advance(-1, 'day');
    return [start.format('YYYY-MM-dd'), end.format('YYYY-MM-dd')];
  });
  
  return dates
}

// 定义地理空间范围(四川省)
// var roi = ee.FeatureCollection('projects/ee-chaoqiezione/assets/china_admin_province')
// roi = roi.filter(ee.Filter.eq('省', roi_name));
var roi = ee.FeatureCollection("FAO/GAUL/2015/level1")
  .filter(ee.Filter.eq('ADM1_NAME', roi_name));
Map.addLayer(roi.style({fillColor: "00000000"}), {width: 2}, roi_name)
Map.centerObject(roi, 6)

// 生成日期列表
var dates = month_list(start_date, end_date);
dates.evaluate(function(dates) {
  dates.map(function(date){
    var start = ee.Date(date[0]);
    var stop = ee.Date(date[1]);
    
    // 加载MODIS数据根据日期和地理范围进行筛选
    var modis_ndvi = ee.ImageCollection("MODIS/061/MOD09GA")
      .filterDate(start, stop)
      .filterBounds(roi)
      .select(['sur_refl_b02', 'sur_refl_b01', 'QC_500m'])
      .map(function (img) {
        img = maskCloudAndWater(img);  // 水体和云掩膜
        // img = img.add(0.0001)  本应进行单位换算, 但是仅仅计算ndvi时会约掉,为了减小计算量这里不进行
        return img.normalizedDifference(['sur_refl_b02', 'sur_refl_b01']).rename('ndvi')  // 计算ndvi
      })
      .mean().clip(roi).unmask(-9999)
    
    modis_ndvi = modis_ndvi.set({name: ee.String(start.format('YYYY-MM-dd'))});
    
    Export.image.toDrive({
      image: modis_ndvi.select("ndvi"),
      region: roi.geometry(),
      scale:500,
      description: "ndvi_" + date[0] + '_' + date[1],
      folder: 'MOD09GA_NDVI',
    });
  })
})

// 仅用于查看GAUL行政区划的属性信息
// var fvLayer = ui.Map.FeatureViewLayer('FAO/GAUL/2015/level1_FeatureView');
// var visParams = {
//   color: '00909F',
//   fillColor: 'b5ffb4',
//   opacity: 1,
//   width: 1,
//   pointSize: 1
// };
// fvLayer.setVisParams(visParams);
// fvLayer.setName('First Level Administrative Units');
// Map.setCenter(7.82, 49.1, 4);
// Map.add(fvLayer);


 时间有限,很多代码的相关讨论并没有进行。如有问题,私聊或者评论.

猜你喜欢

转载自blog.csdn.net/m0_63001937/article/details/131098935