[哈爸筆記] 讓 AI 擁有地理動向的靈魂:智慧行車導遊兩日開發實錄

最近兩天,我跟我的 AI 夥伴 (Antigravity) 泡在 Travel-Advisor-HUD 這個專案裡。目標很單純:讓我的行車助理不再只是「唸出路名」,而是像個真正懂我的「私人導遊」。 在兩天的密集對話中,我們經歷了幾次關鍵的「卡關」與「破繭而出」,這幾個點我覺得是開發地理感知型 AI (Geographic AI) 最迷人的地方。 🚀 什麼是 Travel Advisor HUD? 這是一個跨裝置的行車助理系統:由 Mac 負責背景運算與大腦邏輯,iPad 則作為沈浸式視覺看板 (HUD)。它能感知你的位置、速度與航向,並結合你過去在 WalkGIS 筆記中的內容,由 Gemini 生成具備人文厚度的即時導覽。 🧩 關鍵卡關與突破 1. 沉重的 Geopandas 與「資料主權」的執念 一開始,我們想用 Python 的 Geopandas 來處理鄉鎮邊界 (SHP) 的空間對位。但在路測邏輯中,Geopandas 顯得過於笨重,且我有一個堅持:「資料主權」。 我不想為了讓 AI 讀數據,就把我珍貴的 walkgis.db (私有筆記) 或內政部的圖資檔案搬來搬去、轉檔轉去。 突破點:我們轉向了 SpatiaLite (SQLite 的空間外掛)。 心得:透過 ATTACH DATABASE 直接掛載原始 DB,並用 VirtualShape 虛擬映射 SHP 檔案。資料「原地不動」,但查詢卻是極速的 SQL 指令。這讓「資料主權」與「運算效能」在這一層完美的對位了。 2. 從「歡迎」到「盤點」的內容層次 原先的導覽很死板:進入新縣市就唸一段 Wiki 簡介。但開車的人真正需要的是:「這裡有沒有我以前記過的東西?」 卡關:AI 雖然強筆強大,但如果你不給它具體的「本地上下文」,它只會說些漂亮但空泛的廢話。 突破點:「行政區點位盤點 (Township Inventory)」機制。 心得:在跨越邊界的瞬間,系統自動在背景先發動一次空間點名,把該鄉鎮內所有關於我的私有筆記 POI 抓出來,做成摘要餵給 Gemini。當 AI 說出:「歡迎來到橫山,這裡有您之前筆記過的內灣車站喔…」時,那種「它真的懂我」的導覽感才算真正建立。 3. Hammerspoon 的定時器與動態設定 Hammerspoon 雖然穩定,但預設的定時器是靜態的。如果我在開車中想調整檢查頻率(比如從 5 分鐘改成 1 分鐘),以往我得停下車,打開 Mac、改代碼、Reload Config。 ...

2026-03-11 · 1 min · 145 words · Wuulong

GeoPulse:從地理數據迷霧到精準感知的「空間大腦」設計實錄

在 AI 密集開發的時代,我們常說 AI 是大腦,但大腦若沒有「感官」來感知現實世界的空間脈絡,它的建議就容易流於空泛。這篇文章記錄了我與 AI 代理程式(Antigravity)共同打造 GeoPulse —— 一個空間感知與導航引擎的設計經驗。 這不僅是一個技術腳本的開發,更是一場關於「如何解決雜亂大數據」與「架構落地」的實踐。 1. 發想:在地理數據的迷霧中尋找座標 作為一個長期進行河流探勘與 GIS 研究的開發者,我面臨一個典型的數位資產困境: 資產巨大且分散:幾十 GB 的政府 SHP 圖資散落在外接硬碟中(縣市界、流域圖、配水管線)。 環境斷裂:這些資料並非隨時掛載在系統內,AI 無法直接存取。 格式混亂:編碼有 CP950 與 UTF-8 的混雜,座標系則有 TWD97 與 WGS84 的轉換問題。 當我想問 AI:「我現在這個座標在哪个流域?附近有沒有我標記過的私房點?」時,AI 是盲目的。我們需要一個「空間導航核心」,讓 AI 具備地理感知的能力。 2. 架構:虛擬化優先 (Virtual-First) 的戰略選擇 在設計 GeoPulse 時,我們面臨一個關鍵選擇:要把所有資料匯入資料庫(Solidification),還是保持資料的原始性? 為了保持靈活性與減少磁碟開銷,我們選擇了 「虛擬化優先」 架構。這套架構由三個核心組件構成: A. 資源索引員 (GIS Cataloger) 我們不強迫資料進場,而是讓腳本主動去「掃描」。它會掃描硬碟,識別所有的 .shp, .kml, .geojson 等檔案,產出一份 GIS_CATALOG.md。這讓 AI 知道我們「擁有什麼」。 B. 語義地圖 (GIS Knowledge Hub) 光有路徑是不夠的。我們透過一個 GIS_KNOWLEDGE.yaml,告訴系統每一張表的「意義」。 這張表叫 river_basin,它的座標系統是 EPSG:3826,名稱欄位在 basin_name。 這種「定義大於匯入」的做法,讓工具與圖資之間產生了透明的語義連結。 C. 空間引擎 (GeoPulse Engine) 這是最精彩的部分。我們利用 SpatiaLite 的 VirtualShape 技術,在查詢發送的瞬間,才將外部的 SHP 虛擬掛載進「具備空間處理能力」的 SQLite 內存中。 ...

2026-02-20 · 1 min · 132 words · Wuulong