【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
。
? 改動后,你的代碼應該能順利運行! 🚀