技術實作

這頁寫給想知道「找回毛孩」怎麼做的人:資料從哪來、地址怎麼變成座標、隱私怎麼守、照片怎麼上地圖、刊登怎麼防濫用。數字都是 2026 年 8 月在正式站量到的。

整條流程(每 5 分鐘檢查一次,有新案件才跑)

  1. 探針:每 5 分鐘只抓官方清單最前面 200 筆(約 100KB、0.15 秒)。這個 API 是依「通報時間」新到舊排序的,新登記的案件一定在最前面,所以不用掃七萬多筆就知道有沒有新通報——沒有就到此為止
  2. 有新通報才往下:從開放資料 API 分頁抓完整份(7 萬多筆,21 秒)
  3. 去重、丟掉髒日期,只留近兩年
  4. 每筆地址切成「縣市/鄉鎮/路/巷/號」,對縣市門牌開放資料做離線地理編碼
  5. 去識別化:門牌、電話、LINE、姓名一律刪;座標加隨機偏移
  6. 探測官方照片是否還在,新照片抓回來做縮圖與中圖
  7. 打包成一份 GeoJSON 推到正式站,瀏覽器一次載完(gzip 後約 550 KB)

地址 → 座標:三層退而求其次

官方資料只有地址文字,沒有座標。線上地理編碼服務不是要錢就是有條款限制(Google 免費額度要綁信用卡、而且結果不能快取;OpenStreetMap 的 Nominatim 對台灣門牌覆蓋很差,抽樣測過大多只能到路名),所以改用各縣市政府公開的門牌座標檔自己建一張表:

目前上地圖的 8,044 筆案件裡:定位到門牌或巷的 3,515 筆(44%)、只到路的 1,042 筆(13%)、鄉鎮撒點 3,279 筆(41%)、只到縣市 209 筆(3%)。另外 2,108 筆連縣市都解析不出來,只進地址不明清單。地圖上大圓=精準、虛線圈=撒點,一眼分得出來。

隱私:技術上做到「看得出區域、找不到住家」

照片

官方圖片伺服器對外很慢又會限流,直接在地圖上引用會讓 2,800 張縮圖等到天荒地老,所以自己存:128px 縮圖(地圖用,2,816 張只有 12 MB)和 720px 中圖(資料卡用,約 200 MB)。官方「沒有照片」時回的是一個 12 bytes 的空檔,靠這個判斷。每天重新探測一次,官方撤下的照片本站一天內跟著刪;不存原圖。

地圖上的照片卡是自己排的:MapLibre 沒有「有空間才顯示、擠了就挑最新」這種功能,所以每次移動畫面時,把畫面內的案件依時間新到舊排序,逐張算矩形是否跟已放的卡重疊(AABB 碰撞),放得下才放,最多 120 張;放不下的退化成小圓點。這樣不管縮放到哪一層,永遠看得到照片,而且擠的地方是最新的案件優先。

前端

自行刊登:不寄信、不建密碼

部署與成本

Flask 子應用掛在跟其他工具同一個容器裡,SQLite 讀寫,沒有顯示卡、沒有佇列。資料更新有兩支 systemd timer:每 5 分鐘一次的探針(只抓官方清單最前面 200 筆、約 100KB,比對有沒有新通報,有才跑整批),以及每天 04:40 的完整版:更新門牌表 → 抓官方資料 → 建檔 → 探測照片 → tar 過 SSH 推到正式站;失敗就留舊資料不上線。整個工具硬碟佔用約 1 GB(門牌表佔七成),每月流量在 Cloudflare 免費額度內。不放廣告在地圖與案件頁,因為上面有未複核的使用者內容。

難在哪

不是資料不夠,官方資料很齊。卡的是三件小事疊在一起:地址沒座標(要自己建門牌表)、照片伺服器慢(要自己存)、還有個資(原始資料裡到處是門牌電話,直接畫地圖會出事)。每一件都不難,但都要做完才能上線。

← 回地圖 資料來源與隱私做法