5.5 KiB
5.5 KiB
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
Task 目录名优先使用:
task_aliastask_namepair_id
图形界面用法
双击运行:
dinsar-restore.exe
操作流程:
- 点击输入目录的“选择...”按钮,选择
BundleRoot。 - 建议先点击“数据自检”。
- 点击输出目录的“选择...”按钮,选择
OutputRoot。 - 根据需要设置
Dry run、覆盖已有 Task、Limit。 - 点击“开始恢复”。
- 在运行日志区域查看进度、warning 和错误。
数据自检
“数据自检”只检查输入数据,不复制文件,也不会生成 Task_*。
自检内容包括:
pairs.json是否存在、是否能解析。data/是否存在。- 每个 pair 的 Task 目录名是否合法。
master_data是否存在、是否为非空目录。slave_data是否存在、是否为非空目录。- 是否存在重复 Task 目录名。
master_orbit/slave_orbit是否存在。
注意:轨道文件缺失只记为 warning,不算失败。
分批恢复
如果数据量很大,可以用 Limit 分批执行。
例如共有 1000 个 Task:
- 第一次设置
Limit=200,恢复 200 个。 - 第二次仍设置
Limit=200,工具会跳过已完成的 200 个,再恢复新的 200 个。 - 重复执行,直到全部完成。
已完成 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.exedinsar-restore-console.exeREADME.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.