Refactor local InSAR asset and production workflows

This commit is contained in:
2026-06-21 12:30:21 +08:00
parent 65a8cc4eac
commit 71c524967c
88 changed files with 11165 additions and 3017 deletions
@@ -0,0 +1,121 @@
# 三数据本机生产与结果管理约定
最后更新:2026-06-17
本文件是陆探一号、Sentinel-1、高分三在当前系统中的运行边界。2026-06-16 起,UNC 不再作为活动生产链路、源数据池、精轨池或 Task_Pool。网络共享只可作为人工搬运的外部介质,不进入后台生产任务。
## 1. 总原则
1. 源数据和精轨都放在本机路径,UNC 不进入活动生产链路。
2. LT-1 和 Sentinel-1 当前管理对象是本机压缩包源池,不管理旧解包目录。
3. 管理阶段只从压缩包中抽取 XML/manifest、元数据和预览图,用于资产索引、日期/轨道绑定和检索。
4. 生产任务需要真实文件树时,才按任务解包或复制到本机 `Task_Pool`,不从 UNC 拉取。
5. D-InSAR 和 SBAS-InSAR 的运行材料、工作目录、结果发布目录必须是本机路径。
6. 生产结果进入数据管理或结果 catalog,InSAR 形变分析只读取已登记结果,不直接扫描临时工作目录。
7. 洪水检测模块本轮冻结,不纳入本次审计和改造。
## 2. 三类数据边界
| 数据 | 源数据位置 | 精轨位置 | 生产模块 | 结果管理 |
| --- | --- | --- | --- | --- |
| 陆探一号 LT-1 | `D:\LuTan1_Image_Pool_Zip`,本机 LT-1 压缩包源池 | `D:\LT1_data_lsarorbit` | 生产管理保留占位;D-InSAR 走 LandSAR、ENVI+SARscape、Gamma/PyINTSBAS 走 Gamma/PyINT 主线 | D-InSAR/SBAS 结果 catalog |
| Sentinel-1 | `D:\Sentinel1_Image_Pool_ZIP`,本机 Sentinel-1 ZIP/SAFE 压缩包源池 | `D:\Sentinel1_EOF_Pool` | 生产管理保留占位;D-InSAR 当前只走 Gamma/PyINT;SBAS 只做发现和规划,执行未启用 | D-InSAR 结果 catalogSBAS 暂无执行产物 |
| 高分三 GF3 | 本机只管理已生产的 `_geo` 成品;原始归档仅追踪 | 无精轨链路 | 外部 SARscape 服务器生产 `_geo`;本机不启动 SARscape wrapper | 复制到 `D:\GaoFen3_Pool\native_geo` 后登记,WebP 从 `_geo` 主二进制生成 |
高分三外部结果命名约定:
```text
D:\GaoFen3_Pool\native_geo\20260609_geo\
GF3_MDJ_FSI_051759_E130.2_N43.5_20260609_L1A_HHHV_L10007375467\
GF3_MDJ_FSI_051759_E130.2_N43.5_20260609_L1A_HHHV_L10007375467_hh_geo
GF3_MDJ_FSI_051759_E130.2_N43.5_20260609_L1A_HHHV_L10007375467_hh_geo.hdr
GF3_MDJ_FSI_051759_E130.2_N43.5_20260609_L1A_HHHV_L10007375467_hh_geo.sml
```
`*_geo_ql.tif` 可作为辅助材料,但不作为正式 WebP 预览源。正式预览从 SARscape `_geo` ENVI 二进制读取生成。
### GF3 成品池扫描入库流程
1. 外部 SARscape 服务器完成生产后,把整景目录复制到本机 `D:\GaoFen3_Pool\native_geo\YYYYMMDD_geo\<GF3_SCENE>`
2. 每个场景目录至少包含一个完整极化的 `*_geo``*_geo.hdr``*_geo.sml``*_geo_ql.tif` 可以同时提供,作为范围读取兜底和人工核验材料。
3. 在系统中点击 `登记 _geo 结果`,后端递归扫描所有 `*_geo` 场景目录,写入 `gf3_native_manifest.json``gf3_native_preview_manifest.json`,并登记 `source_product_assets``radar_data`
4. 登记时优先从 `*_geo` ENVI 主数据读取 CRS、范围和中心点;如果主数据无法读取范围,再尝试对应的 `*_geo_ql.tif`
5. 点击 `生成 WebP` 后,系统从已登记的 `*_geo` 主数据生成本机 WebP 缓存,缓存路径仍使用 `backend\image_cache\radar_raw` / `radar_geo` 体系。
6. `D:\GaoFen3_Pool\catalog` 只保存平台登记 manifest 和后续可选派生物;默认不复制完整影像、不把 `_geo` 转成全量 GeoTIFF。
## 3. 本机路径与按需解包
当前核心路径:
```text
UNPACK_SOURCE_DIRS=
SOURCE_PRODUCT_DIRS=D:\LuTan1_Image_Pool_Zip;D:\Sentinel1_Image_Pool_ZIP
SENTINEL1_STORAGE_DIRS=
INSAR_STORAGE_DIRS=
MONITOR_RADAR_DIRS=
ORBIT_SOURCE_DIRS=D:\LT1_data_lsarorbit;D:\Sentinel1_EOF_Pool
ORBIT_POOL_ENVI=D:\orbit_pools\envi
PYINT_ORBIT_POOL_TXT=D:\orbit_pools\envi
GAMMA_SBAS_ORBIT_ROOTS=D:\orbit_pools\envi
ISCE2_ENABLED=false
ORBIT_POOL_ISCE2=
TASK_POOL_ROOT=D:\Task_Pool
DINSAR_TASK_POOL_ROOT=D:\Task_Pool\DInSAR
SBAS_TASK_POOL_ROOT=D:\Task_Pool\SBAS
DATA_DISTRIBUTION_ROOT=D:\Task_Pool\Data_Distribution
GF3_TASK_POOL_ROOT=D:\GaoFen3_Pool\task_pool
GF3_ARCHIVE_SOURCE_DIRS=D:\GaoFen3_Pool\archives
GF3_SARSCAPE_NATIVE_DIRS=D:\GaoFen3_Pool\native_geo
GF3_STORAGE_DIRS=D:\GaoFen3_Pool\catalog
GF3_SARSCAPE_RUNTIME_DIR=D:\GaoFen3_Pool\task_pool\sarscape_runtime
```
压缩包资产索引只建立资产索引、预览缓存和轨道绑定,不提供“全量入库/全量解包”按钮。当前 LT-1/Sentinel-1 主流程从本机压缩包源池扫描,只抽取 XML/manifest、元数据和预览图;参与计算时才按任务解包或复制到 `Task_Pool` 或具体任务目录。
生产准备和数据分发是两个归口。前端不让用户输入服务器绝对路径,只填写任务名;后端按 `.env` 中固定根目录创建子目录,避免远程浏览器把用户本机路径传给服务器。`生产数据准备` 以批次配对为输入,从 LT-1/Sentinel-1 源压缩包按需 materialize 到 `DINSAR_TASK_POOL_ROOT\<任务名>`,在其下生成 `Task_YYYYMMDD_YYYYMMDD\master``slave``orbit``pair_metadata.json`,供 D-InSAR 引擎直接运行;这是生产工作区,不是源池。`数据分发` 只用于外发或跨目录搬运源压缩包,导出到 `DATA_DISTRIBUTION_ROOT\<任务名>`,目录结构为 `data/``orbit/``pairs.json``manifest.json`。其中 `data/` 只能保存 LT-1/Sentinel-1 源压缩包文件,不能保存旧解包目录。旧批次如果仍指向 `D:\LuTan1_Image_Pool``D:\Sentinel1_Image_Pool` 解包目录,应重新从压缩包资产重建批次后再执行生产准备或分发。
源池扫描采用增量解析语义:系统仍递归列出 `SOURCE_PRODUCT_DIRS` 下的候选压缩包文件名,用于发现新增和删除;数据库中已有且 `file_path``size_bytes``mtime_epoch``parser_version``parse_status` 均满足未变化条件的 `S1_ZIP` / `LT1_ARCHIVE` 资产会跳过包内 XML/manifest 读取,不再每次全量重读压缩包内容。新增、修改、曾经失效或解析器版本变化的压缩包会重新解析并更新资产索引。
LT-1 解析字段必须区分:规范文件名中的 `SLC/SSC``product_type` 和干涉源类型判断依据;XML 中 `imageDataInfo/imageDataType=COMPLEX` 只能写入 `image_data_type`,不能覆盖 `product_type`。前端“范围/可用性”依赖 `coverage_polygon + imaging_date + imaging_mode + polarization + complex token`,因此解析器变更必须同时验证 LT-1 `coverage_polygon``insar_source_ready` 计数。
LT-1/GF3 XML 的四个 `sceneCornerCoord` 不得直接按 XML 出现顺序连线。解析器必须把角点重排为非自交闭合四边形后再写入 `coverage_polygon` 和 PostGIS `geom`;验收时需检查 Shapely/PostGIS polygon valid,避免前端显示成沙漏形。
资产扫描入口支持三种语义:`families=["LT1"]` 只扫陆探源包/精轨,`families=["S1"]` 只扫哨兵源包/精轨,空 `families` 表示合扫。精密轨道扫描同样按 `inventory_types=["orbit_asset"] + families` 区分 LT-1、S1 或全部,前端不得再通过固定路径顺序猜测 root id。
精轨生产池按 [PRECISE_ORBIT_PRODUCTION_CONTRACT_20260617.md](PRECISE_ORBIT_PRODUCTION_CONTRACT_20260617.md) 执行:`ORBIT_SOURCE_DIRS` 是原生资产层;LT-1 扫描后同步到 `ORBIT_POOL_ENVI\LT1A|LT1B`,供 ENVI/SARscape、Gamma/PyINT D-InSAR 和 Gamma SBAS 使用;Sentinel-1 使用 EOF 原生资产绑定;ISCE2 精轨 XML 池为 legacy,默认不启用。
`UNPACK_SOURCE_DIRS` 为空是当前设计状态;通用全量解包入口不进入前端主流程。压缩包源池由 `SOURCE_PRODUCT_DIRS` 管理。
已执行的代码约束:
- `validate_runtime_config()` 对源数据、精轨、Task_Pool、D-InSAR/SBAS 工作根、结果根、GF3 `_geo` 根执行 UNC 校验。
- Sentinel-1 单个/批量解包和通用 materialize 拒绝 UNC 源路径与 UNC 目标路径。
- `/monitor/status` 返回按实际磁盘卷汇总的 `storage_roots`,例如多个 `D:\...` 路径只展示一个 `D:\` 容量项,同时报告配置路径数量和缺失路径数量。
## 4. 生产管理界面
生产管理工作台现在承担三类数据的生产边界展示:
- `陆探生产占位`:说明 LT-1 本机压缩包源池、精轨、按需解包、D-InSAR/SBAS 本机 Task_Pool。
- `哨兵生产占位`:说明 Sentinel-1 本机压缩包源池、EOF 精轨、按需解包、D-InSAR Gamma/PyINT、SBAS 规划态。
- `高分三结果登记`:说明外部 SARscape 生产、本机 `_geo` 登记和 WebP 生成。
- `D-InSAR 运行``D-InSAR 产物``SBAS-InSAR Production``SBAS-InSAR 结果` 保留现有生产和结果 catalog 功能。
这些占位不是最终生产向导,但先把三类数据放进同一生产管理域,避免继续把数据扫描、生产运行、结果登记混在数据监控按钮里。
## 5. InSAR 形变分析审计
当前边界:
- D-InSAR 结果由 D-InSAR product catalog 管理,分析页不应直接读取 Task_Pool 临时目录。
- SBAS 结果由 SBAS product catalog 管理,速率图、质量指标和监测点曲线从发布包读取。
- Sentinel-1 SBAS 目前只是规划态,不能在形变分析中伪装成可执行生产链路。
- GF3 `_geo` 登记到雷达资产和 WebP 缓存后,可作为数据管理资产;它不是 D-InSAR/SBAS 形变分析的生产输入。
后续如果要把分析页做成正式工作台,应先统一读取结果 catalog,再补地图叠加、剖面、时间序列和质量过滤,不应回退到扫描任意目录。
## 6. 本轮不改内容
- 洪水检测、GF3 水体检测和洪水 GeoTIFF 预处理暂不调整。
- D-InSAR 三引擎内部执行细节不在本轮重写,只强化本机路径边界。
- Sentinel-1 SBAS 不启用执行,只保留发现和规划。