(未完)超超超详版Sentinel2-L1C 数据获取及预处理 | hello,GEE!
2025年11月5号傍晚编者注:
已完成对GEE和哨兵数据的介绍,今晚应该无法继续推进,待明后考试结束再来补上!(小编硬盘烧过一次之后的习惯,万事不过夜哈哈哈哈哈)
前言
初探GEE🏄
这一篇小编从零开始讲起,首先跟大家介绍GEE是什么、能干什么,先解决认识层面的问题。然后跟大家介绍全文将基于的数据:Sentinel-2 L1C,了解数据什么样的,我们要用GEE来做怎样的处理,得到什么样的结果。第三第四部分就是超超超详细且完整的在GEE获取Sentinel-2L1C并完成云掩膜处理的流程及代码。
一、认识GEE
Google Earth Engine 是一款用于大规模地理空间分析的 Google Cloud 产品。它将 PB 级的卫星图像和地理空间数据集目录与行星级计算相结合,以加快环境研究和应用的速度。下面小编从主要功能、开发环境、包含的数据集、支持的Earth Engine对象类来向大家介绍。
(一)主要功能
GEE 以 “数据云端化 + 计算分布式 + 分析智能化” 为核心,覆盖地理空间分析的全流程需求:
1. 大规模数据整合与管理
- 集成全球多源遥感、气象、地形等数据(PB 级规模),无需本地下载即可直接调用(如用户研究中直接调用 Sentinel-2、MERRA2 等数据)。(这个真的很硬,尤其是研究的时间跨度很大的时候)
- 支持自定义数据上传(如 Shapefile 行政区边界、CSV 点数据),实现 “自有数据 + 云端数据” 的融合分析。(比如我们要研究北京区域,就可以先导入我们得到的北京区划,和云端的影像数据等协同处理。)
2. 分布式计算加速
- 依托 Google 云平台的分布式架构,处理时间序列分析、大范围空间统计时效率比本地计算高 10-100 倍(如年度 AOD 反演、全球植被变化监测可在小时级完成)。
- 内置并行计算逻辑,无需手动配置集群,代码层面即可实现大规模数据的并行处理。
3. 遥感分析工具链
- 内置上千个遥感专用函数:包括去云(如 Sentinel-2 Cloud Score+)、指数计算(NDVI、EVI、AOD 反演模型)、机器学习(随机森林、深度学习框架接口)等。
- 支持栅格与矢量数据的无缝交互:可快速实现 “遥感影像提取特征→矢量边界裁剪→统计分析” 的全流程。
4. 多领域应用支撑
- 环境监测:全球森林覆盖变化、冰川消融、城市扩张监测。
- 气候变化:长时间序列气象数据(如 MERRA2、ERA5)与遥感数据融合,分析气候要素对生态系统的影响。
- 农业与生态:作物物候监测、植被生产力估算、生态保护区评估。
- 灾害应急:洪涝、火灾的实时监测与损失评估(如结合 Sentinel-1 雷达数据监测洪水范围)。
(二)开发环境
GEE 提供在线代码编辑器和本地 Python 环境两种开发方式,兼顾易用性与灵活性:
1. 在线代码编辑器(JavaScript 为主)
- 界面组成:
- 代码编辑区(new script):编写 JavaScript 代码,支持语法高亮、自动补全。
- 地图显示区:实时预览数据可视化结果(如遥感影像、矢量边界)。
- 控制台(Console):输出代码运行结果、调试信息。
- 资产(Assets):管理自定义上传的数据(如 Shapefile、CSV、自有遥感影像)。
- 优势:零配置即可上手,适合快速验证分析思路、可视化结果。而且代码规则要求比较宽泛,对小白友好哈哈。

2. 本地 Python 环境(earthengine-api)
通过 pip install earthengine-api 安装 Python 库,再通过 earthengine authenticate 完成账号授权。
这个小编目前没有试,之后需要移到本地处理的话,再来更新!
(三)数据集
GEE 集成了全球覆盖、多源异构的地理空间数据集,涵盖以下类别:
1. 光学遥感数据
| 数据集 ID | 来源 / 传感器 | 分辨率 / 时间分辨率 | 典型用途 |
|---|---|---|---|
COPERNICUS/S2_L1C | 欧空局 / Sentinel-2 | 10-60m/5 天(双星) | 高分辨率 AOD 反演、土地覆盖分类 |
LANDSAT/LC09/C02/T1_L2 | 美国地质调查局 / Landsat-9 | 30m/16 天 | 长时间序列地表变化分析 |
MODIS/061/MCD43A4 | NASA/MODIS | 500m/16 天 | 全球植被指数(NDVI)监测 |
2. 雷达遥感数据
| 数据集 ID | 来源 / 传感器 | 分辨率 / 时间分辨率 | 典型用途 |
|---|---|---|---|
COPERNICUS/S1_GRD | 欧空局 / Sentinel-1 | 10-100m/6 天 | 洪水监测、地表形变分析 |
JAXA/ALOS/PALSAR-2 | 日本宇航局 / ALOS-2 | 10-100m/46 天 | 森林生物量估算、地形测绘 |
3. 气象与气候数据
| 数据集 ID | 来源 | 分辨率 / 时间分辨率 | 典型用途 |
|---|---|---|---|
NASA/MERRA-2 | NASA | 0.5°/ 逐小时 | 大气参数(TQV、TO3)提取 |
ECMWF/ERA5/HOURLY | 欧洲中期天气预报中心 | 0.25°/ 逐小时 | 高精度气象再分析(风、温、压) |
NOAA/PERSIANN-CDR | NOAA | 0.25°/ 日 | 全球降水监测 |
4. 地形与地理数据
| 数据集 ID | 来源 | 分辨率 | 典型用途 |
|---|---|---|---|
COPERNICUS/DEM/GLO30 | 欧空局 | 30m | 地形高程分析、流域提取 |
OpenStreetMap | OSM 社区 | 矢量数据 | 路网、建筑、行政边界提取 |
5. 社会经济与生态数据
| 数据集 ID | 来源 | 分辨率 / 时间分辨率 | 典型用途 |
|---|---|---|---|
WORLDPOPS/POP | WorldPop | 100m / 年 | 人口密度分析 |
FAO/GAEZ/v4/land suitability | 粮农组织 | 1km | 土地适宜性评估 |
这一篇我们只拿哨兵数据来认识认识GEE,之后小编用到大气再分析等数据的时候再跟大家一起分享~
(四)Earth Engine 对象类
GEE 以对象化编程为核心,所有数据和操作都围绕以下核心对象展开:
1. ee.Image(栅格影像对象)
- 定义:表示单幅栅格影像(如 1 景 Sentinel-2 影像、1 幅 DEM)。
- 核心操作:
- 波段选择:
image.select(['B2', 'B3', 'B4']) - 数学运算:
image.add(10)(所有像元加 10)、image.multiply(2) - 空间裁剪:
image.clip(beijing)(裁剪到北京边界)
- 波段选择:
- 2.
ee.ImageCollection(栅格影像集合对象)
- 定义:表示多幅栅格影像的集合(如多年 Sentinel-2 影像、多景 MODIS 影像)。
- 核心操作:
- 时间筛选:
col.filterDate('2024-01-01', '2024-12-31') - 空间筛选:
col.filterBounds(beijing) - 聚合运算:
col.mean()(计算集合中影像的均值合成)
- 时间筛选:
- 3.
ee.Feature与ee.FeatureCollection(矢量对象)
ee.Feature:表示单个矢量要素(如一个测站点、一条河流)。ee.FeatureCollection:表示多个矢量要素的集合(如多个测站、行政边界)。
4. ee.Geometry(几何对象)
- 定义:表示点、线、面等几何形状,是矢量要素的空间基础。
- 常用几何类型:
Point(点)、LineString(线)、Polygon(面)。
OK相信现在大家应该对GEE有了一些了解,知道它能为我们提供什么之后,接下来我们就来看看我们要处理的数据👀👀👀😎
(编者注:GEE官方文档中给出了详细的入门指南,包含GEE的简介、相关概念、数据的分析处理、数据管理等全方位的介绍,大家可以点击下方链接获取详情,小编就不在此过多赘述啦👇)
GEE官方文档
https://developers.google.com/earth-engine/guides
二、Sentinel-2 L1C 简介
哨兵二号(Sentinel-2)是欧洲航天局(ESA)哥白尼计划的核心卫星任务之一,旨在提供高分辨率多光谱遥感数据,服务于陆地监测、环境管理、农业和灾害应急等领域。L1C 是其数据产品的一个关键级别,以下从数据定义、技术参数、获取方式、处理流程等维度详细介绍。
(一)数据基本定义与分级
1. 哨兵二号卫星概况
- 卫星组成:由两颗卫星(Sentinel-2A、Sentinel-2B)组成,分别于 2015 年和 2017 年发射,形成双星星座。
- 重访周期:单颗卫星重访周期为 10 天,双星协同后重访周期缩短至5 天,可实现全球陆地(除极区)的高频次观测。
2. L1C 数据的定义与定位
Sentinel-2 数据分为多个级别,L1C 属于 “大气表观反射率产品”,是经过以下预处理的原始数据:
- 正射校正(Orthorectification):消除地形起伏导致的几何畸变。
- 亚像元级几何校正:确保像元定位精度在 10m 以内。
- 辐射定标:将传感器原始数据转换为大气表观反射率(Top-of-Atmosphere Reflectance)。
对比其他级别:
- L2A:在 L1C 基础上完成大气校正(去云、气溶胶、水汽等影响),输出地表反射率,适合直接用于地表参数反演。
- L1B:仅完成辐射定标,未进行几何校正,一般不直接用于科研。
(二)技术参数:光谱、空间与时间分辨率
1. 光谱波段(13 个波段,覆盖可见光到短波红外)
哨兵二号 L1C 数据包含 13 个光谱波段,不同波段的波长、空间分辨率和应用场景差异显著。以下是做研究高频使用的波段(尤其是气溶胶、植被、水体研究):
| 波段编号 | 波长范围(nm) | 空间分辨率(m) | 带宽(nm) | 典型应用 |
|---|---|---|---|---|
| B1 | 443 | 60 | 20 | 气溶胶监测、海岸带分析 |
| B2 | 496 | 10 | 65 | 蓝波段,植被、水体识别 |
| B3 | 560 | 10 | 35 | 绿波段,植被健康监测 |
| B4 | 665 | 10 | 30 | 红波段,植被覆盖与分类 |
| B8 | 835 | 10 | 115 | 近红外波段,植被生物量估算 |
| B11 | 1610 | 20 | 90 | 短波红外 1,土壤湿度、雪识别 |
| B12 | 2200 | 20 | 180 | 短波红外 2,云与冰区分 |
2. 空间与时间分辨率
- 空间分辨率:分为 10m(B2-B4、B8)、20m(B5-B7、B11-B12)、60m(B1、B9、B10)三个级别,可满足从精细地物(如建筑、农田)到宏观格局(如区域植被覆盖)的观测需求。
- 时间分辨率:双星协同下 5 天 / 次,单星 10 天 / 次,能捕捉短时间尺度的地表变化(如作物物候、洪水演进)。
(三)数据获取方式(依托 Google 账号或欧空局平台)
1. Google Earth Engine(GEE)
若你有 Google 账号,可通过 GEE 直接调用哨兵二号 L1C 数据,步骤如下:
- 登录 GEE 平台:https://earthengine.google.com/
- 调用数据集:在代码中使用
ee.ImageCollection("COPERNICUS/S2_L1C")加载数据。 - 筛选条件:按时间、空间、云量筛选数据。(现有脚本是很丰富的,家人们可以根据自己的需要在官方提供的脚本或网站自行检索获取)
- 处理与导出:在 GEE 中完成去云、波段提取等操作后,可导出像元值或影像到 Google Drive(15G固定可用)。
2. 欧空局 Copernicus Data Space 获取(适合下载完整影像本地处理)
若需下载完整影像到本地,可通过欧空局数据平台:
- 注册账号:访问Copernicus Data Space,完成免费注册。
- 数据筛选:
- 选择 “Sentinel-2” 产品,数据级别选 “L1C”;
- 按 “地理范围”(如北京市边界)、“时间范围”(如 2024 年)、“云量”(如≤20%)筛选;
- 下载数据:选择符合条件的影像,下载为
.zip压缩包,解压后包含 L1C 数据文件(如.SAFE格式)。
如非必要,大数据量不推荐!(10年118g哈哈哈哈)
(四)数据处理流程
哨兵二号 L1C 数据在使用前需进行去云、波段重采样、时空匹配等处理,以下是典型流程(均基于java脚本):
1. 去云处理(核心步骤,保障数据质量)
L1C 数据自带云量信息,但需进一步筛选清晰像元。推荐使用 GEE 内置的S2_CLOUD_SCORE_PLUS模型:
var cloudMask = function(image) {// 加载Cloud Score+云掩膜数据var cloudScore = ee.ImageCollection("COPERNICUS/S2_CLOUD_SCORE_PLUS/V1").filterDate(image.date().advance(-1, "day"), image.date().advance(1, "day")).first().select("cs_cdf"); // cs_cdf:0=全遮挡,1=全清晰// 筛选cs_cdf≥0.6的像元(视为无云)return image.updateMask(cloudScore.gte(0.6));
};
var s2Clear = s2L1C.map(cloudMask);
2. 波段提取与重采样
由于不同波段分辨率不同(10m、20m、60m),需将所有波段重采样至同一分辨率(如 10m):
// 提取目标波段(如B1、B2、B3、B4、B8、B11、B12)
var s2Bands = s2Clear.select(["B1", "B2", "B3", "B4", "B8", "B11", "B12"]);// 重采样:将60m(B1)、20m(B11、B12)波段重采样至10m
var resample10m = function(image) {return image.reproject({crs: image.projection(), scale: 10}) // 重采样到10m.set(image.toDictionary(image.propertyNames())); // 保留元数据
};
var s2Resampled = s2Bands.map(resample10m);
3. 时空匹配(与其他数据协同分析)⭐
若需结合气象数据(如 MERRA2)或地基观测(如 AERONET),需确保时空一致性:
// 加载MERRA2气象数据(示例:匹配可降水蒸汽TQV)
var merra2 = ee.ImageCollection("NASA/MERRA-2").filterDate("2024-01-01", "2024-12-31").select("TQV");// 时空匹配函数:为每景Sentinel-2匹配同期MERRA2
var matchMerra2 = function(s2Img) {var time = s2Img.date();var merra2Img = merra2.filterDate(time.advance(-1, "hour"), time.advance(1, "hour")).first().resample("bilinear") // 重采样到10m.clip(s2Img.geometry());return s2Img.addBands(merra2Img);
};
var s2Merra2 = s2Resampled.map(matchMerra2);
ok现在大家对哨兵二号也有了一定的了解,那接下来,我们就要进入动手阶段啦,如何在GEE中获取想要的数据呢?请继续看!
