fix fish port 20m skip missing coastline
This commit is contained in:
138
STEP_RECORD.md
138
STEP_RECORD.md
@@ -1,6 +1,6 @@
|
||||
# 项目步骤记录
|
||||
|
||||
最后更新:`2026-05-02`
|
||||
最后更新:`2026-05-03`
|
||||
仓库:`/root/sourceserver/pbf`
|
||||
远端:`ssh://git@nas:2222/tei/pbf.git`
|
||||
|
||||
@@ -24,6 +24,47 @@
|
||||
|
||||
## 最近 3 天摘要
|
||||
|
||||
### 2026-05-03 渔港 20m 语义修正为海岸线格子
|
||||
|
||||
- 复查 `coastline/build_fish_port_20m_full_mysql_resume.py --fpc 4320065` 与 `--prc 40` 结果不一致的问题:
|
||||
- 原始 `C09-06.zip` 中 `FPC=4320065` 确实属于 `PRC=40`
|
||||
- 该 FPC 有 2 条线要素,按当前逻辑命中 54 个 `coast_200m` 粗格
|
||||
- 单港纯计算可得到 582 个去重后的 20m `COASTLINE` 格
|
||||
- 当前旧静态资产 `src/pbf/coastline-mysql/fukuoka_saga/fish_port_20m_grid.geojson` 仍是旧口径,含 `SEA_SURFACE/LAND_BASE` 且 source 仍为 `C09-06+coastline PRC=40`,不能再作为当前单港/FPC 口径的对比基准
|
||||
- `PRC=40` 全批处理里有若干 FPC 的 part 没有命中 `coast_200m` 底盘;默认严格模式会中止,若没有显式跳过,会导致后续 `4320065` 没有进入批处理结果
|
||||
- 又修正了一个批处理阻断点:`FPC=4310320` 这类无海岸线命中的港口会在加载海岸线阶段先报 `no coastline curves parsed`,导致 `--skip-missing-coarse` 来不及生效
|
||||
- 现在 `load_coastlines_for_prc` 会抛可捕获异常;在 `--skip-missing-coarse` 下会记录 `FPC_SKIPPED_NO_COASTLINE` 并继续后续 FPC
|
||||
- 已验证 `./.venv/bin/python coastline/build_fish_port_20m_full_mysql_resume.py --fpc 4310320 --skip-missing-coarse --max-scan-cells 200000` 可跳过而不退出
|
||||
- 已重新明确 `fish_port_20m` 的入库语义:
|
||||
- 不是保留纯海面格子
|
||||
- 不是保留纯陆地格子
|
||||
- 只保留与海岸线缓冲带相交的 `COASTLINE` 格子
|
||||
- `coastline/build_fish_port_20m_full_mysql_resume.py` 已改为:
|
||||
- `coast_buffer` 命中的 20m cell 才写入 `navsea_grid_cell`
|
||||
- 写入时 `state_name/class_name` 均为 `COASTLINE`
|
||||
- 未命中的 cell 只作为 `off_coast` 统计,不入库
|
||||
- 指定 `--prc` 重算时按 `source_name LIKE 'C09-06+coastline PRC=xx%'` 清理旧格子,避免混入旧 FPC 或旧缓冲结果
|
||||
- 指定 `--fpc` 重算时先清理该 FPC 的旧格子
|
||||
- 20m 写库从 `INSERT IGNORE` 改为 duplicate key upsert,避免相同 `cell_id` 被旧 PRC/source 占住后导致当前 PRC 看起来写入成功但导出为空
|
||||
- 修正 tiled 分支中 `y += cell_size_m` 的缩进风险
|
||||
- `coastline/export_prc20_test_assets.py` 已改为只导出 `state_name='COASTLINE'`
|
||||
- `src/pbf/navsea-fish-port-prc50-test.html` 已改为只显示 `COASTLINE` 海岸线格子
|
||||
- 已复查无垢岛测试页空白原因:
|
||||
- 页面加载的 `fish_port_20m_prc50_grid.geojson` 一度只有 45 字节,为空 FeatureCollection
|
||||
- 数据库里无垢岛附近的旧 20m 格子被 `PRC=44` source 占用,`PRC=50` 重算时旧版 `INSERT IGNORE` 没有覆盖
|
||||
- 改为 upsert 后重跑 `--prc 50`,当前 `PRC=50 / COASTLINE` 为 `331` 格
|
||||
- 已重新导出并同步 `src/pbf/coastline-mysql/prc50_test/` 到 `/mnt/sda1/www/newpec/coastline-mysql/prc50_test/`
|
||||
- 后续又收紧了 20m 扫描母集:
|
||||
- 不再复用整 PRC 的 coast_200m 窗口
|
||||
- 现在按每个 `fish_part` 自己的 bbox 找 `coast_200m`
|
||||
- `fish_part` 只负责筛选应命中的粗格,真正切 20m 时不再做 `fish_part ∩ coarse_window` 二次裁剪
|
||||
- 这样可以避免把粗格里本来应该保留的海岸线细格提前裁掉
|
||||
- 这条口径已经同步回正式全国版 `coastline/build_fish_port_20m_full_mysql_resume.py`
|
||||
- `--fpc` 入口也补齐了和 `--prc` 一致的进度清理动作,避免单港重算时残留旧的 PRC 进度记录
|
||||
- `--prc` 入口已改成先按 `FPC` 分组,再逐港走同一套 20m 切格逻辑;不再把整个 PRC 的所有港混在同一个聚类里
|
||||
- 相关使用说明已同步到:
|
||||
- `NavSea_全国三层数据生成与查看说明.md`
|
||||
|
||||
### 2026-05-02 全国 50x50 重算脚本
|
||||
|
||||
- 新增全国 50x50 海上障碍重算脚本:
|
||||
@@ -61,7 +102,9 @@
|
||||
- `coastline/build_japan_coast_grid_mysql.py`
|
||||
- 已把 20m 重算流程收紧为:
|
||||
- 先按渔港 bbox 找同区域 `coast_200m` 粗格
|
||||
- 再把粗格按 20m 直切并做海岸线重叠判断
|
||||
- 再把命中的 `coast_200m` 粗格直接作为 20m 直切底盘
|
||||
- 不再额外用 `fish_part ∩ coarse_window` 裁窗
|
||||
- 20m 判定继续使用同一套海岸线重叠判断
|
||||
- 默认粗筛边距收紧为 0m,避免再做不必要的大范围外扩
|
||||
|
||||
### 2026-05-02 全国海岸/渔港/障碍三按钮预览页
|
||||
@@ -121,6 +164,37 @@
|
||||
- 这只是 SQLite 版的全国融合骨架
|
||||
- 当前 MySQL 侧已经合并为单库 `navsea_japan_coast_grid`
|
||||
|
||||
### 2026-05-03 全国静态导出支持分层开关
|
||||
|
||||
- 已为 `coastline/export_navgrid_mysql_assets.py` 增加独立导出开关:
|
||||
- `--coast-200m / --no-coast-200m`
|
||||
- `--fish-port-20m / --no-fish-port-20m`
|
||||
- `--hazard-50m / --no-hazard-50m`
|
||||
- `--density-overview / --no-density-overview`
|
||||
- 默认仍是四项全导出
|
||||
- 现在可以只导某一层,不必每次都重出全国全量资产
|
||||
- `density_overview` 仍默认开启,因为全国预览页会用到它
|
||||
- 全国预览页实际会同时读取 `japan_coast_200m` 和 `japan_national`
|
||||
- 线下同步时要把 `src/pbf/coastline-mysql/japan_coast_200m/` 和 `src/pbf/coastline-mysql/japan_national/` 都复制到 `/mnt/sda1/www/newpec/coastline-mysql/`
|
||||
|
||||
### 2026-05-03 单港 20m 调试页
|
||||
|
||||
- 新增单港调试导出脚本:
|
||||
- `coastline/export_fish_port_debug_assets.py`
|
||||
- 新增单港调试页面:
|
||||
- `src/pbf/navsea-fish-port-debug.html`
|
||||
- 调试包按 `FPC + buffer` 分目录输出:
|
||||
- `src/pbf/coastline-mysql/fish_port_debug/fpc_<FPC>/buffer_<BUFFER>/`
|
||||
- 调试页会同时画出:
|
||||
- 渔港 bbox
|
||||
- 海岸线
|
||||
- 海岸 buffer
|
||||
- 200m 粗窗
|
||||
- 实际扫描窗
|
||||
- 20m 海岸格
|
||||
- 20m 海面格
|
||||
- 这条链路是为了定位“明明有 200m 底盘和海岸线,但 20m 为什么没长出来”的问题
|
||||
|
||||
### 2026-05-02 渔港 20m 支持按单港 FPC 重算
|
||||
|
||||
- 已为 `coastline/build_fish_port_20m_full_mysql_resume.py` 增加单港口入口:
|
||||
@@ -131,6 +205,11 @@
|
||||
- 命中的 `200x200` 粗格数量
|
||||
- 最终写入的 `20x20` 格子数量
|
||||
- 单港口模式下,每个批次会先按当前 cell_id 清掉旧记录,再写回,便于重算同一港口
|
||||
- 当前 `20x20` 的粗格母集已经收回到 **PRC 级 coast_200m**:
|
||||
- 先按当前渔港 / PRC 的 bbox 去 MySQL 找 `coast_200m`
|
||||
- 取回的粗格直接作为 20m 细扫底盘
|
||||
- 不再按 `fish_part` 的局部外框裁掉这些粗格
|
||||
- `20m` 海岸缓冲默认已收紧为 `5m`,仍可用 `--coast-buffer-m` 调整
|
||||
- 已验证:
|
||||
- `./.venv/bin/python -m py_compile coastline/build_fish_port_20m_full_mysql_resume.py`
|
||||
- `discover_target_prcs(..., '1112040')` 可以反查到对应 `PRC`
|
||||
@@ -144,12 +223,53 @@
|
||||
- 输入港名,扫描 `coastline/C09-06.zip` 里的渔港要素
|
||||
- 通过 `NA2`、`NA4`、`FCF` 等字段找候选 `FPC`
|
||||
- 如果原始包里没有港名字段,也可以改用外部港名对照表 `--catalog`
|
||||
- 支持精确匹配和模糊匹配
|
||||
- 支持精确匹配、包含匹配和 `--fuzzy` 后缀归一模糊匹配
|
||||
- 文档已补到:
|
||||
- `NavSea_全国三层数据生成与查看说明.md`
|
||||
- 已验证:
|
||||
- `./.venv/bin/python -m py_compile find_fpc_by_port_name.py`
|
||||
|
||||
### 2026-05-02 PRC=50 单港 20x20 测试页
|
||||
|
||||
- 新增单港测试页:
|
||||
- `src/pbf/navsea-fish-port-prc50-test.html`
|
||||
- 页面用途:
|
||||
- 直接读取专用 PRC=50 导出 `fish_port_20m_prc50_grid.geojson`
|
||||
- 只显示 `COASTLINE` 海岸线格子
|
||||
- 单独显示无垢岛这一港,便于确认当前 20x20 海岸线判断结果
|
||||
- 已同步到线上:
|
||||
- `http://192.168.200.184/newpec/navsea-fish-port-prc50-test.html`
|
||||
|
||||
### 2026-05-02 PRC=50 专用 20x20 导出
|
||||
|
||||
- 新增专用导出脚本:
|
||||
- `coastline/export_prc20_test_assets.py`
|
||||
- 用途:
|
||||
- 只导出 `fish_port_20m` 里 `source_name` 匹配 `PRC=50` 且 `state_name='COASTLINE'` 的记录
|
||||
- 输出到独立目录 `src/pbf/coastline-mysql/prc50_test/`
|
||||
- 便于测试页只加载单港数据,不再依赖全国全量资产
|
||||
- 已验证:
|
||||
- `./.venv/bin/python -m py_compile coastline/export_prc20_test_assets.py`
|
||||
- 已实际导出并同步到线上:
|
||||
- `fish_port_20m: 2800`
|
||||
- `http://192.168.200.184/newpec/coastline-mysql/prc50_test/fish_port_20m_prc50_grid.geojson`
|
||||
|
||||
### 2026-05-02 全国预览页 20x20 旧资产同步修正
|
||||
|
||||
- 已复核 `src/pbf/navsea-coastline-fukuoka-saga-200m.html` 的加载逻辑:
|
||||
- HTML 本身使用的是 `./coastline-mysql/japan_national/manifest.json`
|
||||
- `20x20` 图层是从 `./coastline-mysql/japan_national/fish_port_20m_grid.geojson` 读取
|
||||
- 问题根因:
|
||||
- 线上 `/mnt/sda1/www/newpec/coastline-mysql/japan_national/manifest.json` 仍停留在旧版
|
||||
- 旧版 `fish_port_20m` 只有 `34270` 个格子,所以页面看起来只在两块区域出现红格
|
||||
- 已同步最新全国资产到线上目录:
|
||||
- `/mnt/sda1/www/newpec/coastline-mysql/japan_national/`
|
||||
- `/mnt/sda1/www/newpec/navsea-coastline-fukuoka-saga-200m.html`
|
||||
- 同步后线上 `fish_port_20m` 计数已更新为:
|
||||
- `246653`
|
||||
- 结论:
|
||||
- 这次不是 HTML 逻辑 bug,而是线上静态资产没跟上最新导出
|
||||
|
||||
### 2026-05-02 无垢岛 PRC=50 改为单库运行
|
||||
|
||||
- 已把 `coastline/build_fish_port_20m_full_mysql_resume.py` 从双库连接收回到单库模式:
|
||||
@@ -1653,7 +1773,7 @@
|
||||
- 现在改成:
|
||||
- 先抓出当前渔港范围命中的 `coast_200m` 粗格
|
||||
- 直接把这些 `200m` 粗格作为 `20m` 细扫底盘
|
||||
- 再用同一套海岸线碰撞逻辑判定 `LAND_BASE / SEA_SURFACE`
|
||||
- 再用同一套海岸线缓冲碰撞逻辑筛出 `COASTLINE`
|
||||
- 这样 20m 的范围会更接近用户手工圈出的那几块红框,而不是只沿着港岸线出一圈带状格。
|
||||
|
||||
## 2026-04-24 呼子港重跑结果已更新
|
||||
@@ -1672,8 +1792,16 @@
|
||||
- `coast_200m: 9743`
|
||||
- `fish_port_20m: 28726`
|
||||
- `hazard_50m: 176454`
|
||||
- 导出时 `fish_port_20m` 采用 `LAND_BASE + SEA_SURFACE` 全量导出,便于一起看港区外围形状。
|
||||
- 导出时 `fish_port_20m` 只保留 `LAND_BASE`。
|
||||
- 已同步到 Web 目录:
|
||||
- `/mnt/sda1/www/newpec/coastline/navsea-fukuoka-saga-coast200-fish20-full/`
|
||||
- 当前页面版本:
|
||||
- `v2.6`
|
||||
|
||||
## 2026-05-03 PRC 与 FPC 对照确认
|
||||
|
||||
- 已确认 `FPC=4320065` 在原始 `C09-06.zip` 里对应的 `PRC` 是 `40`,不是 `50`。
|
||||
- 这意味着它应当和 `--prc 40` 的结果对比,而不是和 `--prc 50` 对比。
|
||||
- 已将 `fish_port_20m` 的唯一键改为 `UNIQUE KEY (layer_name, source_name, cell_id)`,让不同港口的同名格子不再互相覆盖。
|
||||
- 全国导出层也补了按 `cell_id` 去重,避免同一格在全国 GeoJSON 里重复输出。
|
||||
- 结论:`--prc` 与 `--fpc` 现在在落库层面已经按港独立了,后续如果再出现差异,就只需要查几何或海岸线输入,不用再怀疑存储覆盖。
|
||||
|
||||
Reference in New Issue
Block a user