Files
dinsar-bundle-restore/README.md
T

6.1 KiB
Raw Blame History

D-InSAR 去重源数据包恢复工具

这个工具用于把“去重源数据包”恢复成传统 D-InSAR Task_* 目录结构。

适合接收方在本地运行:选择一个 BundleRoot 输入目录,工具会按 pairs.json 中的配对关系,在输出目录中恢复每个 Task_*

产物

当前提供两个 Windows 可执行文件:

  • dinsar-restore.exe:图形界面版,推荐普通用户双击使用。
  • dinsar-restore-console.exe:命令行版,适合脚本、批处理或自动化调用。

Go 编译后的 exe 是单文件程序,不需要安装 Python,也不需要额外运行环境。

输入目录格式

输入目录应类似:

BundleRoot/
  data/
    scene_<hash>_<source_name>/
    ...
  orbit/
    orbit_<hash>_<orbit_name>.txt
    ...
  pairs.json
  manifest.json

其中:

  • pairs.json 必须存在。
  • data/ 必须存在。
  • orbit/ 可以不存在;轨道文件缺失只会记录 warning,不会阻断恢复。

输出目录格式

恢复后输出目录类似:

OutputRoot/
  Task_YYYYMMDD_YYYYMMDD/
    master/
    slave/
    orbit/
    .dinsar_pair.json
  restore_report.json
  restore.log

恢复时会尽量去掉去重打包时增加的名称前缀:

  • data/scene_<hash>_<原始数据名>/ 只作为 bundle 内部存储目录,恢复后不会在 master/slave/ 下额外保留这一层目录。
  • master/slave/ 下直接放数据文件;如果数据文件名为 scene_<hash>_<原始文件名>,会恢复为 <原始文件名>
  • orbit/orbit_<hash>_<原始轨道文件名> 会恢复为 Task_*/orbit/<原始轨道文件名>
  • 如果 pairs.json 中提供了 master_orbit_source_path / slave_orbit_source_path,轨道文件会优先使用这些原始路径的文件名部分。

Task 目录名优先使用:

  1. task_alias
  2. task_name
  3. pair_id

图形界面用法

双击运行:

dinsar-restore.exe

操作流程:

  1. 点击输入目录的“选择...”按钮,选择 BundleRoot
  2. 建议先点击“数据自检”。
  3. 点击输出目录的“选择...”按钮,选择 OutputRoot
  4. 根据需要设置 Dry run覆盖已有 TaskLimit
  5. 点击“开始恢复”。
  6. 在运行日志区域查看进度、warning 和错误。

数据自检

“数据自检”只检查输入数据,不复制文件,也不会生成 Task_*

自检内容包括:

  • pairs.json 是否存在、是否能解析。
  • data/ 是否存在。
  • 每个 pair 的 Task 目录名是否合法。
  • master_data 是否存在、是否为非空目录。
  • slave_data 是否存在、是否为非空目录。
  • 是否存在重复 Task 目录名。
  • master_orbit / slave_orbit 是否存在。

注意:轨道文件缺失只记为 warning,不算失败。

分批恢复

如果数据量很大,可以用 Limit 分批执行。

例如共有 1000 个 Task

  1. 第一次设置 Limit=200,恢复 200 个。
  2. 第二次仍设置 Limit=200,工具会跳过已完成的 200 个,再恢复新的 200 个。
  3. 重复执行,直到全部完成。

已完成 Task 的判断标准是:

  • Task/master/ 存在且非空。
  • Task/slave/ 存在且非空。

已跳过的 Task 不会占用 Limit 数量。

覆盖已有 Task

默认情况下,已经完整恢复的 Task 会被跳过。

如果勾选“覆盖已有 Task”,工具会删除并重建已有 Task 目录。这个选项适合重新生成结果,但使用前应确认输出目录中没有需要保留的手工文件。

Dry run

勾选 Dry run 后,工具只打印计划,不复制文件。

可以用它先确认将要恢复哪些 Task。

命令行用法

命令行版文件:

.\dinsar-restore-console.exe

数据自检:

.\dinsar-restore-console.exe --input D:\BundleRoot --check-only

正式恢复:

.\dinsar-restore-console.exe --input D:\BundleRoot --output D:\OutputRoot

Dry run

.\dinsar-restore-console.exe --input D:\BundleRoot --output D:\OutputRoot --dry-run

覆盖已有 Task

.\dinsar-restore-console.exe --input D:\BundleRoot --output D:\OutputRoot --overwrite

分批恢复,每次最多恢复 200 个新 Task:

.\dinsar-restore-console.exe --input D:\BundleRoot --output D:\OutputRoot --limit 200

参数说明

参数 说明
--input 输入目录,即 BundleRoot
--output 输出目录,即 OutputRoot--check-only 时可以不填。
--check-only 只做数据自检,不恢复文件。
--dry-run 只打印恢复计划,不复制文件。
--limit N 本次最多恢复 N 个新 Task。已跳过的 Task 不计入数量。
--overwrite 删除并重建已有 Task。
--skip-existing 跳过已完成 Task,默认开启。通常不需要手动设置。

--overwrite 和显式设置的 --skip-existing 不能同时使用。

输出文件

正式恢复后,输出目录会生成:

  • restore.log:人类可读日志。
  • restore_report.json:机器可读恢复报告。
  • 每个 Task_* 内的 .dinsar_pair.json:该 Task 对应的 pair 元信息。

restore_report.json 示例:

{
  "started_at": "2026-05-11T00:00:00Z",
  "finished_at": "2026-05-11T00:10:00Z",
  "input_root": "D:\\BundleRoot",
  "output_root": "D:\\OutputRoot",
  "total_pairs": 1000,
  "restored": 200,
  "skipped": 0,
  "failed": 0,
  "warnings": []
}

重新编译

需要 Go 1.22 或更高版本。

图形界面版:

go build -ldflags "-H=windowsgui" -o dinsar-restore.exe .

命令行版:

go build -o dinsar-restore-console.exe .

运行测试:

go test ./...

发布建议

建议 GitHub Release 附带以下文件:

  • dinsar-restore.exe
  • dinsar-restore-console.exe
  • README.md

Release 标题示例:

D-InSAR Restore Tool v0.1.0

Release 说明可写:

Initial release.

- Add Windows GUI restore tool.
- Add console restore tool.
- Add data self-check before restore.
- Support batch continuation with Limit.
- Generate restore_report.json and restore.log.