7.2 KiB
7.2 KiB
SBAS 是否可复用现有 D-InSAR Task 路径生产模式
更新日期:2026-04-06
1. 结论
结论分两层:
- 可以复用“以标准输入目录作为生产入口”的模式
- 不能直接复用现有 D-InSAR 的
Task_x/master + slave目录协议和copy-ps-stack实现
也就是说:
- 可以借用 D-InSAR 的生产思想
- 不能照搬 D-InSAR 的输入结构
2. 现有 D-InSAR 生产模式是什么
当前 D-InSAR 的 ISCE2 生产模式,本质上是:
- 先把一对影像整理成标准任务目录
- 每个任务目录固定包含:
master/slave/.dinsar_pair.json
- 生产入口只接收一个
root_dir - 引擎自行扫描这个
root_dir- 要么它本身就是一个 task 目录
- 要么它下面有多个
Task_*子目录
- 每个 task 目录独立产出一个 pair result
关键实现:
backend/app/dinsar_engines/isce2_engine.py:314-361validate_root_dir()要求:- 单个 task 目录必须有
master和slave - 或父目录下有多个合法
Task_*
- 单个 task 目录必须有
backend/app/copier.py:178-218- D-InSAR 复制时会构建:
<dest>/<task_alias>/master<dest>/<task_alias>/slave.dinsar_pair.json
- D-InSAR 复制时会构建:
backend/app/isce2_pipeline/run_lt1_dinsar_pipeline.py:262-298- pipeline 运行时明确按
master/slave两景读取
- pipeline 运行时明确按
所以这是一套“面向影像对”的输入协议。
3. 现有 PS/SBAS 选片算法能不能找出时序队列
可以,但当前更准确地说,它是:
- 一个“候选栈发现器”
- 还不是一个“生产级栈定义器”
现有实现:
backend/app/services/spatial_service.py:414-481
当前逻辑会:
- 先选出与 AOI 初始重叠比例满足阈值的影像
- 按轨道方向分组
- 求每个方向的公共重叠区
- 再筛出对公共区覆盖比例满足阈值的影像
- 最终按日期排序返回
这对 SBAS 是有价值的,因为它已经能给出:
- 同轨方向
- 共享公共覆盖区
- 时间排序后的影像列表
但它当前还缺少若干生产级约束:
- 没有显式要求
has_orbit_data = True - 没有显式要求相同
imaging_mode - 没有显式要求相同
polarization - 没有最小栈规模规则
- 没有最大时间间隔或参考影像策略
- 没有把结果固化为“一个稳定的 stack identity”
所以答案是:
- 用来找 SBAS 候选时序队列,可以
- 直接当生产入口,不够
4. 为什么 D-InSAR 的 task 路径模式不能原样套给 SBAS
4.1 D-InSAR 是二元输入,SBAS 是栈输入
D-InSAR 当前 pipeline 只解析两个角色:
masterslave
见:
backend/app/isce2_pipeline/run_lt1_dinsar_pipeline.py:262-298
而 SBAS 至少需要:
- 一个有序场景集合
- 栈级别的公共参数
- 栈级别的参考日期
- 栈级别的输出目录约定
因此 SBAS 的输入目录协议必须是“stack contract”,不是“pair contract”。
4.2 当前 copy-ps-stack 是平铺复制,不会生成栈元数据
现有 PS 复制逻辑:
backend/app/copier.py:45-115
它的行为是:
- 从
PsTaskItemORM.file_path取路径 - 优先复制
original_path + "_envi_import" - 否则复制原路径
- 直接平铺复制到
dest_dir/<basename>
它不会生成:
- 栈 manifest
- 日期排序
- 参考日期
- 轨道清单
- DEM / water mask / publish 约定
因此这套复制结果目前更像“把选中的影像搬过去”,不是“形成一个可投产的 SBAS 输入包”。
4.3 当前 PS 批次模型保存的信息不够
现有:
backend/app/models/orm.py:532-550backend/app/routers/task_batches.py:303-312
PsTaskItemORM 只保存:
file_pathsatelliteimaging_datepolarizationhas_orbit_data
没有保存:
orbit_directionimaging_mode- 稳定
group_key - 公共覆盖区
- 参考影像策略
这说明 PS 批次目前还是“输入快照”,不是“可直接投产的 stack contract”。
5. 哪部分可以直接复用
可以直接复用的,不少。
5.1 生产入口模式
复用思路:
- 一个
root_dir - 引擎自己扫描这个目录
- 支持“单个 stack 目录”或“父目录下多个 stack 目录”
这点可以直接仿照:
backend/app/dinsar_engines/isce2_engine.py:314-361
只是把目录判定从:
master + slave
换成:
stack_input_manifest.json或.ps_stack.json
5.2 作业提交模式
可以直接复用 D-InSAR 当前的:
- router 提交任务
task_service.create_task()job_queue_service.create_job()- worker 执行
- 返回单次运行状态
5.3 目录驱动执行
这部分思想也可以复用:
- 输入目录是唯一入口
- engine 不依赖前端临时状态
- 只要目录契约稳定,就可以重复运行
这对 SBAS 是对的。
6. SBAS 推荐的“task 路径模式”
建议做一个 SBAS 版输入目录协议,而不是复用 D-InSAR 的 Task_* 结构。
推荐:
Stack_<group_key>/
stack_input_manifest.json
scenes/
20250118/
source_scene.json
<raw scene or link>
20250315/
source_scene.json
<raw scene or link>
20250510/
source_scene.json
<raw scene or link>
inputs/
dem/
logs/
后续运行阶段再生成:
Stack_<group_key>/
stack_input_manifest.json
scenes/
SLC/
stack_work/
publish/
logs/
7. 推荐的 stack_input_manifest.json 最小字段
至少应包含:
group_keybatch_idmodesbas
directionreference_datestack_datesscene_countdem_path_windowsdem_path_wslorbit_pool_windowsorbit_pool_wslpublish_dir_windowspublish_dir_wslwater_mask_modescenes[]datefile_pathsatelliteimaging_modepolarizationorbit_directionorbit_xml_pathhas_orbit_data
这个文件对 SBAS 的作用,等价于 D-InSAR 里的 .dinsar_pair.json,但它描述的是一个栈,不是一对。
8. 物理复制要不要照搬 D-InSAR
不建议原样照搬。
原因:
- SBAS 常常是 5 景、10 景甚至更多
- 全量复制原始影像会放大 IO 和存储成本
- 你当前原始数据已经在 WSL 可见路径下,不一定需要再复制一遍
更合理的 Phase 1 做法:
- 保留“输入目录”概念
- 但目录里优先存:
- manifest
- sidecar metadata
- 规范化链接或原路径引用
- 仅在必要时物化最小运行所需文件
也就是说:
- 推荐“目录驱动”
- 不推荐“全量复制驱动”
9. 最终判断
如果你的问题是:
- “现有匹配算法能不能找出 SBAS 需要的时序影像队列?”
答案是:
- 可以作为候选栈发现器
- 但还需要补生产级校验和栈固化
如果你的问题是:
- “能不能沿用 D-InSAR 生产时的输入 task 路径模式?”
答案是:
- 可以沿用这个模式的思想
- 不能沿用现有 D-InSAR 的具体目录协议和复制实现
最推荐的落地方式是:
- 保留“目录作为生产入口”
- 为 SBAS 定义独立的
Stack_*输入契约 - 用
stack_input_manifest.json替代.dinsar_pair.json - 用 stack-aware 的 prepare/materialize 步骤替代当前
copy-ps-stack平铺复制
这样既能继承现有系统的生产模式,又不会把 SBAS 错套成二景 D-InSAR。