1. 部署目标与环境
- 目标:构建完全离线、内网可用的 OSM 瓦片地图服务,为 Filament (Laravel 12) 系统提供底层地图支持。
- 硬件环境:Dell Precision 7920 工作站 (Xeon Silver 4210R / 32GB 内存 / SSD RAID)。
- 数据范围:山东省全量矢量数据 (包含招远市全境)。
- 核心技术栈:Docker, PostgreSQL + PostGIS, Renderd, Apache/Mod_tile。
2. 核心部署流程 (Docker)
为确保数据索引完整且避免镜像自动下载示例数据(卢森堡问题),采用全量导入 + 绝对路径挂载策略。
第一步:环境初始化
确保无脏数据残留。
1 | docker rm -f osm-server |
第二步:高性能数据导入 (Import)
针对 Xeon 处理器和 SSD RAID 进行参数调优,最大化利用硬件性能。
- 源文件:
shandong-latest.osm.pbf(约 67MB)。 - 挂载策略:必须将宿主机文件挂载到容器内的
/data/region.osm.pbf,以覆盖默认行为。 - 性能参数:
THREADS=18:利用多核并行处理。OSM2PGSQL_CACHE=8000:分配 8GB 内存用于构建空间索引。
1 | docker run --rm \ |
第三步:启动服务 (Run)
启动渲染引擎与 Web 服务。
1 | docker run -p 8080:80 \ |
3. 服务可用性验证
方式 A:数据库层核验
通过 SQL 确认地理实体是否已入库(以招远地标为例)。
1 | -- 验证道路数据 |
方式 B:瓦片服务直连
访问招远市中心坐标对应的瓦片 URL,确认渲染正常。
- 测试地址:
http://localhost:8080/tile/15/27331/13146.png - 预期结果:返回包含中文街道信息的 PNG 图片。
4. 前端集成方案 (Filament PHP)
在 Laravel/Filament 系统中接入离线底图。核心逻辑是锁定初始视口,确保用户打开地图即聚焦于目标区域。
1 | use DotsWan\FilamentMap\Fields\Map; |
·
5. 扩展方案:自定义区域切割 (可选)
若需剥离特定行政区划(如仅保留招远市轮廓),可使用 osmium 工具链。
- 定义边界:使用 GeoJSON 定义多边形范围,并导出为 zhaoyuan.geojson。
- 执行切割:
1
osmium extract -p zhaoyuan.geojson shandong-latest.osm.pbf -o zhaoyuan.osm.pbf
- 重载数据:使用新生成的
.pbf文件重复“第二步”导入流程。
6. 运维参数
资源占用:
磁盘:约 2GB - 3GB (含数据库与基础缓存)。
内存:建议预留 4GB 以上给 Docker 容器。
数据更新:只需下载最新的山东省 PBF 文件,重新执行 Clean -> Import 流程即可(耗时 < 5分钟)。
网络要求:部署过程中需短暂联网下载全球水体数据(约 800MB),之后运行过程完全离线。