跳至主要內容
技術

OpenFreeMap vs MapTiler vs Mapbox:6 個 Web 地圖底圖服務怎麼選?

OpenFreeMap vs MapTiler vs Mapbox:6 個 Web 地圖底圖服務怎麼選?
打造 TaxMap-TW:用 Astro 做台灣所得地圖 第 2 / 10 篇

沒有 vector tile、style spec 的基本概念? 建議先看 Web 地圖底圖是什麼?vector vs raster、tile pyramid、style spec 一次搞懂

最近在做 TaxMap-TW(台灣 7,747 個村里所得稅地圖),村里界、色階都選好之後,我以為「底圖」會是 5 分鐘就解決的小問題。

結果光是底圖服務的選擇就讓我研究了一個下午。

主要的卡點是:業界標準的服務每月有額度上限,但我做的是公民科技專案,未來流量我控制不了。如果某天上熱搜流量爆掉、剛好那個月超額被收錢,那真的會傻眼。

這篇整理我評估的 6 種主流 Web 地圖底圖服務,最後選了 OpenFreeMap(2024 才出現的新興服務)的理由。

選底圖服務(Mapbox、MapTiler…)為什麼是個問題

那天下午一開始我其實很輕鬆,想說底圖不就挑個好看的接上去就好。真正讓我卡住的是這件事:地圖網站上看到的「地圖本身」(道路、地名、地形)跟我疊在上面的所得資料(村里 polygon、色階)是兩層東西。

  • 底圖:道路網、地名、邊界 — 由地圖服務商提供
  • 資料層:我自己的村里標記、polygon、色塊 — 我自己畫

底圖服務商要把全球 OSM 資料切成幾百 GB 的 tiles、放到 CDN、提供 API,成本不低,所以業界普遍採「免費額度 + 超量收費」模式。我打開 Mapbox 定價頁那一刻才意識到:原來「免費」是有條件的,而我這個專案的條件偏偏最差——流量我完全控制不了。

對個人 / 公民科技專案來說,常見的選擇困境是:

  • 業界標準(Mapbox):品質最高,免費額度 5 萬次 map loads/月
  • MapTiler:免費額度是 10 萬次 API requests + 5,000 次 map sessions/月,中文支援好(注意計費單位跟 Mapbox 不一樣,下面會解釋)
  • 自架:完全免費、流量完全自主,但要 100GB+ 儲存 + 維運
  • 政府服務(NLSC):免費、台灣地名/門牌/行政界線的在地化是所有選項裡最準的,但官方 style 偏舊、不好直接拿來做資料視覺化
  • 新興服務:聽過但不敢用,怕停服

OpenFreeMap vs MapTiler vs Mapbox:6 種底圖服務比較

我把每家的定價頁、文件、官方 demo 都點過一輪,整理成這張對照表:

服務費用Token中文標籤部署
OpenFreeMap完全免費無限不需要一般0
MapTiler10 萬 requests + 5,000 sessions/月免費需要中文好0
Stadia Maps20 萬次/月免費需要一般0
Mapbox5 萬次/月免費需要中文好0
CARTO免費試用(額度請以官網為準)需要一般0
NLSC 國土測繪政府免費不需要在地化最好0
自架$0不需要看你怎麼接100GB+

「部署」這欄是我比較關心的:除了自架,所有方案都是「用他們的 hosted endpoint」,本質上零部署。差別只在註冊、token、流量上限。

要特別提醒一件事:這些「免費額度」的計費單位其實不一樣,不能直接比大小。Mapbox 算的是 map loads(地圖載入次數),MapTiler 同時有 API requests(每次抓 tile / style 都算)和 map sessions(一次地圖瀏覽算一個 session)兩種計量——它的 sessions 只有 5,000/月,反而比 Mapbox 的 5 萬 map loads 還低。所以「MapTiler 額度比 Mapbox 高」這句話其實站不住,得看你的使用情境是被哪個單位卡住。CARTO 的免費條件這幾年也改過幾次(從早期的固定額度變成試用 + PAYG),要用之前最好自己去官網確認一次當下的數字。

為什麼選 OpenFreeMap

最後我選了 OpenFreeMap。它是 2024 年才上線的服務,由作者(GitHub 帳號 hyperknot)一個人營運,tile 跑在他自己租的 Hetzner dedicated server 上(用 Round-Robin DNS 撐負載),Cloudflare 則贊助頻寬、R2 拿來存 tile。經費來自 GitHub Sponsors 的社群捐款。

選擇理由:

1. 完全免費無流量上限

對公民科技 / 個人專案最重要的條件。MapTiler、Mapbox 都會在熱門時刻變成「等等我要付錢嗎」的焦慮源。OpenFreeMap 把那種「上熱搜當天會不會收到帳單」的焦慮直接拿掉了。

不過得誠實講:免費不等於沒風險,只是把風險換了一種。付費服務你超額會被收錢,但你跟它有付費關係、它有義務給你 SLA;免費的公共 endpoint 你跟它沒有任何契約,它哪天要對特定 referer 限流、改政策、甚至收手不做,你都只能接受(OpenFreeMap 官方其實就有針對 referer 做過流量限制)。所以這裡換到的不是「零風險」,是「把超額帳單的風險,換成可用性與政策的風險」。如果你真的怕爆量、又不想被別人的政策綁住,唯一的根治解是 self-host——流量完全自主,代價是你得自己扛 100GB+ 的儲存跟維運。我這次沒走那條路,是因為這是個下班做的專案,我寧可賭供應商風險,也不想多養一台機器。

2. 零註冊、零 token

幾秒鐘就能接上。我做的是開源專案,要求每個 fork 的人都去申請 MapTiler token 太麻煩。

3. 基礎設施靠得住,但要清楚它是誰在撐

它的 tile 靠 Cloudflare 贊助頻寬、R2 存放,所以下載速度跟全球可達性其實滿穩。但要老實說:它不是「Cloudflare 託管」,背後是一個人租 Hetzner 機器在跑。我選它不是因為「Cloudflare 罩著就不會掛」,而是因為對一個公民科技專案,這個穩定度已經夠用——真要怕它哪天掛掉,後面我會講解法。

4. 風格夠用

官方現在提供 positron、bright、liberty、dark、fiord(含 3D)等幾種 style,我最常用的是 positron——經典的灰白底色,給彩色 polygon 留空間,很適合資料視覺化。

當然它也有缺點:相對新(2024 年起)、中文標籤沒 MapTiler 細緻、單人營運加上靠 GitHub Sponsors 撐經費,哪天作者沒力或贊助斷掉就有停服風險。但對 MVP / 個人專案,這些都不是阻擋條件——前提是你想清楚萬一它掛了,你能多快換掉它。

中文標籤這點我要多講一句,因為對台灣專案它可能是 deal-breaker。OpenFreeMap 的 OSM 標籤是有中文沒錯,但偏鄉的小地名、巷弄、行政界線的完整度,跟 MapTiler 或 NLSC 比是有差的——大概就是「縣市、主要道路、知名地標看得到,但越往細節越空」。我的地圖是看村里所得色塊、底圖只是襯底,所以這個差距我吃得下;但如果你做的是要讓使用者照著底圖找路、認在地地名的應用,這個落差就足以讓你改選 MapTiler,甚至認真考慮把 NLSC 疊進來。

3 分鐘接上 OpenFreeMap

從零到 MapLibre GL JS + OpenFreeMap 跑起來,三步驟:

1. 裝套件

pnpm add maplibre-gl

2. 初始化地圖

只要一行 style URL,剩下都跟一般 MapLibre 用法一樣:

import maplibregl from 'maplibre-gl';
import 'maplibre-gl/dist/maplibre-gl.css';

const map = new maplibregl.Map({
  container: 'map',
  style: 'https://tiles.openfreemap.org/styles/positron',
  center: [121.0, 23.7],   // Taiwan center
  zoom: 7,
});

最常用的幾個 style URL(另外還有 darkfiord 等):

  • positron — 灰白底色(推薦做資料視覺化)
  • bright — 完整彩色(看起來像 Google Maps)
  • liberty — 經典 OSM 風格

3. attribution

OpenFreeMap 要求標示來源(也是 OSM 授權的要求)。MapLibre 預設會自動讀 style 的 attribution,所以不用額外做事。

如果要客製 attribution:

const map = new maplibregl.Map({
  // ...
  attributionControl: { compact: true },
});

這樣地圖右下角會出現一個小 (i),點開才會展開完整來源。

反思

研究這個的過程踩到一個我自己的迷思:「業界標準 = 最佳選擇」。Mapbox 是地圖領域的業界標準,所以一開始我幾乎想都沒想就要選它。但 5 萬次/月的免費額度,對一個未來不知道會多少流量的開源專案,是個沉重的決策。

這讓我反思:技術選型其實有兩個維度

  1. 技術成熟度 — Mapbox > MapTiler > OpenFreeMap
  2. 商業模式 fit — 對公民科技/個人專案,OpenFreeMap > MapTiler > Mapbox

如果是企業專案、有預算、流量可預期,Mapbox 還是最佳選擇。但如果是「想做就做、不確定會不會紅、寧可服務醜一點也不想付錢」這種專案,業界標準反而是錯的選擇。

其實這兩端中間還有路可走,不是只能二選一。比較務實的策略是先用免費服務起步、流量真的起來再升級:OpenFreeMap 接得快,等哪天爆量或想要更穩,再換成付費的 MapTiler / Mapbox,或乾脆自架——因為 style URL 只是一行設定,遷移成本很低。而 self-host 也別只當成「太麻煩」一句帶過:它是唯一能讓你流量完全自主、不被任何供應商政策綁住的選項,正好對應我開頭最焦慮的那件事。我這次沒選它,是清楚地拿「自己維運一台機器」去換「不用煩流量」,不是因為它不好。

另一個收穫是:新興的開源/免費服務(OpenFreeMap、Stadia 接手 Stamen)值得試。老實說我自己一開始也是看到「2024 才上線、沒聽過」就想直接跳過,後來逼自己把官方 demo 點開、把 style 接到地圖上跑一遍,才發現它對我的需求剛剛好。這些服務通常是社群驅動、目標是補上業界標準的缺口,對小型專案、prototype、學生作業就是寶藏。但「值得試」不等於「閉著眼睛賭」——我會試一個新服務的前提是:我承受得起它哪天突然掛掉,而且我有一條半天內能換掉它的退路。如果是公司要長期維運、不能斷的系統,我就不會拿它當底圖。

最有趣的發現是 OpenFreeMap 的營運模式:一個人租機器、Cloudflare 贊助頻寬、靠 GitHub Sponsors 收社群捐款,本質上是「我幫全世界省流量費,部分人回饋一點就夠我跑下去」。我喜歡這種商業模式之外的可能性,但也沒天真地把全部身家押上去——我留的後路是:TaxMap 的 style URL 是一行設定,真要換成 MapTiler 或自架,半天就能搬完。賭一個新服務,前提是你算得出「它掛掉的那天」要付出多少。

系列其他文章

留言討論

esc
輸入關鍵字搜尋文章...
查看收藏 →