4.7 KiB
4.7 KiB
NavSea coast_wall_z12.bin 生成说明
本文说明如何从当前 MySQL 三层格子生成 coast_wall_z12.bin。
生成脚本:
当前输入数据库:
navsea_japan_coast_grid
当前输入表:
navsea_grid_cell
1. 设计口径
这个 bin 文件不是重新从原始海岸线矢量或 PBF 几何开始栅格化。
当前口径是:
- 先使用数据库里已经生成好的三层格子
- 再按
density_overview_grid的密度优先级融合 - 最后编码成 z12 / 40x40 的 blocked wall 二进制文件
三层输入:
fish_port_20mhazard_50mcoast_200m
融合规则:
20x20永远保留50x50如果和已保留的20x20重叠,则跳过200x200如果和已保留的20x20或已保留的50x50重叠,则跳过
这和 density_overview_grid.geojson 的规则一致:同一区域优先使用更高密度格子,避免重复表达同一片阻断区域。
2. bin 格式
输出 bin 用于快速查询:
isBlocked(lon, lat) -> bool
空间划分:
- zoom:
z12 - 每个 z12 tile 切成
40 x 40 - 每个 tile 最多
1600个 cell
tile 内编码:
- blocked cell 数量
<= 96:使用 sparseuint16[] - blocked cell 数量
> 96:使用 bitsetuint32[50]
文件结构:
- Header
- BlockDirectory
- TileDirectory
- DataBlob
这个结构的目的主要是节约物理存储空间,同时让运行时可以按 block / tile 做快速查询。
3. 九州测试生成
推荐先生成九州范围样例:
cd /root/sourceserver/pbf
./.venv/bin/python coastline/build_coast_wall_z12_bin.py \
--preset kyushu \
--out out/navmask/coast_wall_z12_kyushu.bin \
--debug-geojson out/navmask/coast_wall_z12_kyushu.debug.geojson \
--debug-limit 2000
输出文件:
out/navmask/coast_wall_z12_kyushu.binout/navmask/coast_wall_z12_kyushu.bin.meta.jsonout/navmask/coast_wall_z12_kyushu.debug.geojson
当前九州样例统计:
tiles=813
cells=148453
sparse=351
bitset=462
blocks=7
size=122625 bytes
4. 小范围 smoke test
可以用福冈附近小范围做快速验证:
cd /root/sourceserver/pbf
./.venv/bin/python coastline/build_coast_wall_z12_bin.py \
--self-test \
--bbox 130,33,131,34.5 \
--out out/navmask/coast_wall_z12_fukuoka_smoke.bin \
--query 130.4,33.6 \
--progress-every 0
这个命令会:
- 跑内置编码自测
- 生成小范围 bin
- 用内置 reader 查询
130.4,33.6
当前验证结果:
query lon=130.4 lat=33.6 blocked=True
5. 全国生成
全国生成命令:
cd /root/sourceserver/pbf
./.venv/bin/python coastline/build_coast_wall_z12_bin.py \
--preset all \
--out out/navmask/coast_wall_z12.bin
如果需要 debug GeoJSON,可以追加:
--debug-geojson out/navmask/coast_wall_z12.debug.geojson \
--debug-limit 5000
全国生成会扫描完整三层数据库,耗时和内存都会高于九州样例。
6. 参数说明
常用参数:
--preset kyushu:生成九州范围样例,默认值--preset all:生成全国范围--bbox min_lon,min_lat,max_lon,max_lat:自定义经纬度范围,优先于--preset--out PATH:输出 bin 路径--meta-json PATH:输出 meta JSON;不指定时默认写到<out>.meta.json--debug-geojson PATH:输出抽样 blocked cell GeoJSON--debug-limit N:debug GeoJSON 最多输出多少个 cell--query lon,lat:生成后用内置 reader 查询一个点--self-test:执行基础编码自测--progress-every N:每读取 N 行打印一次进度,设为0可关闭
查看帮助:
cd /root/sourceserver/pbf
./.venv/bin/python coastline/build_coast_wall_z12_bin.py --help
7. 输出 meta
生成器会写出 meta JSON,包含:
- 生成时间
- 数据库名
- bbox / preset
- z12 cell 大小
- density 融合规则
- 三层源数据行数
- 三层去重后数量
- 三层保留 / 跳过统计
- bin 文件大小
- block / tile / sparse / bitset 统计
- 可选 query 查询结果
示例:
out/navmask/coast_wall_z12_kyushu.bin.meta.json
8. 当前验证项
脚本内已包含:
tileIdpack / unpackcellIdpackblockIdpack- sparse encode
- bitset encode
- writer / reader 抽样 roundtrip
is_blocked_lonlat()查询
已验证命令:
cd /root/sourceserver/pbf
./.venv/bin/python -m py_compile coastline/build_coast_wall_z12_bin.py
./.venv/bin/python coastline/build_coast_wall_z12_bin.py --help
./.venv/bin/python coastline/build_coast_wall_z12_bin.py --self-test --bbox 130,33,131,34.5 --out out/navmask/coast_wall_z12_fukuoka_smoke.bin --query 130.4,33.6 --progress-every 0