
—— 哈爸開發日誌:去中心化 GIS 的實現之路
在數位內容的世界裡,大部分的網站都是「封閉的城堡」:資料被鎖在特定的伺服器中,App 與內容緊密耦合。但在 WalkGIS V2 的升級中,我們完成了一次從「地圖網站」到「地圖瀏覽器」的範式轉移 (Paradigm Shift)。
這篇文章將揭開這套「去中心化地理資訊協議」背後的設計邏輯與技術亮點。
💡 那個「靈光乍現」的瞬間:App 即瀏覽器
V1 的 WalkGIS 是為了展示特定專案而存在的,所有的資料路徑都是寫死的。但在 V2 中,我們問了一個大膽的問題:「如果 App 只是外殼,而地理資料(SQLite)才是真正的內容呢?」
這就是 V2 核心架構 DataSourceContext 的誕生契機。
我們將整個應用的「真相來源 (Source of Truth)」從常數轉變為一個動態的上下文環境。這改變了應用的本質:
- V1 (網站):使用者造訪一個網址,閱讀我們準備好的資料。
- V2 (瀏覽器):使用者可以「掛載 (Mount)」任何符合規範的網址。你可以想像這是一個具備地圖能力的「地理網頁瀏覽器」,它能讀取任何地方的
walkgis.db。
這讓 WalkGIS 變成了一個通用的工具。任何人只要擁有一個 GitHub Pages 空間,並上傳自己的資料庫,就能立即擁有一個功能齊全、支援 AI 脈絡產出的 GIS 導覽介面。
🏛 「市場」設計:App 配置與資料內容的解耦
我們在系統中設計了兩個層次:
- 市場註冊中心 (Market Registry):一個中心化的 JSON 文件,像「應用商店」一樣推薦優質節點。
- 數據節點 (Data Node):完全去中心化的實體,存放於世界各地的 GitHub 儲存庫。
這種設計實現了 「治理與自由」 的平衡。我們維持一個高品質的推薦清單(Market),但保留了使用者輸入「自定義網址」的權利。這種結構吸引了研究者與社群愛好者自建節點,因為他們不需要寫任何一行程式碼,只需要管理自己的 walkgis.db 與 Markdown 文件。
🛠 三大技術亮點:挑戰與優雅的解決方案
1. WASM 虛擬化與環境隔離
在瀏覽器中運行 SQLite (sql.js) 是一件很重的事。為了在切換數據節點時確保絕對的「環境純淨」,我們採用了 重啟式切換 (Reload-based Switching):
當使用者點擊「連線」新節點時,我們不只是更新變數,而是透過全域標記 __WALKGIS_RELOADING__ 鎖定異步操作,隨後進行頁面重整。
這確保了重型 WASM 引擎每次都在最乾淨的內存環境下啟動,徹底避免了多節點切換時可能產生的內存溢出或索引衝突。
2. 跨網域資產的路徑映射 (Portable Assets)
當 App 放在 A 網址,資料放在 B 網址(例如 GitHub Pages),Markdown 內的相對路徑圖片會失效。
技術亮點:我們實作了一套 動態路徑解析器。不管是圖片標籤、封面圖還是 Markdown 內容,系統會自動辨識並將相對路徑重新映射至當前掛載的 baseUrl。這意味著你的內容在本地預覽與遠端掛載時,表現完全一致,具備極高的可移植性。
3. 優雅的上下文驅動架構 (Code Highlights)
這是 DataSourceContext 中處理節點切換的關鍵邏輯,展現了如何透過簡單的封裝實現複雜的節點同步:
// DataSourceContext.tsx 核心邏輯
export const DataSourceProvider: React.FC = ({ children }) => {
const setBaseUrl = (url: string) => {
// 1. 確保 URL 格式標準化
const formattedUrl = url.endsWith('/') ? url : `${url}/`;
// 2. 設置全域標記,抑制重整瞬間的異步網路錯誤回報
window.__WALKGIS_RELOADING__ = true;
// 3. 存儲選擇,並強制刷新頁面以初始化全新的 SQLite WASM 實例
localStorage.setItem('walkgis_current_source', formattedUrl);
window.location.reload();
};
return (
<DataSourceContext.Provider value={{ baseUrl, setBaseUrl }}>
{children}
</DataSourceContext.Provider>
);
};
🌟 結語:邀請您成為節點的主人
WalkGIS V2 的願景是讓地理資訊不再被壟斷。如果你有老照片、文史調查資料或社區散步路線,你不需要學習資料庫架構或前端技術,只需要:
- 下載我們的 Starter Template。
- 填入你的資料。
- 部署到 GitHub Pages。
接著,全世界的 WalkGIS 使用者都能透過這台「瀏覽器」,看見你筆下的土地記憶。
讓地理資訊的分享,像發布部落格一樣簡單。
🤖 AI 協作宣告
- 本文內容: 由 WalkGIS 網站開發過程中的 AI 協作對話紀錄轉寫而成。
- 技術實作: 文中提及的 V2 架構升級程式碼與 Prompt Engineering,皆由人類架構師引導 Antigravity 與 Google AI Studio 共同完成。