☰
遥感卫星参数选型:Sentinel-2波段、重访与产品级别校验
2026/11/2 7:27:56 网站建设 项目流程

简介:围绕常见遥感卫星参数与发展现状整理的PDF文档,面向遥感、GIS、环境监测与灾害评估领域的学习者和从业者,帮助快速建立SPOT、Landsat、Sentinel、JERS、ENVISAT、RADARSAT、ALOS、IRS等卫星的系列划分、参数要点与应用场景认知。压缩包内共1个PDF文件,约642KB,篇幅集中、便于检索,目录按国外常用卫星资料与中国地球观测遥感卫星发展现状组织,并延伸至陆地遥感、气象遥感等方向。已有412人学习或下载,适合课程学习、项目选星和资料查阅时对照使用。内容侧重梳理各卫星的发射时间、国别归属、主要任务、数据类型与观测能力,读者可据此快速比较不同数据源,补充遥感基础认知,也能为环境监测、灾难评估和资源管理等应用提供参数索引与查阅线索;对初次接触遥感数据源、需要快速索引卫星基本信息的读者较为友好。

1. 一份四十多页的遥感卫星参数速查表,为什么值得放在手边

上个月接了个农业监测的模拟项目,要求两周内把一套 NDVI 时序流程跑通。第一版方案我翻了三天官方 user guide,光确认 Sentinel-2 的 B8A 到底算不算 10 米波段就折腾了两个来回。后来同事甩过来一份四十多页的《常见遥感卫星参数》汇总文档,Sentinel、Landsat、SPOT、JERS、ENVISAT、RADARSAT、ALOS、IRS 加上国内陆地、气象、海洋三类卫星的轨道、传感器、波段表、产品分级和数据政策,全挤在一个文件里,选型问题一张表就能压下去。这份遥感卫星参数资料适合正在做数据源比选、影像预处理流程搭建、要写团队选型规范的遥感与 GIS 从业者,也适合刚接触多源数据、被波段编号和产品级别绕晕的新手。它不教你写算法,但能让你少在“这颗星到底能不能用”上浪费一周。

2. 参数表的四层结构:轨道、传感器、波段、产品级别

一份合格的卫星参数汇总,信息是按“能不能用 → 拍什么 → 拍多细 → 数据能不能直接算”这个顺序组织的。读的时候如果从上往下顺着翻,很容易陷进具体数字里;我一般的习惯是先跳到最后看产品级别,再倒回来确认轨道和传感器,最后才抠波段。下面按这四层拆。

2.1 轨道层:高度、倾角与重访先把可选范围框死了

选数据源最容易犯的错,是一上来就比空间分辨率。实际上轨道的三个数字先决定了你能拿到什么:高度决定单轨幅宽和分辨率的平衡点,倾角决定覆盖纬度上限,重访周期决定时间序列的采样密度。表里 Sentinel 系列这几个数字放在一起看,逻辑就很清楚。

卫星轨道高度倾角重访周期轨道类型
Sentinel-1693 km98.18°12 天(双星互补 6 天)太阳同步
Sentinel-2786 km98.5°10 天(双星互补 5 天)太阳同步
Sentinel-3814 km98.65°27 天(OLCI 全球 2 天)太阳同步
Sentinel-4约 35786 km—约 60 分钟地球静止
Sentinel-5P824 km98.742°1 天太阳同步
Sentinel-61336 km66°10 天非太阳同步

倾角略大于 90° 意味着逆行轨道,配合固定的降交点地方时,同一轨道的太阳高度角在一年内的波动被压得很小。这对多时相 NDVI、地表反射率这类需要“同光照条件对比”的应用是硬需求——如果光照角度每次差 20°,阴影和 BRDF 效应能把植被指数搅成一团玄学。反过来说,Sentinel-6 用 66° 倾角、1336 km 高度,是因为测高任务只关心海面高度,不需要稳定光照,反而要覆盖到较高纬度的海面,轨道设计就完全换了一套思路。

高度还直接和幅宽、分辨率绑在一起。693 km 的 Sentinel-1 在 IW 模式下做到 250 km 幅宽、5 m×20 m 分辨率;786 km 的 Sentinel-2 幅宽 290 km、最高 10 m 分辨率;814 km 的 Sentinel-3 为了全球 2 天覆盖,把 OLCI 的空间分辨率放到 300 m。轨道高度、幅宽、分辨率、重访这四个量互相牵制,没有哪个任务能四项全占,参数表的价值就在于让你在五分钟内看清这颗星牺牲了哪一项。

有一条实操经验:先确认目标区域的纬度,再去看倾角和轨道重叠。低纬度地区轨道重叠少,实际重访接近标称值;中高纬度相邻轨道有重叠,同一区域可能在两三天内被扫到两次,做时序时这一点会让采样间隔变得不均匀,别把标称重访当成均匀采样周期。

2.2 传感器层:主动微波、多光谱、辐射计、高度计各管一摊

轨道看的是“什么时间能拍到你”,传感器看的是“拍到了能算什么”。参数表里 Sentinel 系列的传感器类型分类很干脆:Sentinel-1 是 C 频段合成孔径雷达,Sentinel-2 是多光谱成像仪,Sentinel-3 挂了一组载荷(海陆表面温度辐射计、海洋陆地色彩仪、合成孔径雷达高度计等),Sentinel-4 是紫外可见近红外扫描光谱仪,Sentinel-5P 是多光谱对流层监测仪器,Sentinel-6 是 Ku/C 波段 nadir 指向的合成孔径雷达高度计。

传感器类型观测对象关键参数主要限制
C 频段 SAR(Sentinel-1)地表后向散射、相位、形变中心频率 5.405 GHz,带宽 0–100 MHz,峰值功率 4.368 kW几何畸变、斑点噪声、需要 DEM 正射
多光谱成像仪(Sentinel-2)可见光—近红外—短波红外反射率13 波段,12 bit 辐射量化,幅宽 290 km受云影响,需大气校正
成像光谱仪(OLCI)海洋水色、植被、大气21 波段,400–1040 nm,300 m/1.2 km幅宽大但分辨率粗,混合像元严重
双视图扫描辐射计(SLSTR)海陆表面温度、火点太阳反射波段 500 m,热红外 1 km,双视图大气校正热红外波段受水汽影响,需劈窗算法
雷达高度计(SRAL)海面高度、有效波高Ku/C 波段 nadir 指向只沿星下点轨迹,空间覆盖是线状
痕量气体光谱仪(TROPOMI)臭氧、二氧化氮、气溶胶高光谱,日覆盖全球空间分辨率公里级,像元内混合严重

SAR 和光学的差别不只是“穿不穿云”。SAR 的相位是可以拿来做干涉测量的,Sentinel-1 的 IW 模式两景影像做 InSAR,形变监测精度能到毫米级每年,这是光学影像给不了的信息。代价是 SAR 的几何是斜距成像,山区的叠掩、透视收缩必须拿 DEM 做正射校正,而且斑点噪声会让分类算法表现和光学完全不同——同一块农田,光学上是一条干净的 NDVI 曲线,SAR 上是一团需要多时相滤波才能稳住的时序。

被动光学的限制写在参数里但常被忽略:辐射分辨率和信噪比。Sentinel-2 是 12 bit 量化,辐射精度优于 5%,这个指标决定了你在做暗目标(水体、阴影)提取时的下限。如果目标反射率变化只有 1%–2%,量化噪声和大气校正残差很容易把它淹没。

2.3 波段层:中心波长和带宽决定了你能反演什么

波段表是整份文档里信息密度最高的部分,也是最容易被跳过、然后在预处理阶段翻车的部分。Sentinel-2 的 13 个波段分布很有代表性:

波段中心波长带宽原生分辨率主要用途
B1443 nm20 nm60 m海岸/气溶胶
B2490 nm65 nm10 m蓝
B3560 nm35 nm10 m绿
B4665 nm30 nm10 m红
B5705 nm15 nm20 m植被红边
B6740 nm15 nm20 m植被红边
B7783 nm20 nm20 m植被红边
B8842 nm115 nm10 m近红外
B8A865 nm20 nm20 m窄近红外
B9945 nm20 nm60 m水汽
B101375 nm20 nm60 m卷云
B111610 nm90 nm20 m短波红外
B122190 nm180 nm20 m短波红外

10 米只有 4 个(B2、B3、B4、B8),20 米 6 个,60 米 3 个。这个分组不是随便定的,它对应的是传感器的物理设计:多光谱推扫式成像仪要在幅宽和信噪比之间做平衡,宽波段能收集更多光子、支持更高的空间分辨率,窄波段则用来捕捉特定的吸收特征。B8 带宽 115 nm,做 NDVI 时信噪比好但容易受水汽吸收干扰;B8A 带宽只有 20 nm,避开 940 nm 附近的水汽吸收带,更适合做需要精确反射率的定量反演。两个都能算 NDVI,数值会有系统性差异,混用会让时序曲线出现台阶。

红边三个波段(705、740、783 nm)是 Sentinel-2 相对 Landsat 系列的优势所在。红边位置对叶绿素含量敏感,做作物长势、氮素诊断时,红边指数比单纯的 NDVI 更早饱和。但红边波段都是 20 米分辨率,想要 10 米结果就得做融合或者降尺度,这一步会把误差带进来。

Sentinel-3 的 OLCI 是另一个极端:21 个波段,光谱范围 400–1040 nm,波段宽度普遍在 2.5–40 nm 之间,为水色反演设计。Oa11(708.75 nm,带宽 10 nm)是叶绿素荧光基线,Oa17(865 nm,带宽 20 nm)用于云检测和气溶胶校正,Oa12(753.75 nm)落在氧气吸收带上。这类窄波段对波段位置精度要求极高,如果自己做波段运算时把中心波长记错 2 nm,反演结果就可能整片跑偏。SLSTR 则把通道分成两组:S1–S6 是 500 米太阳反射波段(含 1374.8 nm 卷云通道、1613.4 nm 和 2255.7 nm 短波红外),S7–S9 和 F1、F2 是 1 km 热红外通道,用于海表温度和火点辐射功率。

2.4 产品层:L1C 和 L2A 之间差着一次大气校正

很多人选完卫星、查完波段就以为结束了,真正决定工作量的其实是产品级别。Sentinel-2 从 L0 到 L2A 的分级很典型:L0 是仪器源数据包,不对外发布;L1A 解压后能定位像素;L1B 做了辐射校正(暗信号、像素响应不均、串扰、坏像元插值、60 米波段升采样);L1C 用 DEM 做正射投影,转成大气顶反射率,重采样到 10/20/60 米固定网格,附带云掩膜和 ECMWF 辅助数据,但没做大气校正;L2A 才是大气底反射率,附带场景分类图。

产品几何辐射是否含云掩膜直接可用性
L1C正射,10/20/60 m 网格大气顶反射率(TOA)有需自行大气校正
L2A正射,同网格大气底反射率(BOA)+ 场景分类有(SCL)可直接做指数计算

Sentinel-1 的分级逻辑不同,因为它有相位。L0 是原始回波;SLC 是带相位的斜距几何复数影像,用于干涉和极化分析;GRD 是多视、检波、投影到 WGS84 椭球的地距影像,只保留强度,适合做分类和变化检测;OCN 是二级海洋产品,包含风场、波浪谱和表面径向速度。选错这一层,后面的活基本白干——拿 GRD 去做 InSAR 是不可能出结果的,相位在检波那一步就丢了。

Sentinel-3 还有个时间维度上的分级:NRT 近实时产品在采集后三小时交付,NTC 非实时产品一个月后交付,文件后缀用 NR 和 NT 区分。做应急监测只能用 NRT,做气候分析用 NTC 更稳,因为后者用的辅助数据(精密轨道、改进的大气校正参数)更完整。

3. 从参数到选型:四个决策场景与一张对照表

参数表看得再熟,落到具体项目还是要做取舍。下面四个场景是我在模拟项目里反复遇到的,基本覆盖了多源数据选型的主要矛盾。

3.1 光学还是 SAR:先问“云”和“夜”

这个问题的答案不在参数表里,在项目所在区域的气候统计里。Sentinel-1 是 C 频段 SAR,全天时全天候成像,参数表里明确写了它能为陆地和海洋提供全天时全天候的雷达图像,覆盖北极海冰、日常海冰测绘、海洋环境监视、地面形变风险监测。Sentinel-2 是多光谱被动成像,云层遮挡直接导致数据不可用。

判断方式很朴素:如果目标区域全年无云窗口少于 30%,或者项目要求周级甚至更密的更新频率,光学单打独斗一定会卡住。反过来说,如果任务只需要植被指数和土地覆盖分类,SAR 的处理链路(斑点滤波、地形辐射校正、极化分解)会带来额外的工程成本,而光学数据的物理意义更直观,模型也更容易迁移。

我这里有一条血泪经验:不要用“SAR 能穿云”作为唯一理由去选 SAR。穿云只是拿到数据,拿到之后能不能解释清楚后向散射系数的变化才是关键。同一块地,土壤湿度变化、地表粗糙度变化、植被结构变化都会影响后向散射,如果不做多时相和多极化联合分析,SAR 影像看上去就是一片灰度噪声。

真正需要 SAR 的场景是形变监测。干涉宽幅模式两景影像做差分干涉,能检测到每年几毫米的地表运动,用于地面沉降、结构损坏、地下施工监测。这类应用光学完全替代不了,因为光学只能看到表面纹理,看不到几何位移。

3.2 分辨率与幅宽是一道乘法题

很多人比参数时只盯空间分辨率,忽略了幅宽,结果算数据量的时候才发现单景影像大得离谱。这里有个简单的估算法:像素总数 =(幅宽 / 分辨率)²。

Sentinel-2 单景 290 km × 290 km,10 米波段是 29000 × 29000 ≈ 8.4 亿像素,4 个 10 米波段加起来 33.6 亿像素;20 米波段 14500² × 6 ≈ 12.6 亿像素;60 米波段 4833² × 3 ≈ 0.7 亿像素。按 12 bit 存成 16 bit 算,单景未压缩数据接近 9–10 GB 量级。这意味着一个县级的时序分析,光原始数据就能上 TB,不做分块和云过滤直接读进内存,机器会当场翻车。

Sentinel-1 的 IW 模式幅宽 250 km,分辨率 5 m × 20 m,SLC 产品是复数(实部虚部各 2 字节),单景量级也在 GB 以上。EW 模式幅宽 410 km,分辨率 20 m × 40 m,适合海冰、极地和溢油监测,但幅宽大了分辨率就掉了 4 倍,做小目标检测会明显吃力。

模式幅宽分辨率入射角范围典型用途
SM(条带)80 km约 5 m × 5 m18.3°–46.8°小岛屿成像、应急支持
IW(干涉宽幅)250 km5 m × 20 m29.1°–46.0°陆地主力模式
EW(超宽幅)410 km20 m × 40 m18.9°–47.0°海冰、极地、溢油
WV(波模式)20 km × 20 km—21.6°–25.1° 或 34.8°–38.0°公海波浪谱

这四个模式的取舍逻辑很清楚:幅宽和分辨率成反比,入射角范围决定了地形起伏区的几何畸变程度。山区选 IW 的 IW1 子条带(入射角 30.86°–36.59°)比 IW3(41.75°–46.00°)叠掩少,因为入射角小,透视收缩弱。这种细节在参数表的子条带入射角表格里能查到,但需要你主动去翻。

3.3 重访周期不等于你能拿到的过境次数

参数表里 Sentinel-1 写“12 天(两星互补 6 天)”,Sentinel-2 写“10 天(两星互补 5 天)”,这两个数字很容易被当成“每 6 天 / 每 5 天一定能拿到一景”。实际差得远。

首先,双星互补的前提是两颗星都在轨正常工作,一旦其中一颗退役或降级,重访立刻退回单星水平。其次,重访是轨道回归周期,指的是卫星回到同一星下点的时间间隔,但实际能不能拍到你的区域,取决于幅宽覆盖和成像计划。Sentinel-1 的 IW 模式主要在陆地上采集,海上默认用 WV 波模式,一个 20 km × 20 km 的小条带,沿轨间隔 100 km、同入射角间隔 200 km——这意味着你在海上拿到的不是连续影像,而是一串点。第三,云量和数据可用性会进一步稀释有效观测。

我做时序分析时一般不看标称重访,而是直接在检索服务里查目标区域过去一年的实际可用影像列表,按相对轨道号分组。同一相对轨道号的影像入射角一致、几何一致,做变化检测最稳;混用不同轨道号的影像,入射角差几度就会带来后向散射或反射率的系统偏差,看起来像是地表变化,其实是几何差异。这一步是很多人时序曲线抖动的真正原因。

3.4 把七八个系列压成一张选型卡

参数表里还有 Landsat 系列、SPOT 系列、JERS、ENVISAT、RADARSAT、ALOS、IRS 以及国内陆地、气象、海洋三类卫星。这么多系列,不可能每次都从头翻,我的做法是压成一张选型卡,每个系列只留四个字段。

系列观测类型分辨率量级重访量级适用判断
Sentinel-1C 波段 SAR5–40 m6–12 天形变、海冰、全天候监测
Sentinel-2多光谱 13 波段10–60 m5–10 天植被、土地覆盖、农业
Sentinel-3水色/温度/高度计300 m–1.2 km1–2 天大尺度海洋、气候
Sentinel-5P痕量气体公里级1 天空气质量、大气成分
Sentinel-6雷达高度计星下点10 天海面高度、波高
Landsat 系列多光谱中分辨率中长周期长时序、历史对比
SPOT 系列高分辨率光学米级—十米级数天精细地物、变化检测
RADARSATSAR米级—数十米数天海冰、溢油、灾害
ALOS / JERS多光谱 / SAR十米级数十天历史存档、区域制图

这张卡的作用不是替代详细参数,而是在需求评审的前五分钟内给出方向。真正开始建流程时,再回到详细表格里抠波段、入射角、极化方式和产品级别。选型卡我一般会写进项目的 README,改一次需求就更新一次,比每次开会重新讨论快得多。

4. 把参数表接进工程:三个脚本让文档变成校验器

参数表放在 PDF 里只能查,放进代码里才能校验。下面三段脚本是我在每个影像处理项目开头都会跑一遍的,作用是把文档里的静态数字变成可执行的断言。

4.1 把波段表建成可查询的字典

第一步是把 Sentinel-2 的 13 个波段抄成结构化配置。手抄一次比每次查文档快,也方便后面做自动化。

# Sentinel-2 MSI 波段配置:cw 中心波长(nm),bw 带宽(nm),gsd 原生地面采样距离(m) S2_MSI = { "B01": {"cw": 443.0, "bw": 20.0, "gsd": 60, "name": "coastal_aerosol"}, "B02": {"cw": 490.0, "bw": 65.0, "gsd": 10, "name": "blue"}, "B03": {"cw": 560.0, "bw": 35.0, "gsd": 10, "name": "green"}, "B04": {"cw": 665.0, "bw": 30.0, "gsd": 10, "name": "red"}, "B05": {"cw": 705.0, "bw": 15.0, "gsd": 20, "name": "red_edge_1"}, "B06": {"cw": 740.0, "bw": 15.0, "gsd": 20, "name": "red_edge_2"}, "B07": {"cw": 783.0, "bw": 20.0, "gsd": 20, "name": "red_edge_3"}, "B08": {"cw": 842.0, "bw": 115.0, "gsd": 10, "name": "nir"}, "B8A": {"cw": 865.0, "bw": 20.0, "gsd": 20, "name": "nir_narrow"}, "B09": {"cw": 945.0, "bw": 20.0, "gsd": 60, "name": "water_vapour"}, "B10": {"cw": 1375.0, "bw": 20.0, "gsd": 60, "name": "cirrus"}, "B11": {"cw": 1610.0, "bw": 90.0, "gsd": 20, "name": "swir_1"}, "B12": {"cw": 2190.0, "bw": 180.0, "gsd": 20, "name": "swir_2"}, } def bands_at(gsd, table=S2_MSI): """按原生分辨率筛波段,避免把 60 m 波段当 10 m 用""" return sorted([b for b, v in table.items() if v["gsd"] == gsd]) def nearest_band(wavelength_nm, table=S2_MSI): """按中心波长找最近波段,绕过 B08/B8A 这类编号陷阱""" band, meta = min(table.items(), key=lambda kv: abs(kv[1]["cw"] - wavelength_nm)) return band, meta["cw"], meta["bw"] print(bands_at(10)) # ['B02', 'B03', 'B04', 'B08'] print(nearest_band(860)) # ('B8A', 865.0, 20.0)

这段代码的关键是三个字段的含义。cw是中心波长,决定这个波段响应哪个物理过程;bw是带宽,决定光谱分辨能力,B08 的 115 nm 和 B8A 的 20 nm 差着一个数量级,做窄吸收特征分析时不能互换;gsd是原生地面采样距离,注意是“原生”,不是产品文件里重采样后的网格大小。bands_at用来在拼接前确认哪些波段本来就该是 10 米,nearest_band用来处理不同传感器之间的波段对齐——比如要把 Landsat 的某个波段映射到 Sentinel-2,按波长找比按序号找靠谱得多。

4.2 用 rasterio 校验真实影像的波段数与分辨率

抄完表,下一步是拿真实文件对一遍。这一步能提前暴露下载错产品、解压错目录、波段顺序错乱这三类问题。

import rasterio from pathlib import Path def inspect_s2(path): """检查单景 Sentinel-2 影像的波段数、分辨率、坐标参考与像元类型""" with rasterio.open(path) as ds: info = { "count": ds.count, "crs": str(ds.crs), "res": ds.res, # (x 分辨率, y 分辨率),单位与 crs 一致 "bounds": ds.bounds, "dtype": ds.dtypes[0], "nodata": ds.nodata, } return info # 10 m 目录下应为 4 个波段,20 m 目录 6 个,60 m 目录 3 个 for res_dir, expect in [("R10m", 4), ("R20m", 6), ("R60m", 3)]: for tif in Path(f"./S2_L2A/{res_dir}").glob("*.tif"): info = inspect_s2(tif) flag = "OK" if info["count"] == expect else "MISMATCH" print(f"[{flag}] {tif.name} count={info['count']} res={info['res']} dtype={info['dtype']}")

逻辑说明:Sentinel-2 L2A 产品按分辨率分目录存放,R10m 下是 B02、B03、B04、B08 四个波段,R20m 下是 B05、B06、B07、B8A、B11、B12 六个,R60m 下是 B01、B09、B10 三个。如果你的代码假设“一个 tif 文件包含全部 13 个波段”,在这里就会直接对不上。参数上要注意ds.res返回的是坐标参考系下的像元尺寸,如果 CRS 是地理坐标(度),这个值看起来会是很小的浮点数,需要投影转换后才能和“米”对应;ds.dtypes[0]返回的是存储类型,Sentinel-2 L2A 常见的是 uint16,反射率经过 10000 缩放,忘了除以 10000 会让 NDVI 计算溢出。

我一般还会加一条断言:检查 B08 和 B8A 是否同时存在。如果只拿到 4 个 10 米波段,说明下游要么缺红边信息,要么得从 20 米上采样,两种情况的处理策略完全不同,必须在流程入口就明确。

4.3 用 STAC 检索时把参数表当过滤器

影像数量一多,手工下载不现实,常见做法是通过 STAC 接口检索。把参数表里的约束翻译成检索条件,能大幅减少无效下载。

from pystac_client import Client # 端点按你所用服务的实际地址填写,不同服务的集合命名和查询扩展支持不同 catalog = Client.open("https://<your-stac-endpoint>/v1") search = catalog.search( collections=["sentinel-2-l2a"], bbox=[116.0, 39.5, 117.0, 40.5], # 经纬度顺序:minx, miny, maxx, maxy datetime="2024-06-01/2024-06-30", query={"eo:cloud_cover": {"lt": 10}}, # 云量阈值,按项目容忍度调 limit=100, ) items = list(search.items()) print(len(items)) for it in items[:5]: print(it.id, it.properties.get("eo:cloud_cover"), it.properties.get("platform"))

逻辑说明:collections对应产品集合,写错一个字母就是空结果;bbox是经纬度顺序,和某些 GIS 工具的 x/y 顺序容易搞混;datetime用斜杠分隔起止,只写一端表示开区间;query是查询扩展,不同服务端的支持程度不一样,有的只支持部分字段,遇到不认的字段会直接忽略而不是报错,这时候检索结果会变多而不是变少,容易被误判成“数据很充足”。

参数上要盯住两个:eo:cloud_cover是整景云量百分比,不是目标区域云量,山区单景 5% 云量也可能正好压在你的研究区上;platform用来区分是 A 星还是 B 星,做辐射一致性分析时同一颗星的影像更可比。检索完之后,我习惯再拉一次processingLevel和productType字段,确认拿到的是 L2A 而不是 L1C,这一步能省掉后面一次重跑。

4.4 校验不通过时的三条路径

脚本跑出 MISMATCH 的时候,不要急着改代码,先按三条路径排查。第一条看数据本身:文件是不是下载不完整,压缩包解压时有没有中断,波段顺序在某些第三方镜像上会不会被重排。第二条看产品定义:确认下载的是 L1C 还是 L2A,两者波段数量一致但辐射量纲不同,如果流程里写死了 TOA 转 BOA 的系数,用 L2A 跑就会双重校正。第三条看代码假设:有些开源库默认按文件名排序加载波段,而 Sentinel-2 的 B8A 在字典序里排在 B08 之后、B09 之前,稍不注意就把波段索引错位了。三条都过一遍,问题基本能定位到具体某一层。

5. 避坑:参数表和真实数据对不上的五个现场

参数表是静态的,数据是动态的,两者对不上是常态。下面五条是我在模拟项目里真实踩过的,每条都按“现象 → 原因 → 解决”记下来。

5.1 B08 和 B8A 混用,NDVI 曲线出现台阶

现象:同一块农田的 NDVI 时序,中间某几期突然掉 0.05 左右,前后趋势本身是连续的,不像是物候变化。

原因:处理链里用“第 8 个波段”来取近红外,但不同产品目录下的波段数量和顺序不一样,某些批次取到的是 B8A(865 nm,带宽 20 nm),另一些取到的是 B08(842 nm,带宽 115 nm)。两者中心波长差 23 nm、带宽差近 6 倍,反射率数值有系统性差异,NDVI 自然跳变。

解决:不用波段序号,改用波段名称或中心波长匹配,就是 4.1 里那个nearest_band的用法。同时在建流程时把使用的波段名写进日志和输出元数据,出了问题能回溯。从那之后我要求所有指数计算函数的入参必须是波段名字符串,禁止传整数索引。

5.2 分辨率写着 10 米,实际是 60 米上采样

现象:做建筑区提取时,10 米产品的边缘比预期模糊很多,小目标几乎糊成一片,但文件元数据里确实写着 10 米。

原因:有些处理流程为了统一网格,把所有波段重采样到 10 米,包括原生 60 米的 B01、B09、B10。重采样只改变像素数量,不增加信息量,60 米波段的真实空间细节还是 60 米。B10 是卷云通道,很多云检测算法要用它,如果把它当成 10 米波段直接参与分类,等于给模型喂了插值出来的假细节。

解决:在处理链里为每个波段记录“原生分辨率”字段,重采样时保留来源标记,输出产品的元数据里写清楚哪几个波段是上采样的。做定量分析时,只用原生分辨率匹配的波段组合,需要跨分辨率融合就单独走融合流程并评估误差。

5.3 把标称重访当成均匀采样周期

现象:规划月度监测任务时按“5 天重访”排了 6 期,实际执行时某些月份只有 1–2 期可用,时序分析的时间间隔完全不均匀。

原因:双星互补的 5 天是理想状态,实际受三件事影响:单星故障或轨道调整会让重访退回 10 天;成像计划按陆地/海洋分模式,你所在区域可能不在优先采集列表里;云量过滤直接砍掉大半。再加上相邻轨道重叠导致某些时段集中过境、某些时段空窗,采样间隔本身就不均匀。

解决:不要用标称重访做规划,直接用检索服务查历史同期的实际可用影像,统计每个月的有效景数,按实际分布设计时间窗口。时序模型要能处理不等间隔采样,别默认输入是等间距序列。

5.4 极化方式写成双极化,下回来只有单极化

现象:筛选条件写的是 HH+HV,下载回来的影像只有 VV 一个通道,代码在读第二个通道时报错。

原因:极化配置和成像模式、采集计划绑定。IW 模式提供双极化(HH+HV 或 VV+VH)和单极化(HH 或 VV)选项,但具体某次过境用哪种配置由采集计划决定,不是所有过境都有双极化。参数表里列的是“可选项”,不是“必然项”。

解决:检索时就把极化方式作为过滤条件,而不是下载后再判断。拿到数据后先读元数据里的极化字段确认,再做后续处理。涉及极化分解的分析,必须在流程入口显式断言通道数,缺通道直接跳过这次过境,别让流程带着错误假设往下跑。

5.5 L1C 和 L2A 混着比,差异被当成地表变化

现象:两期影像做变化检测,差异图上一大片区域显示“变化”,实地核查发现地块没动过。

原因:一期是 L1C(大气顶反射率),一期是 L2A(大气底反射率)。大气校正会整体压低反射率,气溶胶多的日期压得更多,两期影像的量纲根本不在一个层面上。差异图上的“变化”其实是大气状况的差异,不是地表变化。

解决:变化检测的输入必须统一产品级别,全部用 L2A,或者全部用同一套大气校正参数自己处理 L1C。如果做不到,至少在比较前做相对辐射归一化,用两期影像里的稳定地物(深水体、裸岩、大片建筑屋顶)做线性回归校正。这条我现在写进了项目模板的检查清单,每次新建流程第一件事就是断言所有输入产品的processingLevel一致。

6. 进阶:把这份文档变成自己的元数据底座

参数表读到这个程度,就该考虑怎么让它长期发挥作用了。我的做法是把那份四十多页的文档拆成机器可读的配置,放进项目仓库的config/sensors/目录,一颗星一个 YAML,字段就是前面那几个:轨道高度、倾角、重访、传感器类型、波段表、产品级别、极化选项、数据政策。

import yaml def load_sensor(name: str) -> dict: """按卫星名加载本地参数配置,缺失字段直接抛错,避免默认值兜底""" with open(f"config/sensors/{name}.yaml", encoding="utf-8") as f: cfg = yaml.safe_load(f) required = {"orbit", "sensors", "bands", "products"} missing = required - cfg.keys() if missing: raise KeyError(f"{name} 缺少字段: {missing}") return cfg

这段的意义不在于代码本身,而在于把“查文档”变成“读配置”。流水线里所有关于波段、分辨率、重访的判断都从这个配置里取,改一处全链路生效,不用去翻 PDF 对数字。配合一个 CI 任务,每次有人新增数据源或修改参数,就跑一遍字段完整性和量纲一致性检查——中心波长必须是纳米、分辨率必须是米、重访必须是天,单位混了立刻报错。

我还会在每个项目结束时补一行记录:这次用了哪颗星、哪一级产品、哪个模式、实际有效景数是多少。攒十几个项目之后,这张表和文档里的标称参数对照着看,就能看出哪些数字是理论值、哪些接近现实。比如某个区域实际有效重访往往是标称值的两到三倍,这个倍数比任何文档都更有参考价值。

说个具体的教训。早些年做一套区域土地覆盖更新,图省事直接按文档标称的 5 天重访排了季度四期,结果整个季度只凑出两期可用影像,后面全靠插值硬撑,成果精度一塌糊涂。从那以后我每次启动新项目,都会强制走一遍“查实际可用影像 → 统计有效采样间隔 → 再定时间窗口”的流程,参数表只用来做初筛,不再用来做承诺。希望这份拆解能帮你在下一次数据源比选时,少翻几页手册,多留几个小时给真正重要的处理环节。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询