资讯详情

遥感卫星参数速查:轨道、幅宽、重访与Sentinel选型指南

📅 2026/10/28 14:31:20 | 华诺云谱 👁 阅读
遥感卫星参数速查:轨道、幅宽、重访与Sentinel选型指南
简介面向遥感入门学习者、科研人员与工程应用者的卫星参数速查手册围绕常见遥感卫星的轨道与传感器参数、发展脉络及应用场景展开帮助读者快速建立从 SPOT、Landsat、Sentinel 到 JERS、ENVISAT、RADARSAT、ALOS、IRS 的知识框架。PDF 文档以目录分节组织先梳理国外常用卫星资料再延伸至中国地球观测遥感卫星发展现状涵盖陆地、气象等类别便于按卫星系列检索与横向对比也可作为课程学习、项目选星和文献阅读时的参考。压缩包仅含 1 个 PDF 文件大小约 642KB轻量易读适合打印或移动端翻阅。目前已有 412 人学习说明其在遥感参数查询与知识梳理方面具有一定参考价值。读者可从中获取各卫星的发射时间、主要用途、数据特点及发展状况并借目录结构形成较完整的遥感卫星参数认知。1. 摸清这份遥感卫星参数速查表它到底能替你省掉哪几步遥感卫星参数这类东西平时没人愿意读真到要下一个项目的时候又绕不开。上个月有个做地表覆盖的同学拿着需求来问某内陆湖区近三年、每季度一景、要能分清水体和湿地预算只够走一条数据链选哪颗星。这种问题答不上来往往不是算法不够而是手上没有一张把轨道、重访、幅宽、波段摆在一起对照的表。这份资料干的就是这件事。它把 Sentinel、Landsat、SPOT、JERS、ENVISAT、RADARSAT、ALOS、IRS 这些常用遥感卫星系列的轨道参数、载荷能力、波段设置、产品分级整理成一份可直接查的手册Sentinel 那一部分细到采集模式、入射角分档、OLCI 二十一个波段的用途都列了出来国内陆地、气象、海洋三类卫星的发展脉络也一并收了进去。它不是教程是选型和预处理阶段的对照表做遥感应用、数据采购、项目排期的人把它放在手边能少走不少回头路。2. 先算再下用轨道、幅宽、重访周期判断一颗星能不能接你的活参数表最容易犯的用法是看分辨率选星结果数据下回来才发现目标纬度拍不全或者等一景等了半个月。轨道、幅宽、重访这三个量是绑在一起的任何一个单独看都没有意义。这一章把它们拆开再合起来算一遍。2.1 轨道高度与倾角先确认目标纬度有没有被星下点覆盖倾角是轨道面和赤道面的夹角对圆轨道来说星下点能到达的最高纬度约等于倾角。这条规则看着朴素却是筛掉一批候选星最快的办法。资料里 Sentinel-1 倾角 98.18°、Sentinel-2 是 98.5°、Sentinel-3 是 98.65°都在 98° 附近属于近极地太阳同步轨道南北极圈以内都能覆盖而且过境地方时基本固定同一地区每次成像的光照条件接近做时间序列对比时省掉一大堆辐射归一化的麻烦。Sentinel-6 的倾角是 66°属于非太阳同步轨道星下点最高只到南北纬 66° 附近它的任务是测全球海面高度不需要覆盖极区也不需要固定地方时。这个差别在选型时是要命的。如果目标区域在高纬度比如北纬 70° 以上66° 倾角的卫星直接出局哪怕它的载荷参数再漂亮。反过来如果做的是赤道附近的农业监测太阳同步轨道几乎是必选项因为作物长势对比需要稳定的太阳高度角。下面这段代码把目标纬度是否在覆盖范围内这件事变成可判断的顺便把几个常见卫星的覆盖上限算出来import math def coverage_limit(inclination_deg, margin_deg0.0): inclination_deg: 轨道倾角单位度 margin_deg: 传感器侧摆或幅宽带来的额外纬度余量单位度 返回该卫星可覆盖的纬度上限南纬同值 return min(inclination_deg margin_deg, 90.0) # 资料中给出的几颗星的倾角 sats { Sentinel-1: 98.18, Sentinel-2: 98.50, Sentinel-3: 98.65, Sentinel-6: 66.00, } for name, inc in sats.items(): # 侧摆余量按 0 处理先看最保守的星下点覆盖 print(f{name:12s} 覆盖纬度上限 {coverage_limit(inc):.2f}°) # 判断一个具体目标能不能被某颗星拍到 target_lat 72.0 for name, inc in sats.items(): ok coverage_limit(inc) abs(target_lat) print(name, 可覆盖 if ok else 覆盖不到)这段逻辑的关键在于margin_deg这个参数。默认给 0算出来的是星下点覆盖的保守边界实际工程里 SAR 有 250 公里以上的幅宽光学星有 290 公里幅宽靠近边界的区域仍然能被幅宽扫到所以按目标纬度加上一个由幅宽换算的余量会更接近真实情况。但保守估计的好处是排产时不会翻车宁可多留一档冗余也不要按最大值报计划。真正容易忽略的是太阳同步轨道的高度和倾角是一对耦合量。资料里 693 公里配 98.18°、786 公里配 98.5°、814 公里配 98.65°高度越高倾角越大这不是巧合是太阳同步条件约束下的结果。如果你自己用轨道仿真工具生成轨道这两个数不能随便填填错了倾角就不是太阳同步地方时每天漂移时间序列分析会被光照差异污染。2.2 幅宽与重访周期把等几天算成具体数字重访周期经常被当成卫星的固有属性来记实际上它跟幅宽是一体的。幅宽越大赤道上相邻两条轨道之间留下的空隙就越容易被一次扫过覆盖需要的天数就越少。资料里 Sentinel-1 单星 12 天、双星互补 6 天Sentinel-2 单星 10 天、双星 5 天Sentinel-3 的 OLCI 是 2 天、SLSTR 是 1 天这些数字背后的逻辑是同一个。赤道处相邻轨道的间距可以按轨道周期和恒星日算出来一整天下来卫星绕地球若干圈每圈向西偏移固定的经度偏移量乘上赤道周长就是轨道间距。用这个间距除以幅宽得到的就是理想情况下铺满一条纬线需要的天数。import math R_EARTH 6378.137 # WGS84 赤道半径km MU 398600.4418 # 地球标准引力常数km^3/s^2 DAY 86164.0 # 恒星日s def orbit_period(altitude_km): 圆轨道周期单位秒 r R_EARTH altitude_km return 2 * math.pi * math.sqrt(r ** 3 / MU) def track_spacing(altitude_km): 赤道处相邻轨道的地面间距km T orbit_period(altitude_km) return 2 * math.pi * R_EARTH * (T / DAY) def revisit_days(swath_km, altitude_km): 单星在赤道附近铺满一条纬线所需天数理想化估算不含侧摆 return track_spacing(altitude_km) / swath_km # 高度取资料中的轨道高度幅宽取对应主模式幅宽 cases [ (Sentinel-1 IW, 693, 250), (Sentinel-2 MSI, 786, 290), (Sentinel-3 OLCI, 814, 1270), ] for name, alt, swath in cases: spacing track_spacing(alt) print(f{name:18s} 轨道间距 {spacing:7.1f} km, 估算重访 {revisit_days(swath, alt):5.1f} 天)跑出来的结果大致是 Sentinel-1 IW 轨道间距 2749 公里左右、估算重访 11 天Sentinel-2 是 2801 公里、9.7 天Sentinel-3 是 2827 公里、2.2 天。跟资料里标称的 12 天、10 天、2 天基本对得上差异来自侧摆能力、轨道维持精度和实际的相邻轨道重叠策略。这个反算很有用当你手上有一颗参数不全的卫星只知道高度和幅宽就能先估出它的量级重访不至于被宣传材料上的每天重访忽悠——那通常指的是侧摆能力下的应急重访不是常规存档的稳定重访。参数说明上R_EARTH用赤道半径而不是平均半径是因为算的是赤道处的轨道间距DAY用恒星日 86164 秒而不是 86400 秒是因为轨道回归周期是按惯性空间算的用太阳日会带来约千分之三的偏差虽小但在多星协同排产时会累积。2.3 传感器类型SAR 和光学不是互相替代的关系参数表上把 Sentinel-1 写成高分辨率合成孔径雷达卫星SAR主动微波遥感卫星把 Sentinel-2 写成高分辨率多光谱成像卫星13 个波段这两行字的差别决定了它们能干完全不同的事。SAR 是主动微波自己打光自己收云层和夜间都挡不住它而且相位信息可以用来做干涉测量。资料里 Sentinel-1 的应用写得很实在海冰监测、船舶监测、油污监测、城市形变测绘、洪水监测、地震形变、滑坡和火山监测。这些场景的共同点是等不起或者看不见——洪水期间连着一周阴天光学星一景都拿不到SAR 照常出图地表每年几毫米的沉降只有干涉相位能测出来。光学多光谱的逻辑相反它靠太阳反射晴天才能成像但换来的是光谱维度。Sentinel-2 的十三个波段覆盖可见光、红边、近红外和短波红外能算 NDVI、NDWI、各种红边指数做植被类型分类和作物长势监测。这些事 SAR 做不了或者做起来精度差一截。选型时的判断顺序我一般是这样先问目标区域一年有多少天是晴的再问监测对象变化的时间尺度最后才看分辨率。云量高的地区、需要穿透植被或监测形变的场景优先 SAR有稳定晴空窗口、需要光谱信息的场景走光学两者都不满足就考虑 SAR 和光学的融合用 SAR 补时间密度、用光学补光谱信息。需求场景优先载荷关键参数落点洪水范围快速提取SAR幅宽 250 km 以上的 IW 模式重访天数作物长势与类型光学多光谱红边波段、10 m 分辨率、重访 5 天城市地表沉降SAR 干涉SLC 产品、入射角一致性、时间基线海面温度与海色辐射计与光谱仪SLSTR 双视图、OLCI 波段组合区域尺度地表覆盖光学宽幅幅宽与 20 m 档分辨率产品层级的差别也在这里。SAR 的 SLC 带相位能做干涉GRD 已经检波并投影到地面范围只有幅度做分类和变化检测够用做形变直接没门。光学这边 L1C 是大气顶层反射率L2A 才是大气底层反射率两者算出来的指数数值差着一截。这些细节在参数表里只是一行小字实际用起来是返工和重下的区别。3. Sentinel 家族拆开看SAR、多光谱、海色三类载荷的分工与参数落点Sentinel 是这份资料里篇幅最长的一部分也是实际项目里最常被调用的数据源。它的六个系列不是简单的高低配而是按观测对象分工1 管雷达2 管陆地多光谱3 管海色和温度4、5 管大气成分6 管海面高度。搞混了分工参数表读得再细也没用。3.1 Sentinel-1 的四种采集模式SM、IW、EW、WV 怎么挑资料里 Sentinel-1 的 C 频段 SAR 中心频率 5.405 GHz带宽 0100 MHz峰值功率 4.368 kW脉冲重复频率 10003000 Hz这些是载荷层面的固定量选型时基本不用管。真正要挑的是采集模式。条带模式 SM 幅宽 80 公里分辨率略优于 5 m×5 m入射角 18.3°46.8°分六个子波束主要用于小岛屿成像和应急管理。这个模式的定位很窄因为幅宽太窄做区域尺度覆盖效率极低。干涉宽幅模式 IW 幅宽 250 公里分辨率 5 m×20 m入射角 29.1°46.0°分三个子条带 IW1、IW2、IW3是陆地上的主要采集模式。资料原话是可满足大多数服务要求这句话不夸张——存档数据里 IW 占绝对多数做变化检测和干涉基本都在这个模式里找。超宽幅模式 EW 幅宽 410 公里分辨率 20 m×40 m入射角 18.9°47.0°五个子条带用于海冰、极地地区和部分海域特别是冰、溢油监测。波模式 WV 地面覆盖 20 km×20 km沿轨采集间隔 100 公里同入射角采集间隔 200 公里两个入射角档 21.6°25.1° 和 34.8°38.0°是公海上采集海浪谱的默认模式。模式幅宽分辨率入射角范围子条带数典型用途SM80 km约 5 m×5 m18.3°46.8°6小岛屿、应急IW250 km5 m×20 m29.1°46.0°3陆地常规观测、干涉EW410 km20 m×40 m18.9°47.0°5海冰、溢油、极地WV20 km×20 km—21.6°25.1° / 34.8°38.0°2公海海浪谱这张表里最该盯的是入射角范围。同一景数据里不同位置的入射角不一样做干涉时前后两景的入射角必须匹配否则相位解缠会出问题。资料后面还给了每个子波束在最小轨道高度和最大轨道高度下的入射角与离底角区间比如 IW1 在最小轨道高度处入射角 30.86°36.59°IW3 是 41.75°46.00°。这些数值在拼接同一地区的多景数据、判断能不能做干涉对时是硬约束不能靠猜。产品层级上0 级是压缩未聚焦的原始数据只有特定用途才碰1 级 SLC 带振幅和相位是做测距和形变的唯一选择1 级 GRD 已按 WGS84 椭球模型检波、多视并投影到地面范围适合土壤水分反演和分类2 级 OCN 是风、浪、流的海工参产品。资料里明确写了每种操作模式都能生成 1 级 SLC、1 级 GRD 和 2 级 OCN所以下载时第一件事是确认自己拿的是哪一种不要拿到 GRD 才想起来要做干涉。3.2 Sentinel-2 的十三个波段10、20、60 米三层怎么配合Sentinel-2 的多光谱仪器 13 个波段、12 位辐射分辨率、辐射精度小于 5%、幅宽 290 公里。波段分布很讲究10 米四个蓝 490 nm、绿 560 nm、红 665 nm、近红外 842 nm20 米六个红边三个 705/740/783 nm、窄近红外 865 nm、短波红外 1610/2190 nm60 米三个海岸气溶胶 443 nm、水蒸气 945 nm、卷云 1375 nm。这个分层设计不是随意的。10 米四个波段是可见光和近红外对应 NDVI、NDWI 这些最常用的指数分辨率给足20 米六個波段里有三个红边是作物和植被胁迫诊断的关键60 米三个波段都是大尺度大气参数用不着高分辨率压到 60 米反而省带宽。S2_BANDS { B01: {nm: 443, gsd: 60, width: 20, use: 海岸/气溶胶}, B02: {nm: 490, gsd: 10, width: 65, use: 蓝}, B03: {nm: 560, gsd: 10, width: 35, use: 绿}, B04: {nm: 665, gsd: 10, width: 30, use: 红}, B05: {nm: 705, gsd: 20, width: 15, use: 红边1}, B06: {nm: 740, gsd: 20, width: 15, use: 红边2}, B07: {nm: 783, gsd: 20, width: 20, use: 红边3}, B08: {nm: 842, gsd: 10, width: 115, use: 近红外}, B8A: {nm: 865, gsd: 20, width: 20, use: 窄近红外}, B09: {nm: 945, gsd: 60, width: 20, use: 水蒸气}, B10: {nm: 1375, gsd: 60, width: 20, use: 卷云}, B11: {nm: 1610, gsd: 20, width: 90, use: 短波红外1}, B12: {nm: 2190, gsd: 20, width: 180, use: 短波红外2}, } # 按分辨率分组做重采样时按组处理避免把 60 米波段硬拉到 10 米 from collections import defaultdict groups defaultdict(list) for band, info in S2_BANDS.items(): groups[info[gsd]].append(band) for gsd in sorted(groups): print(f{gsd} m: {sorted(groups[gsd])})这段代码的价值在于把哪些波段本来就该是 60 米这件事固化成数据结构。很多人上手就把所有波段统一重采样到 10 米然后拿 B01 和 B10 去算指数结果噪声大得没法看。原因很简单60 米波段的原始像元面积是 10 米的 36 倍上采样到 10 米并没有增加信息量只是把一个大像元拆成 36 个相同的值再做邻域运算时会出现块状伪影。参数说明上width是波段宽度做辐射定标和大气校正时要用nm是中心波长做波段比值和指数定义时要用gsd分组是为了后面重采样策略服务。实际项目里我的习惯是先把 20 米和 60 米波段单独存一层需要融合时再做不要一开始就全部重采样。产品层级上1C 是经过几何精校正的正射影像带大气顶层反射率、云掩膜和 ECMWF 辅助数据但没有做大气校正2A 是大气底层反射率。资料里写得很清楚2A 需要用户根据需求从 1C 自行生产所以如果项目要算跨时相的植被指数直接拿 1C 算出来的值会随气溶胶和水汽变化时间序列上会看到虚假的波动这不是地表变化的信号。3.3 Sentinel-3 的 OLCI 与 SLSTR水色、温度产品的级别与时效后缀Sentinel-3 是这一族里传感器最多的资料列了七种海陆表面温度辐射计 SLSTR、海洋和陆地色彩仪器 OLCI、合成孔径雷达高度计 SRAL、卫星综合多普勒轨道图和无线电定位 DORIS、微波辐射计 MWR、激光回射器 LRR、全球导航卫星系统 GNSS。日常用得最多的是 OLCI 和 SLSTR。OLCI 是推扫式中等光谱分辨率成像光谱仪21 个波段光谱范围 4001040 nm陆地地面分辨率 300 米海洋 1.2 公里。这个分辨率看着粗但它的任务是水色海洋里一个中尺度涡的尺度就是几十公里300 米够了。资料里逐个列了 Oa1 到 Oa21 的中心波长和功能比如 Oa11 是 708.75 nm提供叶绿素荧光峰检测基线值是 MCI 的信号波段Oa12 是 753.75 nm氧分子吸收用于植被监测。这些波段的组合逻辑跟陆地多光谱完全不同做水体叶绿素反演时要按 Oa 系列来选不能直接套 Sentinel-2 的波段号。SLSTR 是双视图扫描温度辐射计沿轨道扫描双视图技术在双视图范围内做大气校正主要目标是为气候和气象应用提供高精度海面温度。它分太阳反射波段 S1S6500 米、热红外波段 S7S91 公里和两个火点通道 F1、F21 公里。资料里 S7 是 3742 nm、S8 是 10854 nm、S9 是 12022 nm这三个是测 SST 和 LST 的主力。产品级别上1 级分 1A 和 1B 处理阶段1B 是在准笛卡尔网格上生成校准后的正交地理定位数据。2 级分海洋加工和陆地加工两条线海洋产品里 OL_2_WFR 是全分辨率水和大气地球物理产品包含离水反射率、海洋色素总悬浮物浓度、透明度表征、神经网络反演的水体固有光学特性等陆地产品 OL_2_LFR 提供全分辨率陆地和大气地球物理产品包含 OGVI、OTCI、IWV 和误差估计。时效后缀是最容易踩坑的地方。资料特别说明NRT 是近实时产品数据采集三小时后交付NTC 是非及时产品采集后一个月交付。两者靠文件后缀区分NR 和 NT。做业务化监测当然要 NRT但如果做的是气候态分析、要的是最终精度的产品等一个月拿 NTC 反而更合适因为 NRT 用的是快速辅助数据精度略低。import re def parse_s3_name(fname): 从 Sentinel-3 产品文件名里拆出平台、仪器、级别和时效类型 典型结构: S3A_OL_1_EFR____20180425T102030_..._NR____.SEN3 parts fname.split(_) platform parts[0] # S3A / S3B instrument parts[1] # OL / SL level parts[2] # 1 / 2 ptype parts[3] # EFR / WFR / LFR ... timeliness None for p in parts: if p in (NR, NT, ST): timeliness {NR: NRT 近实时, NT: NTC 非及时, ST: STC 短期}[p] break return platform, instrument, level, ptype, timeliness for name in [ S3A_OL_2_WFR____20180425T102030_20180425T102330_NR____.SEN3, S3B_SL_2_LST____20180426T020100_20180426T021500_NT____.SEN3, ]: print(name) print(parse_s3_name(name))这段解析逻辑里parts[2]拿级别时要留意文件名里级别是单个数字不是 L1 这种写法timeliness遍历整段找后缀因为不同产品类型的字段位置不完全一致写死索引容易在换产品时崩掉。STC是短期产品通常介于 NRT 和 NTC 之间实际项目里如果对时效有要求但没有硬到三小时STC 是个折中。4. 多源数据拼一个工程Landsat、SPOT、Sentinel 的分辨率与波段对齐真实项目很少只用一颗星。做十年尺度的地表变化Landsat 的存档深度是绕不过去的做近几年的高频监测Sentinel-2 的重访更友好某些商业项目指名要 SPOT 的高分辨率全色。把它们拼到一个工程里最麻烦的从来不是算法是分辨率和波段的错位。4.1 分辨率统一基准定在 10 米、20 米还是 30 米Landsat 系列的多光谱分辨率是 30 米热红外 100 米重采样到 30 米Sentinel-2 是 10/20/60 米三层SPOT 系列以米级到十米级为主。基准分辨率定错后面的所有分析都要返工。我的原则是基准跟着最粗的那个关键波段走而不是跟着最细的。如果项目要同时用 Landsat 短波红外和 Sentinel-2 的 10 米可见光把基准定在 30 米用 Sentinel-2 的 20 米短波红外上采样到 30 米比把 Landsat 全部上采样到 10 米要诚实得多——后者看着精细实际信息量没增加还会在做邻域统计时引入虚假的空间相关性。如果项目只做近几年、只依赖 Sentinel-2基准就定 10 米把 20 米波段按最近邻或双线性上采样60 米波段单独保留不上采样做大气校正辅助用。import numpy as np def resample_nearest(arr, src_gsd, dst_gsd): 最近邻重采样适合分类图、掩膜这类不能用插值的图层 arr: 二维数组 src_gsd, dst_gsd: 源和目标的像元大小单位米 factor src_gsd / dst_gsd h, w arr.shape new_h, new_w int(h * factor), int(w * factor) # 生成目标网格上的源索引floor 取整即最近邻 rows (np.arange(new_h) / factor).astype(int).clip(0, h - 1) cols (np.arange(new_w) / factor).astype(int).clip(0, w - 1) return arr[np.ix_(rows, cols)] def resample_bilinear(arr, src_gsd, dst_gsd): 双线性重采样适合反射率、温度这类连续量 factor src_gsd / dst_gsd h, w arr.shape new_h, new_w int(h * factor), int(w * factor) y np.linspace(0, h - 1, new_h) x np.linspace(0, w - 1, new_w) y0, x0 np.floor(y).astype(int), np.floor(x).astype(int) y1, x1 np.clip(y0 1, 0, h - 1), np.clip(x0 1, 0, w - 1) wy, wx (y - y0)[:, None], (x - x0)[None, :] return (arr[np.ix_(y0, x0)] * (1 - wy) * (1 - wx) arr[np.ix_(y1, x0)] * wy * (1 - wx) arr[np.ix_(y0, x1)] * (1 - wy) * wx arr[np.ix_(y1, x1)] * wy * wx) # 示例把 20 米波段升到 10 米 band20 np.random.rand(100, 100).astype(float32) band10 resample_bilinear(band20, src_gsd20, dst_gsd10) print(band20.shape, -, band10.shape)resample_nearest和resample_bilinear的分工要分清。分类结果、云掩膜、水体掩膜这类离散图层必须用最近邻用双线性会造出不存在的类别值反射率、亮度温度这类连续量可以用双线性但要注意双线性会轻微平滑边缘做小目标检测时可能把几米宽的道路抹掉。参数上factor是源像元相对目标像元的比值20 米到 10 米是 230 米到 10 米是 3注意方向别写反。4.2 波段映射Landsat OLI 与 Sentinel-2 MSI 的对应关系跨卫星拼工程第二个坑是波段号对不上。Landsat 8/9 的 OLI 波段编号是 1 到 9 加两个短波红外Sentinel-2 是 B01 到 B12 中间还夹了个 B8A。直接按序号取出来的图颜色是错的。用途Landsat 8/9 OLISentinel-2 MSI备注海岸/气溶胶Band 1 (443 nm)B01 (443 nm)中心波长接近蓝Band 2 (482 nm)B02 (490 nm)有 8 nm 偏移绿Band 3 (561 nm)B03 (560 nm)基本一致红Band 4 (655 nm)B04 (665 nm)有 10 nm 偏移近红外Band 5 (865 nm)B08 (842 nm)差 23 nm算 NDVI 要留意短波红外 1Band 6 (1609 nm)B11 (1610 nm)基本一致短波红外 2Band 7 (2201 nm)B12 (2190 nm)有 11 nm 偏移全色Band 8 (590 nm)无融合时需另找数据源卷云Band 9 (1373 nm)B10 (1375 nm)用途一致这张表里近红外那一行最需要留意。Landsat 的 Band 5 中心波长 865 nmSentinel-2 的 B08 是 842 nm差了 23 nm落在植被反射率陡升的区间边缘上。用两颗星分别算 NDVI 再做时间序列拼接如果不做交叉定标接缝处会出现系统性跳变看着像植被突变其实是波段位置差异。常见做法是选一段两星同时过境的日期做线性回归把其中一颗的反射率校正到另一颗的尺度上。红边波段是 Sentinel-2 独有的Landsat 没有对应所以涉及红边指数的分析只能用 Sentinel-2 的时段。这一点在项目立项时就要说清楚不能等到中期才发现前五年没数据。4.3 时间对齐与元数据解析写一个可复用的配对脚本多源数据的第三个麻烦是时间。同一地区 Sentinel-2 五天一景Landsat 十六天一景要找同一天过境的配对一年里可能只有几对。实际做法是设一个时间窗口把窗口内的所有景做两两组合再按云量和重叠度筛。from datetime import datetime, timedelta from itertools import product def parse_date(s): 从产品名里提取成像日期这里假设已按 YYYYMMDD 提取出前 8 位 return datetime.strptime(s[:8], %Y%m%d) def pair_by_window(dates_a, dates_b, window_days3): dates_a, dates_b: 两个传感器各自的成像日期字符串列表 window_days: 允许的最大时间差 返回所有满足窗口的组合按时间差排序 pairs [] for a, b in product(dates_a, dates_b): da, db parse_date(a), parse_date(b) delta abs((da - db).days) if delta window_days: pairs.append((a, b, delta)) return sorted(pairs, keylambda x: x[2]) s2_dates [20240312, 20240317, 20240322, 20240327] l8_dates [20240310, 20240326, 20240411] for a, b, d in pair_by_window(s2_dates, l8_dates, window_days3): print(fS2 {a} - L8 {b}, 相差 {d} 天)window_days的取值要按地表变化速度来定。城市扩张、农作物生长这类慢变量三天窗口足够洪水、火灾这类快变量窗口要收到一天以内否则前后两景的地表状态已经不是一回事。product做的是笛卡尔积数据量大时要先把日期排序再用双指针不然 O(n²) 在几千景的规模上会明显卡顿。云量筛选通常放在配对之后用产品自带的云掩膜统计有效像元比例低于阈值的直接剔除。这一步不要省否则配出来的对子一半是云白跑一遍流程。5. 参数表读不出来的五个坑从现象倒推参数与产品层级参数表列的是标称值实际用起来翻车的地方往往不在表里而在表与表之间的衔接处。下面五条是我自己和身边人踩过的按现象 → 原因 → 解决写方便对号入座。5.1 现象L1C 直接算 NDVI同一地点不同年份数值差一截原因不是地表变了是大气顶层反射率里混了气溶胶和水汽的贡献。Sentinel-2 的 1C 产品给的是大气顶层反射率资料里明确写了没有进行大气校正2A 才是大气底层反射率需要从 1C 自行生产。气溶胶光学厚度年际变化能有几倍直接体现在红光波段上NDVI 跟着漂。解决分两种情况。做单时相分类1C 够用因为分类器对整体偏移不敏感做多时相序列分析必须先转 2A。转 2A 常见的是用官方提供的处理链或者用开源的暗像元法先做一版快速校正精度差一些但比不做好。另外要注意 1C 和 2A 的反射率缩放系数不同读数据时乘的系数不统一数值会差 10000 倍。5.2 现象60 米波段上采样到 10 米后和 10 米波段叠在一起边缘错位原因是不同分辨率的波段在传感器上是分开采集、分开配准的早期数据的波段间配准误差能到半个 60 米像元。上采样只做了尺寸变换没有做几何配准错位就被放大了。解决的第一步是别急着上采样。B01、B09、B10 这三个 60 米波段本来是给大气校正和云检测用的不需要跟 10 米波段逐像元对齐。真要对齐时用产品自带的几何元数据做重投影而不是用图像重采样硬拉。第二步是验证取一小块同时有水和陆地的区域把 60 米波段上采样后和 10 米波段做边缘相关性检验错位明显的话说明配准有问题换个日期或者换处理级别。5.3 现象拿 Sentinel-1 的 GRD 产品做干涉跑出来的相位全是噪声原因是 GRD 已经过检波和多视相位信息在处理过程中被丢掉了。资料里写得很直白SLC 是带振幅和相位的复杂影像相位信息是时间的函数根据相位信息和速度可实现距离的测量GRD 是已使用地球椭球体模型 WGS84 进行检测、多视距并投影到地面范围只剩幅度。解决很简单做干涉就下 SLC别下 GRD。同一个采集模式下两种产品都能生成只是下载时选错了。另外 SLC 的数据量比 GRD 大好几倍下载前先把存储和算力规划好别下到一半磁盘满了。做形变还要求两景的轨道方向一致、入射角匹配前面第 3 章那张子波束入射角表就是干这个用的。5.4 现象按标称重访 5 天排产实际等了一景等了 12 天原因是标称的 5 天是双星互补、赤道附近、无云条件下的理想值。实际会有三个折扣一是双星里有一颗进入安全模式或者轨道维持互补失效二是目标纬度不是赤道高纬地区相邻轨道重叠多重访反而好一些但中纬地区会有条带间隙三是云量筛选把大部分景剔掉了光学星尤其明显。解决办法是把重访当成概率分布而不是固定值。用第 2 章那段轨道间距代码先估出理论重访再拿过去一年的存档数据统计一下目标区域的实际可用的天数间隔两个数一对比排产就有底了。SAR 不受云影响这一点上比光学星靠谱得多应急项目优先考虑。5.5 现象用入射角参数做辐射定标不同景之间亮度对不上原因是查错了模式。Sentinel-1 的入射角是按采集模式和子波束分开列的SM 有六个波束、IW 有三个子条带、EW 有五个子条带每个在最小轨道高度和最大轨道高度下的入射角区间还不一样。拿 IW1 的表去校正 IW3 的数据入射角差了好几度后向散射系数跟着偏。解决办法是先确认采集模式再确认落在哪个子条带最后用对应的高度档查表。做时间序列时还要保证前后景的入射角接近差异超过两度就要做角度归一化。这个坑很隐蔽因为数据本身不报错只是数值慢慢漂等发现的时候已经分析了半个月。6. 进阶用法拿参数表做一次十分钟的数据可行性评估参数表最有价值的用法不是查单个数值是在项目立项的十分钟里给出一份能落地的判断。我现在的习惯是拿到需求先填一张评估表把目标区域、时间范围、监测对象、更新频率、精度要求这五项写死然后对着资料逐项过。评估项判断依据资料中的落点目标纬度是否覆盖倾角与星下点纬度上限98° 档覆盖极区66° 档只到中纬需要的重访间隔幅宽与轨道间距估算IW 250 km 约 12 天双星 6 天是否需要穿云载荷类型SAR 全天候光学受云限制光谱维度够不够波段数与中心波长13 波段含三个红边适合植被数据量预算幅宽×分辨率×景数290 km 幅宽比 80 km 幅宽省景数预处理工作量产品级别SLC 需聚焦1C 需大气校正把这张表填完通常能砍掉一半候选方案。举个具体例子目标是某内陆湖区的水体范围季度变化纬度在北纬 40° 附近时间跨度三年要求能区分水体和湿地。按表过一遍——纬度没问题98° 档的星都覆盖季度更新对重访要求不高10 天档够用区分水体湿地需要短波红外和近红外光学多光谱合适湖区多云得考虑补 SAR。结论是主线用 Sentinel-2 的 20 米短波红外加 10 米近红外做水体指数云遮挡的季度用 Sentinel-1 的 IW 模式补两套数据都免费预处理量在可控范围。再往下可以做一层定量估算把景数和处理时间算出来def estimate_scenes(area_km2, swath_km, overlap0.1): area_km2: 目标区域面积 swath_km: 单景幅宽按方形近似 overlap: 相邻景重叠比例通常 0.1 到 0.2 返回覆盖整个区域所需的最少景数 effective (swath_km * (1 - overlap)) ** 2 return int(area_km2 / effective) 1 def estimate_pairs(years, scenes_per_year, usable_rate0.4): 估算多源配对时实际可用的景数usable_rate 是无云可用比例 return int(years * scenes_per_year * usable_rate) # 示例5000 平方公里区域用 290 公里幅宽的 Sentinel-2 n estimate_scenes(5000, 290) print(单期景数:, n) print(三年季度更新可用景数:, estimate_pairs(3 * 4, n, usable_rate0.5))overlap这个参数容易被忽略。相邻景之间要留重叠才能拼接重叠比例给 0.1 意味着每景有 10% 的面积和邻景重复实际有效覆盖是 0.9 倍幅宽的平方。usable_rate是无云可用比例不同地区差异极大干旱区能到 0.8热带多雨区可能只有 0.2取值要靠历史存档统计不能拍脑袋。还有个细节是产品级别与处理时间的对应。同样一景 Sentinel-1SLC 聚焦加干涉处理动辄几十分钟GRD 做变化检测几分钟就出结果。评估表里预处理工作量这一栏如果填的是 SLC算力预算要按十倍往上留。最后说个血泪经验。早些年接一个区域尺度的项目参数表只看了分辨率那一列觉得 10 米够用就定了方案结果数据下回来才发现目标区域横跨三条轨道每条的入射角不一样拼接后做时间序列分析接缝处的伪变化比真实变化还大返工重做了两个月。从那以后我每次做可行性评估都强制把入射角、波段中心波长、产品级别这三项单独拉出来核一遍宁可前期多花半天也不要后期推倒重来。希望帮到你。本文还有配套的精品资源点击获取
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑