Google Earth Engine(GEE)计算样本点区域内有效观测值(分季节)

上篇文章主要是根据年份对样本点区域的有效观测值进行统计。
这篇文章更加细化,通过将一年分为四个季节分别进行统计,并将所有样本点在单个季节的有效观测值进行排序,取中值作为该年该季节研究区范围的有效观测值数量。

var ownerUtiles = require('users/doker/ccdc:ccdc-SandL');
var roi = table2.filter(ee.Filter.eq('县', '云霄县'));

var bands = ['BLUE', 'GREEN', 'RED', 'NIR', 'SWIR1', 'SWIR2'];

var seasons = {
  spring: {start: '2023-01-01', end: '2023-03-31'},
  summer: {start: '2023-04-01', end: '2023-06-30'},
  autumn: {start: '2023-07-01', end: '2023-09-30'},
  winter: {start: '2023-10-01', end: '2023-12-31'}
};

var points = ee.FeatureCollection(table);

var SampleValidObservations = function(feature, startDate, endDate) {
  var filteredSL = ownerUtiles.getImageCol({
    start: startDate,
    end: endDate
  })
  .filterBounds(roi)
  .filterDate(startDate, endDate)
  .select(bands);

  var validObservations = filteredSL.map(function(image) {
    var sampled = image.reduceRegion({
      reducer: ee.Reducer.count(),
      geometry: feature.geometry(),
      scale: 10,
      maxPixels: 1e13
    });
    
    var validCount = ee.Number(sampled.values().get(0));
    
    return ee.Feature(null, {
      'validCount': validCount
    }).setGeometry(feature.geometry());
  });
  
  var totalValidCount = validObservations.aggregate_sum('validCount');
  return feature.set({'validCount': totalValidCount});
};

var calculateSeasonalMedians = function(season) {
  var startDate = season.start;
  var endDate = season.end;

  var seasonalResults = points.map(function(point) {
    return SampleValidObservations(point, startDate, endDate);
  });

  // 收集所有样本点的有效观测次数
  var allValidCounts = seasonalResults.aggregate_array('validCount').flatten();
  
  // 过滤掉无效值
  allValidCounts = allValidCounts.filter(ee.Filter.gt('item', 0));

  // 计算中值
  var medianValidCount = ee.Array(allValidCounts.sort()).slice(0, ee.Number(allValidCounts.length().divide(2).floor())).get([-1]);

  print(medianValidCount)
  return medianValidCount;
};

// 计算每个季节的中值
var seasonalMedians = ee.Dictionary({
  spring: calculateSeasonalMedians(seasons.spring),
  summer: calculateSeasonalMedians(seasons.summer),
  autumn: calculateSeasonalMedians(seasons.autumn),
  winter: calculateSeasonalMedians(seasons.winter)
});

var seasonalResults = ee.FeatureCollection([
  ee.Feature(null, {season: 'spring', medianValidCount: seasonalMedians.get('spring')}),
  ee.Feature(null, {season: 'summer', medianValidCount: seasonalMedians.get('summer')}),
  ee.Feature(null, {season: 'autumn', medianValidCount: seasonalMedians.get('autumn')}),
  ee.Feature(null, {season: 'winter', medianValidCount: seasonalMedians.get('winter')})
]);

Export.table.toDrive({
  collection: seasonalResults,
  description: 'SeasonalMedianValidObservations',
  fileFormat: 'CSV',
  folder: 'ccdc'
});

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值