使用Google Earth Engine下载Sentinel-2影像数据
·
使用Google Earth Engine下载Sentinel-2影像数据
本文将详细介绍如何使用Google Earth Engine(GEE)下载指定区域和时间的Sentinel-2卫星影像数据,并重点解析影像合成的不同方案。
代码概述
本代码实现了以下功能:
- 设置感兴趣区域(ROI)
- 定义影像导出函数
- 生成指定时间范围的月度列表
- 按月获取并处理Sentinel-2影像
- 导出处理后的影像数据
代码详细解读
1. 设置感兴趣区域(ROI)
var collectionName = 'users/loyf0125/keerqin';
var roi = ee.FeatureCollection(collectionName);
这部分代码定义了要下载影像的地理区域。ROI是从GEE的资产库中加载的矢量数据集,指定了科尔沁区域的范围。
2. 定义导出函数
function exportImageByMonth(image, region, yearMonth, datasetType) {
Export.image.toDrive({
image: image,
description: "Drive-Sentinel2-" + datasetType + "-" + yearMonth,
fileNamePrefix: "Sentinel2_" + datasetType + "_" + yearMonth,
folder: "sen2/" + "keerqin/" + yearMonth + "_" + datasetType,
scale: 10,
region: region,
maxPixels: 1e13,
fileFormat: "GeoTIFF",
crs: "EPSG:4326"
});
}
该函数负责将处理后的影像导出到Google Drive,关键参数包括:
scale: 10米分辨率maxPixels: 允许导出的最大像素数crs: 使用WGS84坐标系
3. 生成时间序列
var yearMonths = [];
for (var year = 2024; year <= 2025; year++) {
var startMonth = (year === 2024) ? 1 : 1;
var endMonth = (year === 2025) ? 8 : 12;
for (var month = startMonth; month <= endMonth; month++) {
var monthStr = month < 10 ? '0' + month : '' + month;
yearMonths.push(year + '-' + monthStr);
}
}
生成从2024年1月到2025年8月的月度时间序列,用于按月份获取影像。
4. 影像处理核心部分
var dataset = ee.ImageCollection('COPERNICUS/S2_HARMONIZED')
.filterBounds(roi)
.filterDate(startDate, endDate)
.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 10))
.select(['B4', 'B3', 'B2', 'B8']);
var mosaicImage = dataset.median().clip(roi);
影像合成的可选方案详解
当前方案:中值合成(Median Composite)
var mosaicImage = dataset.median().clip(roi);
优点:
- 有效去除异常值(如云、阴影等)
- 保留典型的地物反射特征
- 对噪声有较好的鲁棒性
缺点:
- 可能丢失某些重要的瞬时信息
- 对于变化监测不够敏感
替代方案1:均值合成(Mean Composite)
var mosaicImage = dataset.mean().clip(roi);
适用场景:
- 需要平均反射率的研究
- 大区域的地表覆盖分类
替代方案2:最大值合成(Max Composite)
var mosaicImage = dataset.max().clip(roi);
适用场景:
- 植被监测(突出植被最茂盛时期)
- 洪水淹没范围识别
替代方案3:最小值合成(Min Composite)
var mosaicImage = dataset.min().clip(roi);
适用场景:
- 水体提取(水体的反射率通常最低)
- 阴影区域分析
替代方案4:质量波段加权合成
// 首先添加质量评估波段
var datasetWithQA = dataset.map(function(image) {
return image.addBands(image.select('QA60'));
});
// 使用质量波段进行合成
var mosaicImage = datasetWithQA.qualityMosaic('QA60').clip(roi);
优势:
- 自动选择质量最好的像素
- 有效去除云和阴影的影响
替代方案5:按时间排序的最新影像
var mosaicImage = dataset.sort('system:time_start', false).first().clip(roi);
适用场景:
- 需要最新可用影像的情况
- 应急响应和灾害监测
替代方案6:自定义 reducer 合成
var mosaicImage = dataset.reduce(ee.Reducer.percentile([25, 50, 75])).clip(roi);
优势:
- 可以同时获取多个百分位数值
- 更灵活的数据统计分析
完整代码
// 设置感兴趣区域 ROI
var collectionName = 'users/loyf0125/keerqin';
var roi = ee.FeatureCollection(collectionName);
// 定义导出影像数据函数,包含年月参数
function exportImageByMonth(image, region, yearMonth, datasetType) {
Export.image.toDrive({
image: image,
description: "Drive-Sentinel2-" + datasetType + "-" + yearMonth,
fileNamePrefix: "Sentinel2_" + datasetType + "_" + yearMonth,
folder: "sen2/" + "keerqin/" + yearMonth + "_" + datasetType,
scale: 10,
region: region,
maxPixels: 1e13,
fileFormat: "GeoTIFF",
crs: "EPSG:4326"
});
}
// 生成2024年1月至2025年8月的年月列表
var yearMonths = [];
for (var year = 2024; year <= 2025; year++) {
var startMonth = (year === 2024) ? 1 : 1;
var endMonth = (year === 2025) ? 8 : 12;
for (var month = startMonth; month <= endMonth; month++) {
var monthStr = month < 10 ? '0' + month : '' + month;
yearMonths.push(year + '-' + monthStr);
}
}
// 遍历每个月进行数据处理和导出
yearMonths.forEach(function(yearMonth) {
// 计算月份的开始和结束日期
var startDate = yearMonth + '-01';
var endDate = ee.Date(startDate).advance(1, 'month').format('YYYY-MM-dd');
// 获取 Sentinel-2 数据集
var dataset = ee.ImageCollection('COPERNICUS/S2_HARMONIZED')
.filterBounds(roi)
.filterDate(startDate, endDate)
.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 10))
.select(['B4', 'B3', 'B2', 'B8']);
// 对影像进行镶嵌和裁切(中值合成方案)
var mosaicImage = dataset.median().clip(roi);
// 导出影像数据
exportImageByMonth(mosaicImage, roi, yearMonth, 'S2');
// 可视化设置
var visualization = {
bands: ['B4', 'B3', 'B2'],
min: 0.0,
max: 3000,
gamma: 1.4,
};
// 添加每月影像到地图
Map.addLayer(mosaicImage, visualization, 'Sentinel-2 ' + yearMonth);
});
// 在地图中心显示感兴趣区
Map.centerObject(roi, 7);
Map.addLayer(roi, { color: "red" }, "ROI");
总结
本文详细介绍了使用GEE下载Sentinel-2影像的完整流程,并重点讨论了影像合成的多种方案。不同的合成方法适用于不同的研究目的,用户应根据具体需求选择合适的合成策略。中值合成作为默认方案,在大多数情况下都能提供较好的结果,但在特定应用场景下,其他合成方法可能更加合适。
通过灵活运用这些技术,研究人员可以高效地获取和处理大范围的遥感影像数据,为各种地学研究和应用提供数据支持。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)