自建地图服务架构图
Leaflet前端 + Nginx瓦片服务 + Node.js后端完整解决方案
1
前端层 (Frontend - Leaflet.js)
地图渲染引擎
初始化地图容器和视图
管理瓦片图层和叠加层
渲染标记、弹窗和控件
处理地图投影和坐标转换
地址搜索组件
接收用户输入的地址
调用地理编码API (/api/geocode)
解析返回的坐标结果
地图定位和标记显示
地图交互组件
监听地图点击/移动事件
获取点击位置的经纬度
调用逆地理编码API (/api/reverse-geocode)
显示地址信息和弹窗
↓
2
网关层 (API Gateway - Nginx)
静态瓦片服务
路径: /tiles/{z}/{x}/{y}.png
直接返回预生成的图片瓦片
设置长期缓存头(1年)
Gzip压缩和高效传输
地理编码API代理
路径: /api/geocode
代理到Node.js后端服务
请求限流和缓存
负载均衡和高可用
逆地理编码API代理
路径: /api/reverse-geocode
代理到Node.js后端服务
请求限流和缓存
跨域请求处理
↓
3
应用服务层 (Application Layer)
瓦片文件服务 (Nginx)
直接返回图片瓦片文件
目录结构映射: /z/x/y.png
缓存头设置和性能优化
错误处理(返回空白瓦片)
地理编码服务 (Node.js)
地址标准化和解析
数据库模糊查询和全文搜索
结果排序和置信度计算
外部API降级策略
逆地理编码服务 (Node.js)
坐标边界查询(所在行政区)
最近POI查找和距离计算
地址格式化和拼接
空间索引优化查询
↓
4
数据层 (Data Layer)
瓦片文件系统 (本地存储)
存储结构: /z/x/y.png
多层级目录组织
图片压缩格式(WebP/PNG)
备份和同步策略
PostgreSQL (地址数据库)
行政区划表(省市区)
道路表和POI兴趣点表
PostGIS空间扩展
全文搜索索引优化
Redis缓存 (缓存加速)
缓存查询结果
减少数据库压力
会话和临时数据存储
分布式锁和限流
地理编码流程
地址 → 前端API调用 → Nginx代理 → Node.js服务 → 数据库查询 → 返回坐标
逆地理编码流程
坐标 → 前端API调用 → Nginx代理 → Node.js服务 → 空间查询 → 返回地址
瓦片加载流程
地图视图 → 计算瓦片坐标 → Nginx静态服务 → 返回图片 → 前端渲染
技术栈
Leaflet.js
Node.js
Express
Nginx
PostgreSQL
PostGIS
Redis
Docker
前端组件
网关/代理
应用服务
数据存储