【GEE学习笔记】报错解决:Sentinel-2 数据集分为 L1C(大气顶层)和 L2A(地表反射率),如何选择波段进行去云处理?
【GEE学习笔记】报错解决:Sentinel-2 数据集分为 L1C(大气顶层)和 L2A(地表反射率),如何选择波段进行去云处理?
文章目录
- 【GEE学习笔记】报错解决:Sentinel-2 数据集分为 L1C(大气顶层)和 L2A(地表反射率),如何选择波段进行去云处理?
- 报错信息
- ⚠️ 报错原因分析
- ✅ 解决方案
- 方案 1:改用 `COPERNICUS/S2_SR` 数据集
- 方案 2:改用 `MSK_CLASSI_OPAQUE` 波段
- 推荐方案
欢迎宝子们点赞、关注、收藏!欢迎宝子们批评指正!
祝所有的硕博生都能遇到好的导师!好的审稿人!好的同门!顺利毕业!
大多数高校硕博生毕业要求需要参加学术会议,发表EI或者SCI检索的学术论文会议论文。详细信息可关注VX “
学术会议小灵通
”或参考学术信息专栏:https://blog.csdn.net/gaoxiaoxiao1209/article/details/146181282
报错信息
RGB Image: Tile error: Error in map(ID=20230901T043711_20230901T044129_T46RCT):
Image.select: Band pattern 'QA60' did not match any bands. Available bands: [B1, B2, B3, B4, B5, B6, B7, B8, B8A, B9, B10, B11, B12, MSK_CLASSI_OPAQUE, MSK_CLASSI_CIRRUS, MSK_CLASSI_SNOW_ICE]
你的代码报错的原因是 QA60
波段不存在,但是你的 maskS2clouds(image)
函数中尝试选择 QA60
进行去云处理。
⚠️ 报错原因分析
Sentinel-2
数据集分为 L1C(大气顶层)和 L2A(地表反射率):
COPERNICUS/S2
(L1C)没有QA60
波段,但有MSK_CLASSI_OPAQUE
、MSK_CLASSI_CIRRUS
等。COPERNICUS/S2_SR
(L2A) 有QA60
波段,用于标记云和卷云。
你的代码使用的是 COPERNICUS/S2
(L1C 级别),但 QA60
只在 COPERNICUS/S2_SR
(L2A 级别)中可用,因此 image.select('QA60')
失败,导致代码崩溃。
✅ 解决方案
方案 1:改用 COPERNICUS/S2_SR
数据集
如果你希望继续使用 QA60
去云,需要将数据集换成 COPERNICUS/S2_SR
:
var dataset = ee.ImageCollection('COPERNICUS/S2_SR') // 改成 S2_SR 版本.filterBounds(roi).filterDate('2023-05-01', '2023-10-31').filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 10)).map(maskS2clouds).median().clip(roi);
- 🔹 优点:可以使用
QA60
进行去云,适合研究 地表反射率 - 🔹 缺点:部分地区 L2A 级别数据可能不可用
方案 2:改用 MSK_CLASSI_OPAQUE
波段
如果仍要使用 COPERNICUS/S2
,可以改用 MSK_CLASSI_OPAQUE
(不透明云掩膜)代替 QA60
:
function maskS2clouds(image) {var mask = image.select('MSK_CLASSI_OPAQUE').eq(0); // 0 表示无云return image.updateMask(mask).divide(10000);
}
- 🔹 优点:适用于
COPERNICUS/S2
数据集 - 🔹 缺点:可能不如
QA60
精确
推荐方案
- 如果 可以 使用
COPERNICUS/S2_SR
,请使用 方案 1,因为QA60
更适合云去除。 - 如果 必须 使用
COPERNICUS/S2
,请使用 方案 2,用MSK_CLASSI_OPAQUE
代替QA60
。
✅ 改动后,你的代码应该能顺利运行! 🚀