InSAR数据准备全攻略:Sentinel-1 SLC、DEM与精密轨道下载

发布时间:2026/10/5 6:25:01
InSAR数据准备全攻略:Sentinel-1 SLC、DEM与精密轨道下载 搞InSAR的人应该都有这种体验花了半天终于找到一景合适的Sentinel-1数据下载完往处理软件里一拖结果软件弹出一个DEM not found紧接着又提示orbit file missing。那种感觉真的比数据处理本身还让人心累。我这些年陆陆续续帮不少刚入门的同行接过这类问题发现最容易被卡住的往往不是形变反演算法而是最前面这一步把SLC、DEM、精密轨道这三类基础数据准备齐。先说一下这里聊的Sentinel是欧空局哥白尼计划里的哨兵系列卫星主要是Sentinel-1雷达卫星不是GitHub上那个叫Sentinel的限流熔断组件。这名字撞车确实坑了不少人群里一提问Sentinel怎么用有人贴微服务配置有人贴EOP数据下载链接场面一度很混乱。这篇只说遥感圈的事围绕标题里的三件事展开Sentinel-1 SLC数据怎么下载DEM数据怎么下载和拼接精密轨道数据怎么找、怎么匹配。无论你用的是GMTSAR、ISCE、ENVI SARscape还是StaMPS这套数据准备工作基本相同看完基本上能照着操作。1. InSAR数据三件套SLC、DEM、精密轨道各自解决什么问题1.1 SLC数据包含相位信息的原始胶片SLC全称Single Look Complex单视复数影像。普通光学影像是一个二维强度数组而SLC影像每个像元都是一个复数实部和虚部包含了幅度对应后向散射强度和相位对应电磁波往返路径的相位延迟。InSAR技术能用两景SLC做干涉提取出地表形变信息靠的就是这个相位。下载SLC时有个比较容易忽视的点选择什么模式、什么极化、什么轨道方向。Sentinel-1主要成像模式包括SM、IW、EW、WVInSAR陆地形变用得最多的是IW模式也就是干涉宽幅模式幅宽250公里分辨率5米×20米左右正好覆盖大多数区域形变监测需求。极化方式上C波段Sentinel-1常见的是VVVH双极化普通形变处理选择VV就够了除非你研究的是植被区的极化干涉才需要把VV和VH都下载下来。轨道方向分升轨和降轨同一个地区不同轨道方向的干涉结果对形变向量的敏感度不同做二维形变反演时往往升轨降轨都需要。下载的时候还需要确认产品级别。Sentinel-1的L0是原始回波数据L1有SLC和GRD两种L2有海洋产品。做InSAR直接选SLCGRD虽然也能出干涉图但已经做了多视和地距投影相位信息经过处理精度和灵活性都不如SLC。1.2 DEM去掉地形相位的关键InSAR干涉相位里除了形变相位还有一大块是地形相位。两景影像从不同的侧视角观测同一目标即使地面完全没动也会因为地形起伏产生相位差异这就是地形相位。要去掉它最常规的做法就是用外部DEM模拟地形相位然后从干涉相位里减掉。所以DEM在整个流程里的位置有点像配菜里的盐没有不行但也不需要特别复杂。常见的做法是用30米分辨率的全球DEM比如SRTM GL1、Copernicus GLO-30、ALOS World 3D。处理高山区或者地形陡峭的区域时DEM的精度会直接影响剩余地形相位的大小选错了可能给形变结果引入系统性误差。1.3 精密轨道基线估计的标尺卫星在成像时刻的真实轨道和星历播报的轨道之间有偏差这个偏差对干涉测量影响很大。基线是两景影像成像时卫星位置的差几百米的基线如果算错了几厘米引起的干涉相位误差就可能达到几个弧度直接干扰形变信号。Sentinel-1发布之初辅助数据里带的轨道是快速轨道或者预测轨道精度有限。欧空局后续提供两种精密轨道产品RESORB快速精密轨道和POEORB最终精密轨道。后者精度更高但延迟约20天。如果你的数据是近期的POEORB还没发布那就先用RESORB顶着等POEORB出了再重新精化。后面我会详细讲这两类文件怎么下载和匹配。2. Sentinel-1 SLC数据下载主用Copernicus Data Space备用ASF2.1 当前主流数据源与账号准备以前大家习惯用Sentinels Scientific Data Hub也就是俗称的SciHub有段时间还有各种镜像站。后来欧空局把数据服务迁到了Copernicus Data Space EcosystemCDSE老的SciHub逐渐停用。现在官方推荐的主入口是dataspace.copernicus.eu注册一个账号就能搜索、浏览、下载Sentinel系列数据。需要提醒的是CDSE的界面和下载逻辑跟以前的SciHub有不少差异很多旧教程里的链接已经失效了如果照着老博客走很可能卡在登录或者检索上。另外一个重要的备用数据源是阿拉斯加卫星设施ASFAlaska Satellite Facility它的数据镜像对Sentinel-1支持得非常好尤其是美国地区用户和需要批量下数据的场景ASF的API很成熟。如果你拿到一个SLC产品的下载链接但网页端老是不稳定可以试试在浏览器开发者工具里找到$value下载地址用下载工具续传。不过更推荐直接在API层面解决后面会说。2.2 CDSE网页端筛选下载实操打开CDSE网站登录后选择Copernicus Browser或者Data Search都可以。以Data Search为例你需要在左侧设置这些条件卫星平台Sentinel-1产品类型SLC传感器模式IW干涉宽幅极化方式VV、VH或仅VV时间范围根据你的形变时间序列需求设置起止时间空间范围手动框选研究区或导入GeoJSON/Shapefile筛选出来之后列表里每条记录会显示产品名称、云量雷达影像其实没有云量指标这里一般是空、开始时间、轨道方向、相对轨道号等。点进详情能看到更多元数据包括绝对轨道号、极化、产品的footprint范围。选择产品时有个小技巧InSAR处理需要同一轨道、同一模式的影像也就是大家常说的同一frame或者同一track。如果CDSE列表里直接显示相对轨道号尽量锁定同一个轨道号来筛选这样后续干涉对的时间基线比较容易控制。下载单个产品直接点下载按钮即可文件一般几个GB建议用支持断点续传的方式下载。2.3 用Python脚本按时间、轨道批量获取SLC数据量一大网页下载就有点力不从心了。CDSE提供了OData接口可以写Python脚本查询和下载。我先给一个查询SLC产品的示例代码里有详细注释import requests # CDSE OData目录服务地址 url https://catalogue.dataspace.copernicus.eu/odata/v1/Products params { $filter: ( ContentDate/Start gt 2024-06-01T00:00:00Z and ContentDate/Start lt 2024-06-30T00:00:00Z and Collection/Name eq SENTINEL-1 and Attributes/OData.CSC.StringAttribute/any(att: att/Name eq ProductType and att/OData.CSC.StringAttribute/Value eq SLC) and Attributes/OData.CSC.StringAttribute/any(att: att/Name eq SensorMode and att/OData.CSC.StringAttribute/Value eq IW) ), $top: 20, $orderby: ContentDate/Start } resp requests.get(url, paramsparams) if resp.status_code 200: products resp.json()[value] for p in products: print(p[Name], p[Id])查询结果里的Id就是产品的唯一标识。下载时先用账号密码换tokenauth_url https://identity.dataspace.copernicus.eu/auth/realms/CDSE/protocol/openid-connect/token data { grant_type: password, username: 你的用户名, password: 你的密码, client_id: cdse-public } resp requests.post(auth_url, datadata) token resp.json()[access_token] headers {Authorization: fBearer {token}}然后构造下载地址product_id 上面查到的Id download_url fhttps://catalogue.dataspace.copernicus.eu/odata/v1/Products({product_id})/$value with requests.get(download_url, headersheaders, streamTrue) as r: r.raise_for_status() with open(SLC.zip, wb) as f: for chunk in r.iter_content(chunk_size8192): f.write(chunk)这里推荐用streamTrue分块写入文件避免一次性加载几个GB到内存里。下载过程中如果断了需要重新下载所以强烈建议配合像aria2c这样的多线程下载工具。具体的做法是先从OData拿到下载URL再把它传给aria2c让它负责续传和多线程下载。CDSE还提供OData的几何过滤能力可以在$filter里加OData.CSC.Intersects(areageographySRID4326;POLYGON((...)))如果你研究区是个固定区域这个非常实用能少下载很多不相干的影像。2.4 ASF作为备选渠道ASFasf.alaska.edu是另一个非常靠谱的Sentinel-1数据源它最大的优势是下载速度快、支持批量搜索下载而且提供了ASF Search API。如果CDSE偶尔抽风或者你想对比两个平台的数据覆盖情况ASF是很好的备选。ASF的网页端Search页面里可以选Sentinel-1 Interferogram或者直接按Beam Mode等条件筛选。下载时用NASA Earthdata账号登录没有就注册一个。ASF的搜索界面有个功能我特别喜欢它可以直接在地图上画多边形然后列出完全覆盖这个多边形的所有SLC影像对InSAR研究来说特别方便。如果你用ASF的批量下载脚本它会在返回结果里给出一个个curl命令直接用就行。ASF的数据源和欧空局官方数据在内容上没有本质区别下载之后的产品结构也是一样的。3. DEM数据下载与拼接选对数据源拼出恰好覆盖研究区的底图3.1 InSAR常用DEM数据源横向对比DEM这步听起来简单真正做起来还是会纠结一阵子到底用哪个数据源分辨率选多少要不要拼接我先把常用的几个列个表方便你对照选择。数据源分辨率覆盖范围主要获取渠道InSAR适用性SRTM GL1 / GL31弧秒约30m/ 3弧秒约90m全球南北纬60°USGS EarthExplorer、OpenTopography经典之选资料最多适合大多数地区ALOS World 3D约30m全球JAXA、OpenTopography高纬度区和山地细节相对更均匀Copernicus GLO-30约30m全球多版本含GLO-90AWS Open Data、CDSE更新较新来源是TanDEM-XNASA DEM约30m全球NASA Earthdata Search基于SRTM改进修补了不少空洞SRTM是老牌选手很多处理软件默认也是按SRTM设计的格式和坐标系都兼容得很好。ALOS World 3D在部分国家的实际效果比SRTM更细致如果研究区是山区、峡谷这类地形剧烈的区域可以两个都下载来对比一下看哪个残差更小。Copernicus GLO-30是TanDEM-X任务生成的全球DSM也提供了专门的修复版本很多新项目开始用它作为首选。顺带说一句Copernicus DEM在学术语境里严格来说是DSM因为它包含了地物高度比如树冠、建筑物顶部。在InSAR处理中我们通常不区分得那么细但如果你的研究区是茂密森林或高楼林立的城市DSM与真实地表的差异会给地形相位模拟带来一点误差需要留意。3.2 按需下载DEM瓦片下载DEM最容易犯的错误是整个研究区只下一景。实际上全球DEM产品大部分是按瓦片组织的你要做的是根据研究区的经纬度范围算出需要哪些瓦片然后挨个下载。以Copernicus GLO-30在AWS上的公开数据为例它的文件命名可以直接反映经纬度位置比如Copernicus_DSM_COG_10_N47_00_E007_00_DEM.tif表示北纬47度、东经7度的1度x1度瓦片。下载时可以用wget循环拉取wget https://copernicus-dem-30m.s3.amazonaws.com/Copernicus_DSM_COG_10_N47_00_E007_00_DEM/Copernicus_DSM_COG_10_N47_00_E007_00_DEM.tif如果你需要覆盖一个跨多度的区域写个Python脚本生成URL列表会更高效for lat in range(46, 49): # 纬向范围 for lon in range(6, 9): # 经向范围 url (fhttps://copernicus-dem-30m.s3.amazonaws.com/ fCopernicus_DSM_COG_10_N{lat:02d}_00_E{lon:03d}_00_DEM/ fCopernicus_DSM_COG_10_N{lat:02d}_00_E{lon:03d}_00_DEM.tif) print(url)OpenTopography网站也提供按经纬度范围切块下载的功能填好坐标范围后可以直接下载一个压缩包里面是拼好的DEM省去自己拼接的步骤。如果你不想折腾AWS命令行OpenTopography这个方式对新手最友好。3.3 用GDAL拼接DEM并处理NoData下载多个瓦片之后接下来就是拼接。很多人习惯打开ArcGIS用Mosaic工具但命令行环境下用GDAL效率更高而且处理软件的兼容性更好。标准流程是先建VRT再输出为GeoTIFFgdalbuildvrt merged_dem.vrt Copernicus_DSM_COG_10_N*.tif gdal_translate -of GTiff -co COMPRESSDEFLATE -co TILEDYES merged_dem.vrt merged_dem.tifgdalbuildvrt不会真的把数据复制一遍只是生成一个虚拟栅格目录速度非常快。后面的gdal_translate才真正把多个瓦片合并进一个GeoTIFF带DEFLATE压缩可以有效控制文件体积。如果后续要用ISCE或GMTSAR这个TIFF文件通常能被直接识别。拼接后常常会遇到一个问题瓦片边缘有NoData空洞尤其SRTM在坡度大的地方容易有空值。解决办法有两个思路一是补下载旁边的瓦片尽量覆盖完整二是用插值填掉小洞gdal_fillnodata.py -md 10 -si 5 merged_dem.tif merged_dem_filled.tif-md表示最大距离-si是平滑迭代次数。这个方法适合填补小的空洞如果整个瓦片缺失还是要回去重新下载。3.4 坐标系统一和裁剪别让DEM成为处理流程里的异类拼接完之后还要做两件事确认坐标参考系和范围。大多数InSAR处理软件比如GMTSAR期望DEM是WGS84经纬度坐标高度单位是米。如果你下载的DEM刚好是UTM或者其他投影需要先转回WGS84gdalwarp -t_srs EPSG:4326 -r bilinear 原始DEM.tif dem_4326.tif如果你的研究区比DEM小很多建议先把DEM裁剪到研究区范围减少后续处理的计算量。用GDAL可以按矩形范围裁剪gdal_translate -projwin 7.0 48.0 8.0 47.0 -of GTiff dem_4326.tif dem_clip.tif-projwin的参数顺序是左上角经度、左上角纬度、右下角经度、右下角纬度。裁完之后用gdalinfo看一眼大小和NoData定义确认没有异常DEM这步就算到位了。4. 精密轨道数据下载文件不大但找起来最绕4.1 POEORB和RESORB先搞清楚时效再下载精密轨道数据虽然只是一个几十KB的EOF文件但找错版本、选错时间会直接导致处理软件报错或者结果变差。POEORB最终精密轨道全称Precise Orbit Ephemerides精度大概在5cm以内但通常在获取原始数据后21天左右才发布。做正式科研处理时尽量使用POEORB。RESORB快速精密轨道全称Restituted Orbit在影像获取后约3小时就能拿到精度约10cm适合数据刚获取就需要快速出结果的情况。一句话总结能等就等POEORB急着处理就用RESORB并在论文或报告里说明用了哪个版本的轨道数据。4.2 看懂EOF文件的命名规则精密轨道文件长这样S1A_OPER_AUX_POEORB_OPOD_20220501T120139_V20220410T225942_20220412T005942.EOF拆开来看S1A卫星Sentinel-1A如果是S1B就是Sentinel-1B。OPER操作级别。AUX_POEORB辅助产品类型POEORB表示最终精密轨道RESORB对应快速轨道。OPOD处理中心机载精密定轨处理中心。20220501T120139文件生成时间也就是这个EOF被生成的时间。V20220410T225942轨道有效时间范围的开始时间。20220412T005942轨道有效时间范围的结束时间。所以匹配轨道文件的时候不是看文件名里的生成时间而是看后面两个时间是否覆盖你SLC影像的成像时刻。比如你的SLC影像在2024年10月1日06时30分获取那就要找一个V20241001T...到后续时刻包含06:30的EOF文件。这个规则弄清楚了手动找文件就不容易出错。4.3 从ASF辅助数据目录手动下载欧空局和ASF都提供了精密轨道的下载渠道。ASF的辅助数据目录是最直接的方式地址是https://s1qc.asf.alaska.edu/aux_poeorb/ https://s1qc.asf.alaska.edu/aux_resorb/打开后是一个文件列表文件名直接能看到有效时间范围。手动操作时先确认SLC影像的获取时间然后在列表里找到V时间覆盖那个时刻的文件点击下载即可。比如你的影像时间范围是2024-05-01到2024-05-03就找一个EOF的有效结束时间大于等于最后一景的结束时间、有效开始时间小于等于第一景开始时间能覆盖整段时间的最好。下载时建议用wget -c续传避免下载一个几十KB的文件还因为网络波动失败wget -c https://s1qc.asf.alaska.edu/aux_poeorb/S1A_OPER_AUX_POEORB_OPOD_20240501T120139_V20240410T225942_20240412T005942.EOF4.4 用Python按时间自动匹配并下载手动翻目录在多景影像、多时间基线的项目里会疯掉写一个脚本自动匹配才是正道。下面这段代码实现了从ASF的POEORB目录里找到覆盖指定时间的轨道文件并下载import re import requests from datetime import datetime, timezone target datetime(2024, 5, 2, 6, 30, tzinfotimezone.utc) # SLC成像时间 resp requests.get(https://s1qc.asf.alaska.edu/aux_poeorb/) filenames re.findall(rhref(S1[AB]_OPER_AUX_POEORB_OPOD_\d{8}T\d{6}_V\d{8}T\d{6}_\d{8}T\d{6}\.EOF), resp.text) matched [] for fn in filenames: m re.search(r_V(\d{8}T\d{6})_(\d{8}T\d{6})\.EOF$, fn) if not m: continue start datetime.strptime(m.group(1), %Y%m%dT%H%M%S).replace(tzinfotimezone.utc) stop datetime.strptime(m.group(2), %Y%m%dT%H%M%S).replace(tzinfotimezone.utc) if start target stop: matched.append((fn, start, stop)) if matched: matched.sort(keylambda x: x[2] - x[1]) # 选有效区间短的更贴近目标时刻 filename matched[0][0] url fhttps://s1qc.asf.alaska.edu/aux_poeorb/{filename} print(下载:, url) # requests.get(url).content 保存到本地 else: print(没有找到覆盖该时间的POEORB请检查时间或改用RESORB)如果你的影像获取时间距今不足21天POEORB很可能还没生成这时脚本会返回空列表你就把地址换成aux_resorb/再跑一遍。这个逻辑完全可以写成一个函数以后换任何一景影像传一个时间进去就能自动拿到轨道文件。5. 下载实操中最常踩的坑和我的排查流程5.1 旧SciHub链接失效搜索引擎里的快照别全信我见过不少同学还在点旧的scihub.copernicus.eu链接或者用网上流传的第三方API工具结果不是页面打不开就是返回各种奇怪的错误。老一代LinkS、SciHub镜像基本都退出历史舞台了现在官方就是CDSE和ASF两个主要来源。搜索引擎里搜出来的教程只要看到打开SciHub镜像站加速这类关键字先警惕一下时效性最好到官网按本文的流程重新走一遍。5.2 API请求返回401、403、429怎么排查用CDSE的OData接口下载时最常遇到的错误是401 Unauthorized和429 Too Many Requests。401通常是token过期或者账号密码输错重新调用token接口获取新token就行。429说明你短时间内请求次数太多被服务端限流了这时候不要硬刚在代码里加个sleep(1)每次请求之间稍作停顿。还有一点是下载一个大文件时OData的$value端到端响应可能比较慢如果中间网络断了requests会直接抛异常记得在代码里加异常捕获并保存已下载的部分。5.3 DEM拼接后出现黑边或大片空值黑边最常见的原因是相邻瓦片之间的范围没有完全重叠或者瓦片本身就有NoData。排查流程我一般是这样先gdalinfo看每个瓦片的尺寸和NoData值再用gdalbuildvrt -vrtnodata -32767指定统一NoData值最后再用gdal_fillnodata补洞。如果黑边集中在边缘就检查是不是下载瓦片时范围少算了一行一列把经纬度范围扩大0.5度再重新下载。5.4 轨道文件时间对不上处理软件直接中断GMTSAR和ISCE在运行预处理时都会去指定目录找精密轨道文件如果文件没放对位置或者时间匹配不上日志里会显示类似failed to find orbit file的信息。遇到这种情况先别急着换软件版本用脚本打印一下SLC产品的sensing time然后检查EOF的validity interval是否覆盖这个时间。另一个容易忽略的是Sentinel-1同一帧SLC跨度为10到30秒轨道文件只要覆盖这个时间段就行不需要完全对齐到秒级。5.5 数据目录管理的一些建议下载这些数据虽然看起来各管各的但最后都会汇总到处理软件里。我个人的习惯是在每个项目根目录下建这样的结构project/ ├── raw_slc/ # 原始SLC压缩包和解压后的SAFE目录 ├── dem/ # DEM瓦片、拼接后的DEM、裁剪后的DEM ├── orbit/ # POEORB/RESORB文件按获取日期命名 └── products/ # 处理中间产物和最终形变结果所有文件名不要乱改保留原始命名尤其是EOF文件软件经常靠文件名里的时间信息来匹配轨道。轨道文件命名本身就是一个数据库不需要你额外维护excel只要保持原状就行。最后说一点体会数据准备这件事第一次做的时候觉得步骤又多又碎但只要你把SLC查询、DEM拼接、轨道匹配这三段逻辑各自跑通一遍后面再做任何一个新研究区无非是改几个参数的事。我目前的做法是把前两章里的Python脚本精简成了一个prepare_data.py传入研究区经纬度和时间范围一次性生成数据清单和下载命令这样批量处理几十景SLC也不会在数据准备工作上耗太多时间。这个思路你也可以试试把这章里的命令攒成自己的工具集后面真的能省下大量精力。