朋友们,大家好!本次我们基于Sentinel-2数据合成每个月的影像,并进行可视化与导出,需要的朋友只需调整研究区和时间段运行即可。![]()
var roi = ee.Geometry.Polygon(
[[[105.63823548602097, 37.99094358768747],
[105.63823548602097, 37.955895702314926],
[105.68149415301316, 37.955895702314926],
[105.68149415301316, 37.99094358768747]]], null, false);
var startYear = 2023;
var endYear = 2024;
var s2 = ee.ImageCollection("COPERNICUS/S2_SR_HARMONIZED");
function cloudMask(image) {
var scl = image.select('SCL');
var mask = scl.eq(3).or(scl.gte(8).and(scl.lte(10))).eq(0);
return image.select(['B.*'])
.updateMask(mask);
}
function getMonths(year) {
var isLeapYear = (year % 4 === 0 && year % 100 !== 0) || (year % 400 === 0);
return [
{ name: '01', end: 31 },
{ name: '02', end: isLeapYear ? 29 : 28 },
{ name: '03', end: 31 },
{ name: '04', end: 30 },
{ name: '05', end: 31 },
{ name: '06', end: 30 },
{ name: '07', end: 31 },
{ name: '08', end: 31 },
{ name: '09', end: 30 },
{ name: '10', end: 31 },
{ name: '11', end: 30 },
{ name: '12', end: 31 }
];
}
ee.List.sequence(startYear, endYear).getInfo().forEach(function(year) {
var months = getMonths(year);
months.forEach(function(month, index) {
var name = year + '_' + month.name;
var start = ee.Date.fromYMD(year, index + 1, 1);
var end = ee.Date.fromYMD(year, index + 1, month.end);
var image = s2.filterBounds(roi)
.filterDate(start, end)
.map(cloudMask)
.median()
.clip(roi)
.toUint16();
print(image)
Map.addLayer(image, { min: 0, max: 1500, bands: ['B4', 'B3', 'B2'] }, name, false);
Export.image.toDrive({
image: image,
scale: 10,
maxPixels: 1e13,
region: roi,
crs: 'EPSG:4326',
description: name,
folder: 'Monthly_composite'
});
});
});