下面我们以贵州省毕节市2016年8月1号至2018年7月31号两年间像元的观测值数量以及良好的观测值数量为例,统计结果以图像形式进行输出,如图1所示:
// 1. 定义研究区域
var studyArea = table;
// 获取 Landsat 和 Sentinel-2 数据集
var landsatCollection = ee.ImageCollection("LANDSAT/LE07/C01/T1_TOA")
.merge(ee.ImageCollection("LANDSAT/LC08/C01/T1_TOA"))
.filterBounds(studyArea)
.filterDate('2016-08-01', '2018-07-31');
var sentinelCollection = ee.ImageCollection("COPERNICUS/S2")
.filterBounds(studyArea)
.filterDate('2016-08-01', '2018-07-31');
// 定义 Landsat 的云掩蔽函数
var landsatCloudMask = function(image) {
// 使用 FMask 算法进行云掩蔽
var fmask = image.select('BQA').bitwiseAnd(1 << 4).eq(0); // FMask quality band
return image.updateMask(fmask);
};
// 定义 Sentinel-2 的云掩蔽函数
var sentinelCloudMask = function(image) {
// 使用 QA60 带进行云掩蔽
var cloudMasked = image.select('QA60').lt(20); // Sentinel-2 cloud probability band
return image.updateMask(cloudMasked);
};
// 对 Landsat 和 Sentinel-2 数据集应用云掩蔽算法
var cloudFreeLandsat = landsatCollection.map(landsatCloudMask);
var cloudFreeSentinel = sentinelCollection.map(sentinelCloudMask);
// 统计每个像素的总观测数
var countTotal = function(image) {
return ee.Image.constant(1).rename('total_observations');
};
// 统计每个像素的良好质量观测数
var countGoodQuality = function(image) {
var goodQualityObservations = image.reduce(ee.Reducer.count());
return ee.Image.constant(1).rename('good_quality_observations').multiply(goodQualityObservations);
};
// 统计 Landsat 数据集每个像素的总观测数和良好质量观测数
var totalLandsatObservations = cloudFreeLandsat.map(countTotal).sum();
var goodQualityLandsatObservations = cloudFreeLandsat.map(countGoodQuality).sum();
// 统计 Sentinel-2 数据集每个像素的总观测数和良好质量观测数
var totalSentinelObservations = cloudFreeSentinel.map(countTotal).sum();
var goodQualitySentinelObservations = cloudFreeSentinel.map(countGoodQuality).sum();
// 自定义调色板,根据观测数的不同数量显示不同的颜色
var palette = ['white', 'blue', 'green', 'yellow', 'orange', 'red'];
// 显示 Landsat 数据集的总观测数
var visParams = {
min: 0,
max: 500, // 根据数据的范围进行调整
palette: palette // 使用自定义调色板
};
Map.centerObject(studyArea, 7);
Map.addLayer(totalLandsatObservations.clip(studyArea), visParams, 'Total Observations Landsat');
// 显示 Sentinel-2 数据集的总观测数
Map.addLayer(totalSentinelObservations.clip(studyArea), visParams, 'Total Observations Sentinel');
// 显示 Landsat 数据集的良好观测数
Map.addLayer(goodQualityLandsatObservations.clip(studyArea), visParams, 'Good Quality Observations Landsat');
// 显示 Sentinel-2 数据集的良好观测数
Map.addLayer(goodQualitySentinelObservations.clip(studyArea), visParams, 'Good Quality Observations Sentinel');
// 打印结果
print("Total Observations Landsat:", totalLandsatObservations);
print("Total Observations Sentinel:", totalSentinelObservations);
print("Good Quality Observations Landsat:", goodQualityLandsatObservations);
print("Good Quality Observations Sentinel:", goodQualitySentinelObservations);
// 将结果图像转换为浮点型
var resultImageFloatLandsat = totalLandsatObservations.toFloat();
var resultImageFloatSentinel = totalSentinelObservations.toFloat();
var resultImageFloatLandsatGood = goodQualityLandsatObservations.toFloat();
var resultImageFloatSentinelGood = goodQualitySentinelObservations.toFloat();
// 将结果图像导出为 GeoTIFF 格式
Export.image.toDrive({
image: resultImageFloatLandsat,
description: 'observations_image_total_landsat', // 输出文件的描述
folder: 'GEE_exports', // 输出文件的目标文件夹
region: studyArea.geometry(), // 输出的区域
scale: 30, // 输出的分辨率
maxPixels: 1e9 // 最大像素数
});
Export.image.toDrive({
image: resultImageFloatSentinel,
description: 'observations_image_total_sentinel', // 输出文件的描述
folder: 'GEE_exports', // 输出文件的目标文件夹
region: studyArea.geometry(), // 输出的区域
scale: 30, // 输出的分辨率
maxPixels: 1e9 // 最大像素数
});
Export.image.toDrive({
image: resultImageFloatLandsatGood,
description: 'observations_image_good_landsat', // 输出文件的描述
folder: 'GEE_exports', // 输出文件的目标文件夹
region: studyArea.geometry(), // 输出的区域
scale: 30, // 输出的分辨率
maxPixels: 1e9 // 最大像素数
});
Export.image.toDrive({
image: resultImageFloatSentinelGood,
description: 'observations_image_good_sentinel', // 输出文件的描述
folder: 'GEE_exports', // 输出文件的目标文件夹
region: studyArea.geometry(), // 输出的区域
scale: 30, // 输出的分辨率
maxPixels: 1e9 // 最大像素数
});
图1 统计结果