12 KiB
NavSea v2 使用说明
本文只说明 coastline/navgrid_v2/ 下的新一版脚本与对应验证页。
1. 目录说明
v2 脚本目录:
coastline/navgrid_v2/
v2 验证页:
src/pbf/navsea-coastline-fukuoka-saga-200m-v2.htmlsrc/pbf/navsea-fish-port-debug-v2.htmlsrc/pbf/navsea-fish-port-prc50-test-v2.htmlsrc/pbf/navsea-coast-wall-z12-viewer.html
v2 静态资产目录:
src/pbf/coastline-mysql-v2/
v2 规则:
- 三类数据分表保存
- cell 记录明确保存来源字段
- 不使用迁移脚本
- 直接用 v2 Python 从源数据重建
coastline这条链路的最终目标是导出阻断墙bin- 来源字段的目标不只是可追溯,也要方便检查、删除指定来源数据、以及按来源做 resume / 复跑
2. v2 表结构
2.1 沿岸数据
- 表前缀:
navsea_coast_ - 主要表:
navsea_coast_grid_cellnavsea_coast_grid_layer_metanavsea_coast_grid_package_stat
cell 级来源字段:
source_codesource_pathsource_name
2.2 渔港 20m
- 表前缀:
navsea_fish_port_ - 主要表:
navsea_fish_port_grid_cellnavsea_fish_port_grid_layer_metanavsea_fish_port_grid_package_stat
2.3 海上障碍 50m
- 表前缀:
navsea_hazard_ - 主要表:
navsea_hazard_grid_cellnavsea_hazard_grid_layer_metanavsea_hazard_grid_package_stat
海上障碍这组走轻量记录:
navsea_hazard_grid_layer_meta.source_desc仍然保留整体来源说明navsea_hazard_grid_cell.source_name直接记录fidnavsea_hazard_grid_cell额外带有(layer_name, source_name)索引,方便按fid查删和复跑- 也就是说,单个 cell 不再追完整来源链,只保留一个代表性的
fid
3. 生成顺序
建议顺序:
- 先生成沿岸数据
- 再生成渔港 20m
- 再生成海上障碍 50m
- 再导出静态资产
- 再生成阻断墙二进制
bin - 最后看验证页
4. 三个导入脚本的参数说明
这三个脚本是 v2 里最重要的“入库脚本”:
- 沿岸数据:
build_coast_grid_mysql.py - 渔港 20m:
build_fish_port_20m_mysql_resume.py - 海上障碍 50m:
build_hazard_50m_mysql.py
下面把常用参数和开关说明清楚。先记一个总原则:
build_coast_grid_mysql.py偏“沿岸重建”build_fish_port_20m_mysql_resume.py偏“续跑 + 选择性重算”build_hazard_50m_mysql.py偏“全量重建,参数少”
4.1 沿岸数据:build_coast_grid_mysql.py
脚本:
默认执行:
cd /root/sourceserver/pbf
./.venv/bin/python coastline/navgrid_v2/build_coast_grid_mysql.py
常用参数:
--input:指定海岸线 zip,支持重复传入;不传时自动扫描coastline/C23-06_*_GML.zip--db-name:MySQL 数据库名--out-dir:GeoJSON 和元数据输出目录--cell-size-m:格网大小,默认200--layer-name:目标层名;不传时按格网大小自动生成,例如coast_200m、coast_50m--buffer-m:海岸线缓冲距离--margin-cells:输出范围外扩的格子数--write-geojson:同时导出 GeoJSON--resume:续跑,不清理当前 layer,保留已入库格子--start-code:只处理指定source_code及之后的包,例如13或C23-06_13--progress-every-cells:每扫描多少个候选格打印一次进度--progress-every-seconds:最迟每隔多少秒打印一次进度--coarse-factor:粗筛倍率,值越大越省细扫,但粗框会更大
常用场景:
- 重新生成整套沿岸数据:直接运行默认命令
- 只从
C23-06_13继续:加--resume --start-code 13 - 做更细分辨率:加
--cell-size-m 50 --layer-name coast_50m - 想批量重跑一段包:
--resume保留已入库结果,再配合--start-code从某个包号往后接着算
50m 续跑示例:
cd /root/sourceserver/pbf
./.venv/bin/python coastline/navgrid_v2/build_coast_grid_mysql.py \
--cell-size-m 50 \
--layer-name coast_50m \
--out-dir out/coastline/japan_coast_grid_mysql_v2 \
--resume \
--start-code 13
4.2 渔港 20m:build_fish_port_20m_mysql_resume.py
脚本:
默认执行:
cd /root/sourceserver/pbf
./.venv/bin/python coastline/navgrid_v2/build_fish_port_20m_mysql_resume.py --resume
这支脚本的重点是“续跑”和“跳过控制”。
常用参数:
--resume:按数据库里的断点继续,默认开启--no-resume:忽略数据库断点,从头规划但不清表--reset-layer:先清空fish_port_20m旧数据并删除断点--prc:只处理指定 PRC;传入后会按该 PRC 完整重建,并忽略 resume 断点--fpc:只处理指定 FPC;会先反查所在 PRC,再只重算该港口--cluster-gap-m:聚类连通判定的间隔--cell-size-m:格网大小,默认20--coast-buffer-m:海岸缓冲距离--fish-buffer-m:渔港几何外扩缓冲,当前保留兼容--commit-every:每累计多少条 cell 写一次数据库--scan-tile-m:格网扫描分块大小--coast-coarse-margin-m:coast_200m 粗筛底座外扩缓冲--allow-unbounded-fallback:没有 coast_200m 小窗时,允许回退扫描原始 part--skip-missing-coarse:没有有效 coast_200m 交集时直接跳过该 part--max-scan-cells:单次允许估算的最大 20m 格数,超过就中止;0表示不限制
这几个开关最值得记:
- 想继续上次中断:
--resume - 想重跑但不清表:
--no-resume - 想只重算某个港口:
--fpc 4320050 - 想只重算某个 PRC:
--prc 50 - 想遇到无有效粗筛时直接跳过:
--skip-missing-coarse - 想允许老式整片扫描兜底:
--allow-unbounded-fallback
这里要特别注意:
--resume主要用于全国批量续跑,脚本会按数据库断点接着处理尚未完成的 PRC- 一旦你显式指定
--prc或--fpc,脚本会进入“指定区域完整重算”模式,这时会忽略原来的 resume 断点 - 所以它支持“批量 resume”,也支持“指定区域重算”,但这两种模式不是同时叠加的
示例:
cd /root/sourceserver/pbf
./.venv/bin/python coastline/navgrid_v2/build_fish_port_20m_mysql_resume.py \
--resume \
--skip-missing-coarse
4.3 海上障碍 50m:build_hazard_50m_mysql.py
脚本:
默认执行:
cd /root/sourceserver/pbf
./.venv/bin/python coastline/navgrid_v2/build_hazard_50m_mysql.py
常用参数:
--db-name:MySQL 数据库名--tile-root:全国 PBF 根目录--zoom:PBF 瓦片 zoom,默认12--out-dir:GeoJSON 输出目录--source-desc:写入元数据的来源说明
这个脚本参数最少,基本就是全量重建。
5. v2 沿岸导出
脚本:
默认执行:
cd /root/sourceserver/pbf
./.venv/bin/python coastline/navgrid_v2/export_coast_grid_mysql_assets.py
6. v2 调试导出
脚本:
示例:
cd /root/sourceserver/pbf
./.venv/bin/python coastline/navgrid_v2/export_fish_port_debug_assets.py --fpc 4320050 --coast-buffer-m 20
./.venv/bin/python coastline/navgrid_v2/export_prc20_test_assets.py --prc 50
7. v2 共用导出
脚本:
默认执行:
cd /root/sourceserver/pbf
./.venv/bin/python coastline/navgrid_v2/export_navgrid_mysql_assets.py
8. 阻断墙二进制
脚本:
默认执行:
cd /root/sourceserver/pbf
./.venv/bin/python coastline/navgrid_v2/build_coast_wall_z12_bin.py
默认输出文件名会自动带上当前三层单位,例如:
out/navmask/coast_wall_z12_200_50_20.binout/navmask/coast_wall_z12_100_50_20.binout/navmask/coast_wall_z12_50_50_20.bin
当输出墙参数不是默认 z12 + 40x40 时,文件名会改用实际墙参数,不再沿用默认 out 里的 z12,例如:
out/navmask/coast_wall_z14_g80_10_50.bin
这一步就是 coastline 链路的最终落点:
- 上游把三类格网数据重建出来
- 导出静态资产用于检查和发布
- 最后由这里把沿岸相关结果汇总成阻断墙
bin
如果前面的表结构、导出目录或验证页发生变化,最终都要回到这一步确认 bin 产物仍然可用。
这支脚本现在有两组“格子大小”参数,要分清:
--coast-cell-size-m:输入海岸线层的格网大小,例如读取coast_200m、coast_100m、coast_50m--zoom+--grid-size:最终阻断墙自身的输出格子大小;同一个 zoom 下grid-size越大,tile 内切得越细,墙 cell 越小
还有一条自动规则:
- 当
--coast-cell-size-m < 20时,脚本会跳过fish_port_20m - 这是因为输入海岸线层已经比渔港 20m 更细,继续叠加渔港 20m 反而会把更粗的格子混进阻断墙
- 此时实际融合顺序会变成:
hazard_50m- 指定的
coast_*m,例如coast_10m
- 生成的
.meta.json会记录include_fish_port_20m=false
默认的 bin 组合顺序是:
fish_port_20mhazard_50mcoast_200m
如果你要把海岸线层切成更细的版本,可以直接改参数:
cd /root/sourceserver/pbf
./.venv/bin/python coastline/navgrid_v2/build_coast_wall_z12_bin.py --coast-cell-size-m 100
./.venv/bin/python coastline/navgrid_v2/build_coast_wall_z12_bin.py --coast-cell-size-m 50
如果要调整最终墙的 cell 大小,可以改 zoom 和 grid-size:
cd /root/sourceserver/pbf
./.venv/bin/python coastline/navgrid_v2/build_coast_wall_z12_bin.py \
--zoom 11 \
--grid-size 80
如果输入海岸线层已经做到 10m,可以这样生成更细的墙;这时会自动不使用渔港 20m:
cd /root/sourceserver/pbf
./.venv/bin/python coastline/navgrid_v2/build_coast_wall_z12_bin.py \
--zoom 14 \
--grid-size 80 \
--coast-cell-size-m 10
这个命令的默认输出会是:
out/navmask/coast_wall_z14_g80_10_50.bin
常用理解:
- 默认
--zoom 12 --grid-size 40,墙 cell 约244.6m --zoom 12 --grid-size 80,墙 cell 约122.3m--zoom 13 --grid-size 40,墙 cell 约122.3m--zoom 13 --grid-size 80,墙 cell 约61.1m
如果横向和纵向要分别调,可以使用:
cd /root/sourceserver/pbf
./.venv/bin/python coastline/navgrid_v2/build_coast_wall_z12_bin.py \
--zoom 12 \
--grid-w 80 \
--grid-h 80
如果海岸线表名不跟着默认规则走,也可以直接指定:
cd /root/sourceserver/pbf
./.venv/bin/python coastline/navgrid_v2/build_coast_wall_z12_bin.py \
--coast-layer-name coast_100m \
--coast-cell-size-m 100
如果想直接看 bin 的效果,可以打开:
src/pbf/navsea-coast-wall-z12-viewer.html
在页面里选择生成好的 coast_wall_*.bin,可选再选择同名 .meta.json,就能直接看最终阻断墙的铺面效果。查看页会按 bin header 自动识别 zoom 和 grid。
9. 验证页
http://192.168.200.184/newpec/navsea-coastline-fukuoka-saga-200m-v2.htmlhttp://192.168.200.184/newpec/navsea-fish-port-debug-v2.htmlhttp://192.168.200.184/newpec/navsea-fish-port-prc50-test-v2.html