Integrate SBAS workflows and redesign task center

This commit is contained in:
2026-06-13 13:10:12 +08:00
parent b931e8db53
commit 58a87706ef
275 changed files with 18750 additions and 42524 deletions
@@ -0,0 +1,283 @@
# LandSAR SBAS-InSAR 接入设计
记录时间:2026-06-04
## 1. 结论
LandSAR 支持 SBAS-InSAR。其 SBAS 是一体化流程,算法编号为 `280039`,参数文件入口是:
```text
SBASProcess
ID 280039
```
这条链路和当前系统里的 Gamma SBAS 不同。Gamma SBAS 是分阶段工作流,包含栈发现、baseline audit、共参考配准、RDC DEM、干涉图、IPTA 反演和发布阶段;LandSAR SBAS 更接近 LandSAR D-InSAR 的模式:准备好 `Task_*/Input_Data` 后,通过 `InSAR_Console.exe + 280039.txt` 一次执行。
因此接入建议是:在 SBAS-InSAR 页面新增 `LandSAR SBAS` 处理器分支,而不是把 LandSAR 硬塞进现有 Gamma 分阶段按钮。
## 2. LandSAR SBAS 输入输出
### 输入目录
LandSAR SBAS 扫描 `Task_*` 目录,每个任务目录要求:
```text
Task_xxx
|-- Input_Data
| |-- LT1*_SLC.xml
| |-- LT1*_SLC.tif
| `-- ...
`-- Output_Data
```
核心条件:
- `Input_Data` 下至少 3 景已导入的 LT-1 SLC。
- 每景需要 `LT1*_SLC.xml``LT1*_SLC.tif/.tiff` 配对。
- DEM 需要外部指定。
- 精轨最好已经写入 XML 或已通过 LandSAR 精轨导入流程处理。
当前 LandSAR 项目文档说明,TimeSeriesBuilder 输出的 `Task_TS_*/Input_Data` 可直接被 PS/SBAS 页面扫描。
### 输出目录
LandSAR SBAS 输出在每个任务的 `Output_Data`
```text
Output_Data
|-- *.los.tif
|-- *.raster.tif
|-- vector/
|-- 280039.log
`-- 280039_console.log
```
成功判定可参考 LandSAR GUI
- 日志包含 `SBAS``success`
- 或日志包含 `console success`
- 控制台返回码为 0
- 同时存在核心输出,如 `*.los.tif``*.raster.tif`
## 3. 与现有系统的差异
### 现有 Gamma SBAS
当前 `/api/sbas-insar-production` 是 Gamma / IPTA SBAS 主线:
- 从资产池发现 LT-1 或 Sentinel-1 候选栈。
- 创建 `run_manifest.json`
- 分阶段执行 Gamma 脚本。
- catalog 期望的核心产品是:
- `publish/geotiff/los_rate_toward_m_per_year.tif`
- `publish/geotiff/los_sigma_m_per_year.tif`
- 相关预览图、质量图和监测点曲线。
### LandSAR SBAS
LandSAR SBAS 的输入不是系统当前的资产栈 manifest,而是 LandSAR 风格的 `Task_*/Input_Data`
LandSAR SBAS 的输出语义也和 Gamma 不完全一致。`*.los.tif` 在文档里描述为 LOS 时序形变场,不应在没有验证前直接标成 Gamma 那种 `los_rate_toward_m_per_year` 速率产品。
因此 LandSAR SBAS 需要独立 processor 标识:
```text
processor_code = landsar_sbas
profile_code = lt1_landsar_sbas
engine_code = landsar
proid = 280039
```
## 4. 推荐接入路线
### 阶段 1MVP,只接现成 Task/Input_Data
目标:先让系统能扫描、提交、监控和归档 LandSAR SBAS,不负责从原始 LT-1 自动构建时序 Input_Data。
新增配置:
```text
LANDSAR_SBAS_ENABLED=true
LANDSAR_SBAS_WORK_ROOT=D:\LandSAR_Work\sbas
LANDSAR_SBAS_DEM_PATH=D:\DEM\HeiLongJiang10M_DEM.tif
LANDSAR_SBAS_TIMEOUT_SECONDS=172800
LANDSAR_SBAS_MIN_SCENES=3
LANDSAR_SBAS_SOURCE_ROOTS=D:\Task_Pool\SBAS
```
后端新增:
```text
backend/app/services/landsar_sbas_service.py
```
职责:
- 检查 LandSAR runtime、授权服务、`InSAR_Console.exe`、SBAS 相关 DLL。
- 扫描 root 下的 `Task_*` 或单个 `Task_*`
- 校验 `Input_Data` 内 SLC XML/TIF 数量。
- 生成 `280039.txt` 参数文件。
- 调用:
```text
D:\LandSAR\InSAR_Console.exe D:\LandSAR_Work\sbas\<run_id>\native\<task>\Output_Data\280039.txt
```
- 把日志和核心 GeoTIFF 复制到系统标准结果目录。
- 写入 `run_manifest.json``workflow_summary.json``product_summary.json`
建议标准结果目录:
```text
D:\production_results\timeseries\sbas\<run_id>
|-- run_manifest.json
|-- workflow_summary.json
|-- product_summary.json
|-- native_logs
| |-- 280039.txt
| |-- 280039.log
| `-- 280039_console.log
`-- publish
`-- landsar
|-- los_timeseries.tif
|-- post_raster.tif
`-- vector/
```
任务队列新增:
```text
JOB_TYPE_SBAS_LANDSAR_WORKFLOW = "SBAS_LANDSAR_WORKFLOW"
```
前端新增:
-`SBAS-InSAR 生产` 页面增加处理器选择:
- `Gamma / IPTA SBAS`
- `LandSAR SBAS`
- 选择 `LandSAR SBAS` 后显示:
- Task 根目录
- DEM 路径
- 最少景数
- 干涉对策略:`single` / `prim`
- 垂直基线阈值
- 时间基线阈值
- 方位向/距离向多视
- 输出 LOS 时序
- 输出编码后栅格
- 隐藏 Gamma 的 baseline/coreg/RDC DEM/IPTA 分阶段按钮。
### 阶段 2:接入 catalog 和结果页
当前 `sbas_insar_catalog_service.py` 主要按 Gamma 产品定义扫描。LandSAR 接入后有两种选择:
1. 复用 `sbas_insar` catalog,但让资产定义按 `processor_code` 分支。
2. 新建 `landsar_sbas` catalog。
建议选择 1。理由是前端结果页还是 SBAS-InSAR 结果,只是处理器不同。
需要调整:
- `_READY_STATUSES` 增加 LandSAR 完成状态。
- `_CORE_ASSETS` 改成按 processor 分支。
- LandSAR 主资产角色:
```text
primary_geotiff -> publish/landsar/los_timeseries.tif
secondary_geotiff -> publish/landsar/post_raster.tif
run_manifest -> run_manifest.json
workflow_summary -> workflow_summary.json
native_console_log -> native_logs/280039_console.log
```
注意:不要把 LandSAR `*.los.tif` 直接命名为 `los_rate_toward_m_per_year.tif`,除非算法工程师确认该文件确实是年速率图。
### 阶段 3:从资产池自动构建 LandSAR 时序 Input_Data
阶段 1 只接现成 `Task_*/Input_Data`。如果需要从系统资产池直接生产 LandSAR SBAS,需要新增前处理:
1. 从 LT-1 资产池选择同轨同极化多景。
2. 调用 LandSAR LT-1 数据导入 `100016`,构建多景 `Input_Data`
3. 调用 LandSAR 精轨导入 `100206`,或确认精轨已进入 XML。
4. 输出 `Task_TS_*/Input_Data`
5. 再调用 SBAS `280039`
这一阶段风险比 MVP 高,建议在 LandSAR SBAS 一体化流程跑通后再做。
## 5. 参数建议
MVP 默认参数应与 LandSAR GUI 保持一致:
```text
dem_data_type=1 # 文件。注意 SBAS 模板中 0 是目录,1 是文件
dem_format=4 # COPERNICUS,需结合实际 DEM 测试
intf_method=0 # single
perp_baseline=200
time_baseline=300
doppler_baseline=100
az_looks=3
rg_looks=3
da_threshold=0.25
intensity_threshold=0.0
calibration_threshold=0.4
fine_reg_window=128
resample_factor=2
network_type=0 # Delaunay
max_arc_distance=1000
solve_method=0 # Periodogram
max_temporal_coh=0.7
ref_point_index=0
spatial_filter_dist=1000
unwrap_ref_index=0
time_filter_threshold=0.3
do_los_output=1
gen_vector_map=0
gen_pre_raster=0
gen_post_raster=1
```
需要特别注意 DEM 参数。DInSAR 用 `HeiLongJiang10M_DEM.tif` 已跑通,但 SBAS 模板里的 DEM 类型字段和 DInSAR 不同:
- SBAS`dem_data_type=0` 表示目录,`1` 表示文件。
- 当前 DEM 是 GeoTIFF 文件,所以应传 `1`
## 6. 风险点
1. 输入结构风险
现有 Gamma SBAS 的候选栈不是 LandSAR 的 `Task_*/Input_Data`。MVP 必须明确只支持 LandSAR 已导入后的时序任务目录。
2. 输出语义风险
LandSAR `*.los.tif` 是否为单幅速率图、累计形变图,还是多波段时序图,需要用一次真实输出确认。没有确认前不能按 Gamma 年速率产品入库。
3. DLL 风险
SBAS/PS 可能需要 DInSAR 之外的 DLL,例如:
- `SAR_InSAR_MTInSARModel.dll`
- `SAR_InSAR_PSInSAR_CSU.dll`
- `SAR_InSAR_MBCP_MTInSARModel.dll`
LandSAR SBAS availability check 应单独检查这些 DLL。
4. 运行时间风险
SBAS 是多景时序处理,默认 timeout 应明显大于 DInSAR,建议先设为 48 小时。
5. catalog 风险
当前 SBAS catalog 以 Gamma 结果为主。LandSAR 接入时要做 processor-specific asset mapping,否则会出现“运行成功但结果页查不到”。
## 7. 建议下一步
先实现阶段 1
1. 新增 `landsar_sbas_service.py`,只支持扫描现成 `Task_*/Input_Data`
2. 新增 `SBAS_LANDSAR_WORKFLOW` 后台任务。
3. 前端 SBAS 页面增加 `LandSAR SBAS` 分支。
4. 先不改资产池自动构建,不接 Sentinel-1,不开放 GACOS。
5. 用一个 3 景以上的 `Task_TS_*` 做首轮真实测试。
6. 根据真实输出再接 catalog 和结果页。
这个路线保留 Gamma SBAS 现状,同时利用已经验证的 LandSAR runtime 和授权链路,风险最低。