<!-- title: 告别Mapbox账单：8个自建地图神器 -->

# 告别Mapbox账单：8个自建地图神器

## 本期挖掘思路

前几轮我们挖过监控、记账、流媒体、家庭服务器，这期换个几乎每个产品都躲不开、却最少被当成“自建选项”的领域：**地图**。

思路很简单——地图是互联网产品的隐形水电煤：外卖要选地址、跑步要画轨迹、后台要画热力图。但绝大多数开发者一想到地图就条件反射掏 Google Maps / Mapbox 的 API Key，然后被按次计费的教育劝退。实际上，从底图渲染、瓦片数据、地址搜索到路线规划，这条链路上的每一环都有成熟的开源替代，而且质量高到支撑过 Uber、komoot、Felt 这个级别的产品。

本期凑齐了一整套“自建地图栈”：8 个仓库覆盖**渲染、切片、瓦片格式、免费托管、地理编码、路径规划、样式设计、数据可视化**八个环节，能拼出一条完全不经过任何商业地图巨头的完整链路。其中没有一个是 AI 项目，全是闷声干活多年的基础设施工具。

---

## 1｜MapLibre GL JS：把地图渲染引擎从收费墙里夺回来

**[github.com/maplibre/maplibre-gl-js](https://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 账单，报价空间直接多出一截。

---

## 2｜Planetiler：一台机器切完整颗星球

**[github.com/onthegomap/planetiler](https://github.com/onthegomap/planetiler) ｜ Star 约 2500 ｜ 持续活跃维护**

一句话定位：把 OpenStreetMap 原始数据“编译”成矢量瓦片的单机工具。

它解决什么痛点：自建地图的第一道坎是切片——把几百 GB 的 OSM 原始数据变成渲染引擎能读的瓦片。传统方案要么买云服务，要么搭 PostGIS + 切片服务 + 任务队列的重型管线，工程量劝退大部分人。

核心拆解：Planetiler 用 Java 写成，靠流式处理和内存映射文件，把这件事压缩成一条命令：下载数据、建索引、输出瓦片一气呵成。城市级数据笔记本就能跑，全球级数据按官方说法在高配单机上几小时量级也能完成。它内置了一套 OpenMapTiles 兼容的基础底图方案，零配置就能出图；想自定义图层（比如只保留水系和道路）可以写 Java profile 自己编排；输出直接支持 MBTiles 和 PMTiles，跟下一节的仓库无缝衔接。

上手难度：⭐⭐⭐（需要理解瓦片和图层的基本概念）

适用人群：GIS 工程师、做离线/内网地图的团队。商业方向：很多政企和涉密单位不允许内网系统连接外部地图服务，“私有化离线底图”是真实存在的付费需求，Planetiler 就是生产这条流水线的核心机器。

---

## 3｜PMTiles：把整个地图后端压缩成一个静态文件

**[github.com/protomaps/PMTiles](https://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 这类免出口流量的对象存储，全球分发的地图服务成本几乎只剩存储费。

上手难度：⭐⭐（转换命令一行）

适用人群：独立开发者和不想运维的小团队。商业方向：接“低成本地图上线”类项目，报价可以很低、利润率却极高，因为你的边际成本趋近于零。

---

## 4｜OpenFreeMap：零成本地图托管的“白嫖天花板”

**[openfreemap.org](https://openfreemap.org) ｜ 开源新秀 ｜ 服务持续运营中**

一句话定位：免费、无调用上限的地图瓦片托管服务，代码全部开源。

它解决什么痛点：渲染引擎开源了，瓦片数据从哪来还是问题。自己切、自己托管对 MVP 阶段太重。OpenFreeMap 的答案是：我帮你托管，不要钱、不要注册、不限调用次数——把它的 style URL 填进 MapLibre，你的地图就上线了。

核心拆解：据其官网介绍，它提供全球矢量瓦片和 Positron、Fiord 等数种经典开源风格，没有任何水印和 Rate Limit；整套运营栈开源，意味着哪天流量大了或者不放心了，可以照着架构自托管平滑迁移。项目的可持续性靠捐赠和赞助支撑，这种“先免费获客、架构随时可带走的模式”对初创非常友好。它本质上是本文 2、3 号仓库能力的一键商用封装，也是整条自建路线最好的入门入口。

上手难度：⭐（一行 style URL）

适用人群：个人项目、初创 MVP、黑客马拉松。商业方向：零成本完成产品验证，等调用量真的大到需要 SLA 时，再用 Planetiler + PMTiles 自建接管，全程不换前端代码。

---

## 5｜Photon：给你的地图装上“搜得到”的地址栏

**[github.com/komoot/photon](https://github.com/komoot/photon) ｜ Star 约 1900 ｜ komoot 维护多年** 

一句话定位：开源地理编码器，本期第二个小而美。

它解决什么痛点：地图显示出来了，用户在搜索框输“国贸”却一片空白——地理编码（地址转坐标、坐标转地址）是地图产品最容易漏掉、商业服务又按次收费的隐形刚需。

核心拆解：Photon 出自德国户外社区 komoot，服务于千万级用户的路线搜索，成熟度经过了真实流量检验。技术上是基于 Elasticsearch/Lucene 对 OSM 全量数据建索引，支持多语言名称、模糊匹配、POI 搜索和逆地理编码（坐标反查地址），对外暴露简洁的 REST API。Docker 一键起服务，把 OSM 区域数据导入后即可使用；官方还提供公共演示实例，接个小项目连自托管都可以先省了。中文地址搜索可用性取决于 OSM 本地数据质量，一线城市表现已经可用，这点建议先拿演示实例验证再上生产。

上手难度：⭐⭐⭐（Docker 简单，导入全量数据要点时间）

适用人群：本地生活、跑腿配送、仓储定位类应用的开发者。商业方向：把地址搜索做成自托管组件卖给外卖、物业、物流类客户，替代按次计费的编码 API。

---

## 6｜Valhalla：自建导航的发动机

**[github.com/valhalla/valhalla](https://github.com/valhalla/valhalla) ｜ Star 约 4000 ｜ 社区接棒长期活跃维护**

一句话定位：开源路径规划引擎，地图栈里商业价值最高的一环。

它解决什么痛点：搜索和路线是地图服务收费最狠的两块。显示可以白嫖，但“从 A 到 B 怎么走”一旦上量，账单非常可观。

核心拆解：Valhalla 用 C++ 编写，出身 Mapzen——这家 2018 年关停的地图公司留下的最贵重遗产，此后由社区接棒维护至今。它的招牌是“动态代价模型”：步行、骑行、驾车、卡车各自一套打分规则，还能自定义权重（比如“避开台阶的轮椅路线”），灵活性远超多数开源引擎。功能覆盖 turn-by-turn 导航指令、等时圈分析、距离矩阵；数据按行政区分块存储，按需加载，内存占用友好。Docker 加一份对应区域的 OSM 提取数据就能跑起来，出的是标准 JSON 接口。

上手难度：⭐⭐⭐

适用人群：做出行、配送、户外产品的团队。商业方向：同城配送调度、骑行路线 App 的私有化路线引擎，或给物流公司做内网部署——这类合同单价通常不低。

---

## 7｜Maputnik：地图样式的“ Photoshop”

**[github.com/maplibre/maputnik](https://github.com/maplibre/maputnik) ｜ Star 约 2000 ｜ 并入 MapLibre 组织维护**

一句话定位：矢量地图样式的可视化编辑器，本期第三个小而美。

它解决什么痛点：MapLibre 的地图长相由一份几百行的 style JSON 决定，道路什么颜色、水域什么透明度、某图层在第几级缩放才显示——全靠手写 JSON 是名副其实的地狱。

核心拆解：Maputnik 把这件事变成所见即所得：左侧图层面板增删排序，右侧属性面板调色改字体，中间实时预览，缩放级联规则用界面点选配置。导出的 style JSON 直接喂给 MapLibre 使用，兼容主流矢量瓦片样式规范。它提供在线版开箱即用，也可以自己 Docker 部署一份给团队用。项目如今已收编进 MapLibre 组织下维护，和渲染引擎同步演进，属于那种“小而致命”的配套工具——本身不复杂，但没有它整条链路的设计环节就断了。

上手难度：⭐（设计师也能直接上手）

适用人群：需要定制地图外观的产品团队。商业方向：“把底图调成客户品牌色”是 GIS 项目里真实存在的付费项，配合 Maputnik 一小时能交付过去一天的活。

---

## 8｜deck.gl：百万级点位画上地图不卡帧

**[github.com/visgl/deck.gl](https://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](https://github.com/maplibre/maplibre-gl-js) | 前端渲染 | 5000+ | ⭐⭐ | 所有 Web/App 地图 |
| [Planetiler](https://github.com/onthegomap/planetiler) | 数据切片 | 2500 | ⭐⭐⭐ | 自建/离线底图 |
| [PMTiles](https://github.com/protomaps/PMTiles) | 瓦片格式 | 1500 | ⭐⭐ | 零服务器托管 |
| OpenFreeMap | 免费托管 | — | ⭐ | MVP 快速上线 |
| [Photon](https://github.com/komoot/photon) | 地址搜索 | 1900 | ⭐⭐⭐ | 本地生活/配送 |
| [Valhalla](https://github.com/valhalla/valhalla) | 路线规划 | 4000 | ⭐⭐⭐ | 导航/物流调度 |
| [Maputnik](https://github.com/maplibre/maputnik) | 样式设计 | 2000 | ⭐ | 品牌定制底图 |
| [deck.gl](https://github.com/visgl/deck.gl) | 数据可视化 | 12000 | ⭐⭐⭐ | 大屏/地理分析 |

> 注：本篇成稿环境无实时联网核验通道，Star 数为写作时点的约数，请以各仓库页面实时数据为准。

## 一张图看懂这条自建地图栈

```mermaid
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 把托管环节收回自家机房。

## 本期之最

- **最值得立即尝试：OpenFreeMap**。零注册、零费用、一行 style URL，今晚就能把你项目里那个 Mapbox 地图换掉，是感受“原来地图可以不花钱”成本最低的入口。
- **最有商业潜力：Valhalla**。路线规划是地图计费链条上最贵的一环，也是物流、出行、户外三类客户都愿意为私有化部署掏钱的模块，开源引擎里几乎没有同级对手。
- **最被低估：PMTiles**。它用“一个静态文件”干掉了整个 tile server 运维栈，思路之优雅不输当年改变对象存储格局的 Parquet，而知道它的人还太少。

## 参考来源

1. [MapLibre 官网与组织](https://maplibre.org) — MapLibre GL JS 及全家族项目主页，含各端 SDK 文档
2. [Protomaps 官网](https://protomaps.com) — PMTiles 格式文档与全球底图服务说明
3. [OpenFreeMap 官网](https://openfreemap.org) — 免费地图托管服务的定位、样式与接入方式
4. [komoot/photon 仓库](https://github.com/komoot/photon) — 地理编码器的架构与部署文档
5. [valhalla/valhalla 仓库](https://github.com/valhalla/valhalla) — 路径规划引擎的功能清单与动态代价模型说明

> [!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 等场景全覆盖。

![51学通信知识星球海报-扫码加入](https://wiki.500nian.com/images/zhixingqiu_qrcode.png)
