CM93 MySQL importer validated baseline
This commit is contained in:
236
README.md
Normal file
236
README.md
Normal file
@@ -0,0 +1,236 @@
|
||||
# CM93 → MySQL 高精度母数据库导入器 v0.2.0
|
||||
|
||||
## 目标
|
||||
|
||||
本工程完成第一阶段:
|
||||
|
||||
**CM93 Z/A/B/C/D/E/F/G → 完整解析 → MySQL 5.7.34 母数据库 → 源/库双重审计。**
|
||||
|
||||
本阶段不生成 PBF。PBF 是第二阶段,可从本母数据库反复生成。
|
||||
|
||||
## 固定环境
|
||||
|
||||
- Windows 11
|
||||
- pyenv-win
|
||||
- Python **3.12.10**
|
||||
- MySQL **5.7.34**
|
||||
- 当前 CM93 日本数据目录:`D:\Ship\CM93V2\CM93JAPAN`
|
||||
- 标准化几何:经纬度/WGS84 语义,SRID 4326
|
||||
- 坐标计算:Python double / MySQL WKB double
|
||||
|
||||
## 已实现
|
||||
|
||||
- CM93 256-byte substitution decode
|
||||
- 10-byte prolog + 128-byte header
|
||||
- 文件长度完整性检查
|
||||
- vector table
|
||||
- 2D point table
|
||||
- 3D sounding table
|
||||
- feature table
|
||||
- object dictionary
|
||||
- typed attribute dictionary / attribute blob
|
||||
- Point / Line / Area / Sounding
|
||||
- edge reverse flag
|
||||
- Area contour/ring 组装
|
||||
- `_m_sor` coverage
|
||||
- `_wgsox/_wgsoy` 保存与标准化坐标修正
|
||||
- CM93 6378388.0 m Mercator
|
||||
- typed MySQL attributes
|
||||
- raw feature / raw attribute
|
||||
- 解码后的全部 CM93 table 分块保存
|
||||
- 每 cell 独立事务
|
||||
- DONE 自动跳过
|
||||
- FAILED 默认重试
|
||||
- 全目录断点续导
|
||||
- import job / event 日志
|
||||
- 源文件重新解析审计
|
||||
- 数据库逐 cell 数量审计
|
||||
- raw 数据字节完整性审计
|
||||
- SHA-256 审计
|
||||
- MySQL WKB 双精度回读审计
|
||||
|
||||
## 已验证的真实 CM93 小样本
|
||||
|
||||
开发时对用户提供的 147 个真实 CM93 cell 执行完整 parser 回归:
|
||||
|
||||
- Cell: 147/147 PASS
|
||||
- Feature: 100,621
|
||||
- Attribute: 112,746
|
||||
- 未发生 record 越界或文件尾剩余
|
||||
- header attribute-byte count 与解析结果一致
|
||||
- header geometry-ref count 与解析结果一致
|
||||
- header related-pointer count 与解析结果一致
|
||||
- decoded raw table 字节合计与原文件长度一致
|
||||
|
||||
MySQL 写入需要在目标 Windows/MySQL 5.7.34 上做 pilot 验收;本包提供对应命令和审计。
|
||||
|
||||
---
|
||||
|
||||
# 1. 升级已有 v0.1.x 工程
|
||||
|
||||
如果原目录已经有正确的 `.venv` 和 `.env`,把 v0.2.0 ZIP 中整个 `cm93-mysql-importer-starter` 目录覆盖到原工程即可。
|
||||
|
||||
ZIP 不包含 `.env`,所以你已有的数据库密码不会被覆盖。
|
||||
|
||||
然后执行:
|
||||
|
||||
```powershell
|
||||
cd D:\React\cm93-mysql-importer-starter
|
||||
& ".\.venv\Scripts\python.exe" -m pip install -e .
|
||||
& ".\.venv\Scripts\cm93db.exe" --help
|
||||
```
|
||||
|
||||
确认出现 `import` 和 `audit`。
|
||||
|
||||
# 2. .env
|
||||
|
||||
确保:
|
||||
|
||||
```text
|
||||
CM93_DB_HOST=127.0.0.1
|
||||
CM93_DB_PORT=3306
|
||||
CM93_DB_NAME=cm93_chart
|
||||
CM93_DB_USER=你的用户
|
||||
CM93_DB_PASSWORD=你的密码
|
||||
CM93_DB_CHARSET=utf8mb4
|
||||
CM93_SOURCE_DIR=D:\Ship\CM93V2\CM93JAPAN
|
||||
```
|
||||
|
||||
`scan / inspect-dicts / import / audit` 现在都可以省略路径,自动读取 `CM93_SOURCE_DIR`。
|
||||
|
||||
# 3. 环境/数据库检查
|
||||
|
||||
```powershell
|
||||
& ".\.venv\Scripts\cm93db.exe" env-check
|
||||
& ".\.venv\Scripts\cm93db.exe" db-check
|
||||
& ".\.venv\Scripts\cm93db.exe" scan
|
||||
& ".\.venv\Scripts\cm93db.exe" inspect-dicts
|
||||
```
|
||||
|
||||
# 4. 先做 G 层 10-cell pilot
|
||||
|
||||
不要第一次就直接跑完整日本数据。先验证 MySQL 实际写入:
|
||||
|
||||
```powershell
|
||||
& ".\.venv\Scripts\cm93db.exe" import --scale G --limit 10
|
||||
```
|
||||
|
||||
然后立即审计同一批:
|
||||
|
||||
```powershell
|
||||
& ".\.venv\Scripts\cm93db.exe" audit --scale G --limit 10 --precision-samples 32
|
||||
```
|
||||
|
||||
目标:
|
||||
|
||||
```text
|
||||
source_parse_failed : 0
|
||||
db_missing_cells : 0
|
||||
db_not_done_cells : 0
|
||||
count_mismatches : 0
|
||||
hash_mismatches : 0
|
||||
raw_preservation_bad : 0
|
||||
unknown_objects : 0
|
||||
unknown_attributes : 0
|
||||
precision_failed : 0
|
||||
RESULT : PASS
|
||||
```
|
||||
|
||||
# 5. 全量导入日本数据
|
||||
|
||||
Pilot PASS 后:
|
||||
|
||||
```powershell
|
||||
& ".\.venv\Scripts\cm93db.exe" import
|
||||
```
|
||||
|
||||
程序逐 cell 工作。已经 `DONE` 且 **SHA-256 未变化** 的 cell 自动跳过,因此中断后重新执行同一命令即可续导。
|
||||
|
||||
FAILED cell 默认在下一次执行时重试。
|
||||
|
||||
# 6. 全量审计
|
||||
|
||||
```powershell
|
||||
& ".\.venv\Scripts\cm93db.exe" audit --precision-samples 256
|
||||
```
|
||||
|
||||
这会重新读取 CM93 源文件,并与数据库逐 cell 对比:
|
||||
|
||||
- SHA-256
|
||||
- Feature 数
|
||||
- Attribute 数
|
||||
- Point geometry 数
|
||||
- Line geometry 数
|
||||
- Area geometry 数
|
||||
- `_m_sor` coverage 数
|
||||
- Sounding point 数
|
||||
- raw table 保存字节数
|
||||
- 未知 object / attribute
|
||||
- 抽样 WKB 双精度 round-trip
|
||||
|
||||
## 更严格的 geometry validity 检查
|
||||
|
||||
```powershell
|
||||
& ".\.venv\Scripts\cm93db.exe" audit --precision-samples 256 --validate-geometry
|
||||
```
|
||||
|
||||
`--validate-geometry` 会额外用 Shapely 全量检查拓扑,明显更重。CM93 中存在自相交/边界类 contour 并不自动等于解析错误,因此这项结果作为信息单独显示,不会静默修复原 geometry。
|
||||
|
||||
# 7. 常用控制
|
||||
|
||||
只处理 F/G:
|
||||
|
||||
```powershell
|
||||
cm93db import --scale F --scale G
|
||||
```
|
||||
|
||||
只处理一个 cell:
|
||||
|
||||
```powershell
|
||||
cm93db import --cell 04501075.G
|
||||
cm93db audit --cell 04501075.G --precision-samples 16
|
||||
```
|
||||
|
||||
强制重导:
|
||||
|
||||
```powershell
|
||||
cm93db import --cell 04501075.G --reimport
|
||||
```
|
||||
|
||||
只审计源文件 parser,不访问数据库内容:
|
||||
|
||||
```powershell
|
||||
cm93db audit --source-only
|
||||
```
|
||||
|
||||
正式母库**不建议**使用 `--no-raw-tables`。如果有意不保存 raw table,审计时需显式:
|
||||
|
||||
```powershell
|
||||
cm93db audit --allow-missing-raw
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# 精度原则
|
||||
|
||||
1. CM93 raw X/Y 保持 16-bit 原始语义。
|
||||
2. Cell easting/northing header 值使用 double。
|
||||
3. CM93 Mercator 半长轴固定 `6378388.0`。
|
||||
4. `_wgsox/_wgsoy` 以米为单位,在 Mercator→经纬度之前按 CM93 Transform 语义减去。
|
||||
5. MySQL geometry 由 WKB 写入;WKB 坐标为 IEEE-754 8-byte double。
|
||||
6. importer 阶段不 simplify、不 quantize、不 snap、不 round。
|
||||
7. Polygon 不自动 `make_valid`。
|
||||
8. 原始 decoded table + raw feature/attribute 与标准化 geometry 同时保留。
|
||||
9. PBF 将来是可重新生成的发布格式,不能反向影响母数据库精度。
|
||||
|
||||
详见 `docs/精度规范.md` 和 `docs/CM93解析与审计设计.md`。
|
||||
|
||||
# Codex 接手
|
||||
|
||||
Codex 不需要重新实现 parser。先读:
|
||||
|
||||
- `AGENTS.md`
|
||||
- `codex/ARCHITECTURE.md`
|
||||
- `codex/20_导入与审计接手.md`
|
||||
|
||||
后续主要职责是:在你的 Win11 + MySQL 5.7.34 + CM93JAPAN 实际环境运行 pilot、分析失败 cell、修正真实兼容问题,并保留精度/审计边界。
|
||||
Reference in New Issue
Block a user