概述
本代码在Google Earth Engine (GEE)平台上实现了对ROI区域的2020年9月期间的哨兵-2卫星影像进行提取、处理和多点反射率数据的导出。主要功能包括定义多点坐标,去除云层干扰,提取指定波段的反射率数据并导出为CSV文件。
数据集介绍
使用的数据集是哨兵-2卫星影像数据集(COPERNICUS/S2_SR),该数据集提供了高分辨率的多光谱影像,适用于土地覆盖分类、农业监测和环境监测等应用。
流程与功能
- 定义多点坐标:将度分秒格式的坐标转换为十进制度格式,并创建一个FeatureCollection以表示多个点。
- 显示研究区:通过矢量文件(geometry)获取水体范围,定义研究区,并将其显示在地图中。
- 去云处理:通过选择影像中的质量评估带(QA60),去除云层和卷云。
- 筛选影像数据:根据研究区域、时间范围和云量百分比过滤影像数据,并应用去云函数。
- 可视化影像:设置可视化参数,并将影像加载到地图中进行显示,同时将多点坐标显示在地图上。
- 提取反射率数据:选择指定波段(B4),从影像中提取各点处的反射率数据,并将结果展平成一个FeatureCollection。
- 导出数据:将提取的反射率数据导出为CSV文件,便于进一步分析和应用。
运行结果
运行结果是生成了一幅覆盖ROI区域的哨兵-2卫星影像图,该图去除了云层干扰,并在地图上进行了展示。同时,从影像中提取的各点反射率数据被导出为CSV文件,便于后续的分析和研究工作,可以高效地获取和处理指定区域和时间范围内的高质量多点反射率数据,便于后续的环境监测和科学研究。
完整代码:
//--------------------------------------------------------------------------
// 定义多点坐标(度分秒格式)
var pointsCoordinates = [
[30, 47, 40.9, 122, 21, 7.40],
[30, 49, 7.9, 122, 11, 49.1],
[30, 49, 22.0, 122, 4, 49.2],
[30, 49, 26.7, 121, 59, 49.8],
[30, 49, 7.4, 121, 54, 49.8],
[30, 45, 32.5, 121, 48, 25.0],
[30, 39, 54.5, 121, 47, 50.8],
[30, 31, 57.4, 121, 46, 53.1],
[30, 25, 26.8, 121, 46, 7.1],
[30, 18, 50.8, 121, 45, 19.8],
[30, 10, 31.5, 121, 44, 23.6],
[30, 0, 8.6, 121, 43, 38.7],
[30, 1, 20.2, 121, 47, 23.5]
];
// 将度分秒格式的坐标转换为十进制度格式
var pointsCoordinatesDecimal = pointsCoordinates.map(function(coords) {
var lon = coords[3] + coords[4] / 60 + coords[5] / 3600; // 经度的度分秒转为十进制度
var lat = coords[0] + coords[1] / 60 + coords[2] / 3600; // 纬度的度分秒转为十进制度
return [lon, lat];
});
// 创建一个 FeatureCollection
var points = ee.FeatureCollection(pointsCoordinatesDecimal.map(function(coords, index) {
var point = ee.Geometry.Point(coords);
var name = 'Point_' + (index + 1); // 构建唯一的名称
return ee.Feature(point, { name: name }); // 添加属性信息,命名
}));
// 在地图上添加多点坐标
//Map.addLayer(points, {color: 'red'}, 'CGCS2000 Points', true, null); // 设置不透明度为默认值
Map.setCenter(121.9, 30.5, 9); // 将地图中心定位到多点坐标的中心位置
// 设置地图的投影和坐标系为 CGCS2000
Map.setOptions('satellite', { crs: 'EPSG:4479', crsTransform: [1, 0, 0, 0, 1, 0] });
//----------------------------------------------------------------------------
//水体提取
//定义研究区,并将定义的研究区显示在下方中间
var geometry = table; //water-shp
Map.centerObject(geometry,10);
//去云处理
function maskS2clouds(image) {
var qa = image.select('QA60');
// 第10和11位分别是云和卷云。位移运算去云
var cloudBitMask = 1 << 10;
var cirrusBitMask = 1 << 11;
// 这两个标志都应设为零,表示条件明确。
var mask = qa.bitwiseAnd(cloudBitMask).eq(0)
.and(qa.bitwiseAnd(cirrusBitMask).eq(0));
return image.updateMask(mask).divide(10000);
}
//筛选数据
var filteredSentinel2 = ee.ImageCollection('COPERNICUS/S2_SR')
.filterDate('2020-09-01', '2020-09-30')
// 预先过滤以获得较少的云量
.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE',20))
.filterBounds(geometry)
.map(maskS2clouds);
//可视化
var visualization = {
min: 0.0,
max: 0.3,
bands: ['B4', 'B3', 'B2'],
};
//加载影像并居中显示
Map.addLayer(geometry);
Map.addLayer(filteredSentinel2.mean().clip(geometry), visualization, 'RGB');
Map.addLayer(points, {color: 'red'}, 'CGCS2000 Points', true, null); //置顶点坐标图层
//------------------------------------------------------------------------------------
// 定义要提取的波段
var bandToExtract = 'B4';
// 提取各点处的反射值
var extractedData = filteredSentinel2.map(function(image) {
var values = image.select(bandToExtract).sampleRegions({
collection: points,
scale: 10, //scale参数决定了在点位周围进行采样的像素大小
tileScale: 16 // 可选参数,用于处理大型数据集
});
return values;
}).flatten(); // 将结果展平成一个 FeatureCollection
// 打印结果
print('Extracted data:', extractedData);
// 将结果导出为 CSV 文件
Export.table.toDrive({
collection: extractedData,
description: 'extracted_data',
fileFormat: 'CSV'
});
//------------------------------------------------------------------------------------