添加全国三层生成与港名查FPC工具

This commit is contained in:
OpenAI Codex
2026-05-02 14:32:06 +08:00
parent 15994b5c7e
commit 2513dd56f8
8 changed files with 5920 additions and 1 deletions

View File

@@ -0,0 +1,290 @@
# NavSea 全国四脚本一页面数据生成与查看说明
本文说明全国版三层数据的重算、导出、整体密度图生成和页面查看方式。
当前统一数据库:
- `navsea_japan_coast_grid`
当前全国三层:
- `coast_200m`:全国海岸 200x200
- `fish_port_20m`:全国渔港 20x20
- `hazard_50m`:全国海上障碍 50x50
当前整体密度图:
- `density_overview`:三档密度整体格子图
## 1. 生成顺序
建议按下面顺序重算:
1. 先生成 `200x200`
2. 再生成 `20x20`
3. 最后生成 `50x50`
4. 再导出全国静态 JSON 资产
5. 最后查看整体密度图
这样可以先把底盘准备好,再做上层数据。
## 2. 200x200 全国海岸重算
脚本:
- [`coastline/build_japan_coast_grid_mysql.py`](/root/sourceserver/pbf/coastline/build_japan_coast_grid_mysql.py)
默认会写入:
- 数据库:`navsea_japan_coast_grid`
- 图层:`coast_200m`
- 导出目录:`out/coastline/japan_coast_grid_mysql`
执行命令:
```bash
cd /root/sourceserver/pbf
./.venv/bin/python coastline/build_japan_coast_grid_mysql.py
```
## 3. 20x20 全国渔港重算
脚本:
- [`coastline/build_fish_port_20m_full_mysql_resume.py`](/root/sourceserver/pbf/coastline/build_fish_port_20m_full_mysql_resume.py)
默认会写入:
- 数据库:`navsea_japan_coast_grid`
- 图层:`fish_port_20m`
推荐执行命令:
```bash
cd /root/sourceserver/pbf
./.venv/bin/python coastline/build_fish_port_20m_full_mysql_resume.py \
--resume \
--max-scan-cells 200000
```
如果只想重算某个 `PRC`,可以显式指定,例如:
```bash
cd /root/sourceserver/pbf
./.venv/bin/python coastline/build_fish_port_20m_full_mysql_resume.py \
--prc 02 \
--max-scan-cells 200000
```
如果只想重算某个具体渔港,可以直接用 `FPC`,例如:
```bash
cd /root/sourceserver/pbf
./.venv/bin/python coastline/build_fish_port_20m_full_mysql_resume.py \
--fpc 1210100 \
--max-scan-cells 200000
```
说明:
- `PRC` 需要按两位字符串理解,`2``02` 等价
- `FPC` 是单个渔港的港码,脚本会先反查它所属的 `PRC`,再只重算这个港口
- 单港口模式会在日志里同时输出:
- 命中的 `200x200` 粗格数量
- 最终写入的 `20x20` 格子数量
- 默认先按渔港 bbox 找同区域 `coast_200m` 粗格,再把粗格切成 `20x20`
- 默认不会再允许无边界整片扫描
- 如果确实要回退旧行为,需要手动加脚本里提供的相应开关
## 4. 根据港名查 FPC
脚本:
- [`find_fpc_by_port_name.py`](/root/sourceserver/pbf/find_fpc_by_port_name.py)
用途:
- 已知渔港名字时,先查出可能的 `FPC`
- 这个脚本会扫描 `coastline/C09-06.zip` 里的渔港要素
- 支持模糊匹配和精确匹配
推荐用法:
```bash
cd /root/sourceserver/pbf
./.venv/bin/python find_fpc_by_port_name.py 無垢島
```
如果你想只看精确命中:
```bash
cd /root/sourceserver/pbf
./.venv/bin/python find_fpc_by_port_name.py 無垢島 --exact
```
如果你想要 JSON 结果:
```bash
cd /root/sourceserver/pbf
./.venv/bin/python find_fpc_by_port_name.py 無垢島 --json
```
如果原始包里没有港名字段,建议改用港名对照表:
```bash
cd /root/sourceserver/pbf
./.venv/bin/python find_fpc_by_port_name.py 無垢島 --catalog out/port_name_catalog.csv
```
对照表最低需要这些列里的任意几列:
- `name` / `港名` / `名称`
- `FPC`
- 可选 `PRC`
说明:
- 这份脚本主要查 `C09-06.zip` 里的渔港名称字段
- 默认会把 `NA2``NA4``FCF` 等候选字段一起拿来比对
- 输出里会给出:
- `FPC`
- `PRC`
- 主名称
- 辅助名称
- 源记录 id
- 如果原始包里没有这条名字,脚本会提示你改用 `--catalog`
## 5. 50x50 全国障碍重算
脚本:
- [`coastline/build_japan_hazard_50m_mysql.py`](/root/sourceserver/pbf/coastline/build_japan_hazard_50m_mysql.py)
默认会写入:
- 数据库:`navsea_japan_coast_grid`
- 图层:`hazard_50m`
- PBF 根目录:`/home/wwwroot/pbf-delivery-full-20260418-rebuild`
执行命令:
```bash
cd /root/sourceserver/pbf
./.venv/bin/python coastline/build_japan_hazard_50m_mysql.py
```
这个脚本当前会纳入:
- `navigation_hazard_area`
- `fixed_fishing_gear_area`
- `anchor_caution_hazard_area`
- `navigation_hazard_point`
- `anchor_caution_hazard_point`
- `navigation_marks`
- `baseline_area``canonical_object_type=breakwater`
## 6. 全国三层静态 JSON 导出
脚本:
- [`coastline/export_navgrid_mysql_assets.py`](/root/sourceserver/pbf/coastline/export_navgrid_mysql_assets.py)
默认导出到:
- `src/pbf/coastline-mysql/japan_national/`
执行命令:
```bash
cd /root/sourceserver/pbf
./.venv/bin/python coastline/export_navgrid_mysql_assets.py \
--db-name navsea_japan_coast_grid \
--out-dir src/pbf/coastline-mysql/japan_national
```
导出结果包括:
- `coast_200m_grid.geojson`
- `fish_port_20m_grid.geojson`
- `hazard_50m_grid.geojson`
- `density_overview_grid.geojson`
- `manifest.json`
说明:
- `density_overview_grid.geojson` 是按密度优先级合并后的整体格子图
- 同一区域如果存在更高密度格子,就优先保留更高密度
- 当前密度优先级:
- `20x20` = 高密度,淡绿色
- `50x50` = 中密度,黄色
- `200x200` = 低密度,淡红色
## 7. HTML 预览页面
当前全国预览页面:
- `http://192.168.200.184/newpec/navsea-coastline-fukuoka-saga-200m.html`
说明:
- 页面标题已经改成全国口径
- 页面内有四个按钮:
- `200x200`
- `20x20`
- `50x50`
- `整体密度`
页面对应的本地文件:
- [`src/pbf/navsea-coastline-fukuoka-saga-200m.html`](/root/sourceserver/pbf/src/pbf/navsea-coastline-fukuoka-saga-200m.html)
页面加载的数据源:
- `./coastline-mysql/japan_coast_200m/manifest.json`
- `./coastline-mysql/japan_coast_200m/coast_200m_grid.geojson`
- `./coastline-mysql/japan_national/manifest.json`
- `./coastline-mysql/japan_national/fish_port_20m_grid.geojson`
- `./coastline-mysql/japan_national/hazard_50m_grid.geojson`
- `./coastline-mysql/japan_national/density_overview_grid.geojson`
## 8. 页面查看方式
如果只是看全国 200x200
1. 打开页面
2. 默认就是 `200x200`
3. 页面会自动定位到全国底盘范围
如果想切换看渔港或障碍:
1. 点击 `20x20`
2. 点击 `50x50`
3. 点击 `整体密度`
如果想强制刷新:
1. 点击 `重新加载`
## 9. 线下同步到网页目录
如果你重新生成了静态资产,想让线上页面立即看到新内容,通常需要把生成结果同步到网页目录:
```bash
cp -r src/pbf/coastline-mysql/japan_national /mnt/sda1/www/newpec/
cp src/pbf/navsea-coastline-fukuoka-saga-200m.html /mnt/sda1/www/newpec/navsea-coastline-fukuoka-saga-200m.html
```
## 10. 一句话版
最常用的整套命令是:
```bash
cd /root/sourceserver/pbf
./.venv/bin/python coastline/build_japan_coast_grid_mysql.py
./.venv/bin/python coastline/build_fish_port_20m_full_mysql_resume.py --resume --max-scan-cells 200000
./.venv/bin/python coastline/build_japan_hazard_50m_mysql.py
./.venv/bin/python coastline/export_navgrid_mysql_assets.py --db-name navsea_japan_coast_grid --out-dir src/pbf/coastline-mysql/japan_national
```
然后打开:
- `http://192.168.200.184/newpec/navsea-coastline-fukuoka-saga-200m.html`