打造 TaxMap-TW:用 Astro 做台灣所得地圖
資料地圖(Choropleth)該用哪種色階?做台灣所得稅 TaxMap 時原本想用 viridis,最後換成 ColorBrewer 的 YlGnBu + Jenks 自然斷點。整理 7 種主流連續色階比較、為什麼紅綠對比是地雷、長尾分布怎麼分級、以及 opacity × 基底圖的隱藏陷阱。
- 1
資料地圖該用哪種色階?viridis、YlGnBu 與 ColorBrewer 實戰指南
資料地圖(Choropleth)該用哪種色階?做台灣所得稅 TaxMap 時原本想用 viridis,最後換成 ColorBrewer 的 YlGnBu + Jenks 自然斷點。整理 7 種主流連續色階比較、為什麼紅綠對比是地雷、長尾分布怎麼分級、以及 opacity × 基底圖的隱藏陷阱。
2026-05-27 · 3min read - 2
OpenFreeMap vs MapTiler vs Mapbox:6 個 Web 地圖底圖服務怎麼選?
做台灣所得稅地圖選底圖時,發現業界標準 Mapbox 免費額度只有 5 萬次/月。整理 OpenFreeMap、MapTiler、Mapbox、NLSC 等 6 種主流服務的免費額度、token、style 比較,以及為什麼公民科技專案選了 2024 年才上線的 OpenFreeMap。
2026-05-27 · 3min read - 3
Web 地圖底圖是什麼?vector vs raster、tile pyramid、style spec 一次搞懂
Web 地圖底圖到底是什麼?這篇用最白話的方式把 vector tile vs raster tile、tile pyramid(z/x/y 金字塔)怎麼設計、style spec 為什麼存在一次講清楚,順便聊 raster 和 vector 各自適合的場景。讀完再回去看其他地圖技術文章會順非常多。
2026-05-27 · 3min read - 4
PMTiles 取代傳統 tile server:HTTP Range Request 的單檔魔術
PMTiles 把上千萬個 tile 打包成單一檔案,靠 HTTP Range Request 讓瀏覽器只讀需要的部分,沒有 tile server、丟到 S3 就能用。整理它的設計、跟 MBTiles 的差異、何時不該用,以及在 TaxMap-TW 怎麼用 tippecanoe 產一個。
2026-05-27 · 4min read - 5
從 PDF / CSV 到 JSON:政府開放資料的 ETL 實戰
做 TaxMap-TW 時清理財政部所得稅 CSV 踩到 6 個坑:民國年 vs 西元年命名陷阱、schema 跨年漂移、BOM / 引號變化、「合計」與「其他」過濾、村里名罕用字 mojibake、早期年度只有 PDF 沒 CSV。記錄這些政府開放資料的真實樣貌與 ETL 處理 pattern。
2026-05-27 · 3min read - 6
競爭排名 vs 密集排名 vs 百分位:地圖標籤的 ranking 設計
7,748 個村里,最大排名居然不是 7,748?做 TaxMap-TW 排名功能才發現「排名」有 5 種演算法,差別都在同分怎麼處理。比較 Competition、Dense、Standard 等的適用情境,說明地圖標籤為什麼選 Competition Ranking。
2026-05-27 · 2min read - 7
打造 TaxMap-TW 完整心得:6 個技術決策、踩了 4 個坑
TaxMap-TW(台灣所得稅地圖)月成本 $0、4-5 天從零上線的完整復盤:底圖、色階、PMTiles、Astro 6 SSG、FIA 直拓、Competition Ranking 共 6 個技術決策,與 macOS unzip Big5、MapLibre 容器尺寸卡 0×0 等 4 個踩過的坑。
2026-05-27 · 2min read - 8
為什麼我把所得地圖色階從 viridis 換成 OrRd:把「一個決策」拆成「兩個獨立軸」
做 TaxMap-TW 色階換三次,最後選 OrRd 不是因為好看,而是把「色階」拆成用色 (hue) + 分桶 (binning) 兩個獨立決策重新組裝。對數絕對門檻(30/50/80/130/200/350 萬)+ OrRd 7 級 = 跨年顏色穩定、中產區段視覺最寬、outlier 自然分出。
2026-05-27 · 3min read - 9
Cloudflare Pages 的 20,000 檔案上限:當「一頁一檔」撞牆,我把 TaxMap 搬到 Netlify
TaxMap-TW build 出 23,331 個檔案,撞上 Cloudflare Pages Free 方案「單次部署最多 20,000 檔」的硬限制,最後改用 Netlify 5 分鐘解決。記錄為什麼會爆檔案數(一頁一檔 × 7,750 村里)、三個方案的取捨,以及換平台其實是「換天花板不是拆天花板」——選靜態部署平台別只看單檔大小,檔案數才是隱形天花板。
2026-05-31 · 2min read - 10
把 7,750 張 OG 圖改成 Cloudflare Worker 即時生成:Satori at the edge
Cloudflare Worker 即時生成 OG 圖的設計稿:用 workers-og(Satori + resvg-wasm)取代 TaxMap-TW 預先生成的 7,750 張村里圖,預生檔案數從 7,750 降到 0、騰出空間搬回 Cloudflare Pages Free。含中文字型、Cache API 與 Workers Free CPU 上限踩雷。
2026-05-31 · 1min read