前几轮我们挖过监控、记账、流媒体、家庭服务器,这期换个几乎每个产品都躲不开、却最少被当成“自建选项”的领域:地图。
思路很简单——地图是互联网产品的隐形水电煤:外卖要选地址、跑步要画轨迹、后台要画热力图。但绝大多数开发者一想到地图就条件反射掏 Google Maps / Mapbox 的 API Key,然后被按次计费的教育劝退。实际上,从底图渲染、瓦片数据、地址搜索到路线规划,这条链路上的每一环都有成熟的开源替代,而且质量高到支撑过 Uber、komoot、Felt 这个级别的产品。
本期凑齐了一整套“自建地图栈”:8 个仓库覆盖渲染、切片、瓦片格式、免费托管、地理编码、路径规划、样式设计、数据可视化八个环节,能拼出一条完全不经过任何商业地图巨头的完整链路。其中没有一个是 AI 项目,全是闷声干活多年的基础设施工具。
github.com/maplibre/maplibre-gl-js | Star 约 5000+ | 基金会化持续活跃维护
一句话定位:开源地图渲染 SDK,Mapbox GL JS 的社区分叉,整个自建地图栈的地基。
它解决什么痛点:2020 年底,Mapbox 把自家的 GL JS 库在 v2 版本改成了专有许可,超出免费额度就要掏钱,前端圈一片哗然。社区当晚就基于最后一个开源版本分叉出了 MapLibre,从此 Web 端矢量地图渲染有了一个 BSD 协议、随便商用的自由版本。
核心拆解:WebGL 矢量瓦片渲染,样式规范与老版 Mapbox 兼容,所以网上大量现成样式教程都能直接套用;配套 Android、iOS、React Native 端,一套样式三端通用;近年的大版本还加入了地球仪投影(globe)和 3D 地形,效果上已经不虚商业产品。项目如今由 MapLibre 组织运营,多家地图公司和云厂商赞助,不是那种随时弃坑的 个人项目。用法就是 npm install maplibre-gl,给一个 style JSON 和一个容器 div,地图就起来了。
上手难度:⭐⭐(会前端就会用)
适用人群:所有需要在网页或 App 里放地图的开发者。商业方向:给客户交付位置类功能时不再转嫁 Mapbox 账单,报价空间直接多出一截。
github.com/onthegomap/planetiler | Star 约 2500 | 持续活跃维护
一句话定位:把 OpenStreetMap 原始数据“编译”成矢量瓦片的单机工具。
它解决什么痛点:自建地图的第一道坎是切片——把几百 GB 的 OSM 原始数据变成渲染引擎能读的瓦片。传统方案要么买云服务,要么搭 PostGIS + 切片服务 + 任务队列的重型管线,工程量劝退大部分人。
核心拆解:Planetiler 用 Java 写成,靠流式处理和内存映射文件,把这件事压缩成一条命令:下载数据、建索引、输出瓦片一气呵成。城市级数据笔记本就能跑,全球级数据按官方说法在高配单机上几小时量级也能完成。它内置了一套 OpenMapTiles 兼容的基础底图方案,零配置就能出图;想自定义图层(比如只保留水系和道路)可以写 Java profile 自己编排;输出直接支持 MBTiles 和 PMTiles,跟下一节的仓库无缝衔接。
上手难度:⭐⭐⭐(需要理解瓦片和图层的基本概念)
适用人群:GIS 工程师、做离线/内网地图的团队。商业方向:很多政企和涉密单位不允许内网系统连接外部地图服务,“私有化离线底图”是真实存在的付费需求,Planetiler 就是生产这条流水线的核心机器。
github.com/protomaps/PMTiles | Star 约 1500 | Protomaps 团队持续迭代
一句话定位:单文件“云优化”瓦片格式,本期第一个小而美。
它解决什么痛点:传统观念里,给网站提供瓦片就得跑一个 tile server——数据库、切片服务、缓存、监控一整套。PMTiles 的想法简单粗暴:把所有瓦片连同空间索引打包成一个文件,靠 HTTP Range Request 按需读取任意字节。于是 S3、Cloudflare R2、甚至 GitHub Pages 都能直接当地图后端,服务器整个砍掉。
核心拆解:v3 格式用 HV 分形目录组织空间索引,查找指定范围瓦片只需几次区间请求,不必下载全文件;配套 CLI 工具能与 MBTiles 互转,Planetiler 也能直接产出 PMTiles。据项目方介绍,这套格式已被多个商业地图产品采用,Protomaps 自己的全球底图服务就构建在它之上。更妙的是配合 Cloudflare R2 这类免出口流量的对象存储,全球分发的地图服务成本几乎只剩存储费。
上手难度:⭐⭐(转换命令一行)
适用人群:独立开发者和不想运维的小团队。商业方向:接“低成本地图上线”类项目,报价可以很低、利润率却极高,因为你的边际成本趋近于零。
openfreemap.org | 开源新秀 | 服务持续运营中
一句话定位:免费、无调用上限的地图瓦片托管服务,代码全部开源。
它解决什么痛点:渲染引擎开源了,瓦片数据从哪来还是问题。自己切、自己托管对 MVP 阶段太重。OpenFreeMap 的答案是:我帮你托管,不要钱、不要注册、不限调用次数——把它的 style URL 填进 MapLibre,你的地图就上线了。
核心拆解:据其官网介绍,它提供全球矢量瓦片和 Positron、Fiord 等数种经典开源风格,没有任何水印和 Rate Limit;整套运营栈开源,意味着哪天流量大了或者不放心了,可以照着架构自托管平滑迁移。项目的可持续性靠捐赠和赞助支撑,这种“先免费获客、架构随时可带走的模式”对初创非常友好。它本质上是本文 2、3 号仓库能力的一键商用封装,也是整条自建路线最好的入门入口。
上手难度:⭐(一行 style URL)
适用人群:个人项目、初创 MVP、黑客马拉松。商业方向:零成本完成产品验证,等调用量真的大到需要 SLA 时,再用 Planetiler + PMTiles 自建接管,全程不换前端代码。
github.com/komoot/photon | Star 约 1900 | komoot 维护多年
一句话定位:开源地理编码器,本期第二个小而美。
它解决什么痛点:地图显示出来了,用户在搜索框输“国贸”却一片空白——地理编码(地址转坐标、坐标转地址)是地图产品最容易漏掉、商业服务又按次收费的隐形刚需。
核心拆解:Photon 出自德国户外社区 komoot,服务于千万级用户的路线搜索,成熟度经过了真实流量检验。技术上是基于 Elasticsearch/Lucene 对 OSM 全量数据建索引,支持多语言名称、模糊匹配、POI 搜索和逆地理编码(坐标反查地址),对外暴露简洁的 REST API。Docker 一键起服务,把 OSM 区域数据导入后即可使用;官方还提供公共演示实例,接个小项目连自托管都可以先省了。中文地址搜索可用性取决于 OSM 本地数据质量,一线城市表现已经可用,这点建议先拿演示实例验证再上生产。
上手难度:⭐⭐⭐(Docker 简单,导入全量数据要点时间)
适用人群:本地生活、跑腿配送、仓储定位类应用的开发者。商业方向:把地址搜索做成自托管组件卖给外卖、物业、物流类客户,替代按次计费的编码 API。
github.com/valhalla/valhalla | Star 约 4000 | 社区接棒长期活跃维护
一句话定位:开源路径规划引擎,地图栈里商业价值最高的一环。
它解决什么痛点:搜索和路线是地图服务收费最狠的两块。显示可以白嫖,但“从 A 到 B 怎么走”一旦上量,账单非常可观。
核心拆解:Valhalla 用 C++ 编写,出身 Mapzen——这家 2018 年关停的地图公司留下的最贵重遗产,此后由社区接棒维护至今。它的招牌是“动态代价模型”:步行、骑行、驾车、卡车各自一套打分规则,还能自定义权重(比如“避开台阶的轮椅路线”),灵活性远超多数开源引擎。功能覆盖 turn-by-turn 导航指令、等时圈分析、距离矩阵;数据按行政区分块存储,按需加载,内存占用友好。Docker 加一份对应区域的 OSM 提取数据就能跑起来,出的是标准 JSON 接口。
上手难度:⭐⭐⭐
适用人群:做出行、配送、户外产品的团队。商业方向:同城配送调度、骑行路线 App 的私有化路线引擎,或给物流公司做内网部署——这类合同单价通常不低。
github.com/maplibre/maputnik | Star 约 2000 | 并入 MapLibre 组织维护
一句话定位:矢量地图样式的可视化编辑器,本期第三个小而美。
它解决什么痛点:MapLibre 的地图长相由一份几百行的 style JSON 决定,道路什么颜色、水域什么透明度、某图层在第几级缩放才显示——全靠手写 JSON 是名副其实的地狱。
核心拆解:Maputnik 把这件事变成所见即所得:左侧图层面板增删排序,右侧属性面板调色改字体,中间实时预览,缩放级联规则用界面点选配置。导出的 style JSON 直接喂给 MapLibre 使用,兼容主流矢量瓦片样式规范。它提供在线版开箱即用,也可以自己 Docker 部署一份给团队用。项目如今已收编进 MapLibre 组织下维护,和渲染引擎同步演进,属于那种“小而致命”的配套工具——本身不复杂,但没有它整条链路的设计环节就断了。
上手难度:⭐(设计师也能直接上手)
适用人群:需要定制地图外观的产品团队。商业方向:“把底图调成客户品牌色”是 GIS 项目里真实存在的付费项,配合 Maputnik 一小时能交付过去一天的活。
github.com/visgl/deck.gl | Star 约 12000 | visgl 组织活跃维护
一句话定位:大规模地理数据可视化框架,Uber 出品。
它解决什么痛点:把城市级车辆轨迹、百万个订单点位画上地图,常规方案要么卡死要么直接 OOM。数据大屏和出行分析这个场景,需要专门的 GPU 渲染层。
核心拆解:deck.gl 用 WebGL(并在向 WebGPU 演进)做批量渲染,内置几十种图层:散点、弧线、轨迹、3D 建筑、热力图、六边形聚合……百万级要素保持流畅交互。它与 MapLibre 底图可以叠加组合——底图管“地图长什么样”,deck.gl 管“数据怎么画”,正好补上这条自建栈的最后一环。React 支持一流,API 声明式,社区里大量出行、物流、政务可视化产品都构建在它之上,属于出身名门、久经战场的选手。
上手难度:⭐⭐⭐
适用人群:做数据产品、BI 大屏、地理分析的前端和数据工程师。商业方向:政企数据大屏、出行热力报告、给 SaaS 产品加地理分析模块,都是成熟变现路径。
| 仓库 | 环节 | Star(约数) | 上手难度 | 适用场景 |
|---|---|---|---|---|
| MapLibre GL JS | 前端渲染 | 5000+ | ⭐⭐ | 所有 Web/App 地图 |
| Planetiler | 数据切片 | 2500 | ⭐⭐⭐ | 自建/离线底图 |
| PMTiles | 瓦片格式 | 1500 | ⭐⭐ | 零服务器托管 |
| OpenFreeMap | 免费托管 | — | ⭐ | MVP 快速上线 |
| Photon | 地址搜索 | 1900 | ⭐⭐⭐ | 本地生活/配送 |
| Valhalla | 路线规划 | 4000 | ⭐⭐⭐ | 导航/物流调度 |
| Maputnik | 样式设计 | 2000 | ⭐ | 品牌定制底图 |
| deck.gl | 数据可视化 | 12000 | ⭐⭐⭐ | 大屏/地理分析 |
注:本篇成稿环境无实时联网核验通道,Star 数为写作时点的约数,请以各仓库页面实时数据为准。
flowchart TD
A["OSM 全球原始数据"] --> B["Planetiler 单机切片"]
B --> C["PMTiles 单文件瓦片"]
C --> D["R2/S3 静态托管"]
D --> E["MapLibre 渲染底图"]
F["Maputnik 可视化调样式"] --> E
E --> G["Photon 地址搜索"]
E --> H["Valhalla 路线规划"]
E --> I["deck.gl 海量数据可视化"]
J["OpenFreeMap 免费托管"] -->|懒人直连方案| E
上手路径建议从右往左:先用 OpenFreeMap + MapLibre 一晚上跑通 Demo,再按需引入 Photon 补搜索、Valhalla 补路线;等流量和 SLA 要求上来,才回过头用 Planetiler + PMTiles 把托管环节收回自家机房。
[!tip] 51学通信知识星球 星主:爱卫生(微信:gprshome201101)——公众号「51学通信」创办者,19 年通信行业运维与讲师经验,著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书(各大电商平台有售)。 星球定位:深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域,主打运维岗位与信令分析。 当前规模:5200 篇主题 / 990 个回答,198 元/年。 加入福利:加入星球后请加爱卫生微信,拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题,另有群内分享。 AI 加持:51学通信知识星球已作为 skill 接入 WorkBuddy,使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例,做总结、找文档和 PPT 等场景全覆盖。
