抱石路線標註與匹配 POC
透過標註照片上的岩點位置來識別和匹配抱石路線的技術驗證專案。
功能特色
- 圖片標記:在照片上點擊標記岩點位置
- 即時搜尋:標記時自動搜尋相似路線
- 路線管理:建立、查看、刪除路線
- 多圖片支援:一條路線可關聯多張照片
- 離線儲存:使用 OPFS 在瀏覽器本地儲存資料
技術棧
- React 19 + TypeScript
- Vite
- Origin Private File System (OPFS) - 瀏覽器本地儲存
- 組合匹配演算法 (MHD + DTW 順序匹配) - 對不同拍攝角度有較好容忍度
快速開始
# 安裝依賴
npm install
# 啟動開發伺服器
npm run dev
# 建置
npm run build
# 執行測試
npm test開啟 http://localhost:5173 即可使用。
使用方式
- 拍照/上傳圖片:點擊「拍照」或「上傳圖片」按鈕
- 標記岩點:在圖片上點擊標記岩點位置(建議 3-5 個點)
- 查看搜尋結果:標記時會即時顯示相似路線
- 建立新路線:若找不到匹配,點擊「建立新路線」儲存
- 加入現有路線:點擊候選路線卡片,可將照片加入該路線
專案結構
src/
├── components/ # UI 元件
│ ├── ImageMarker.tsx # 圖片標記元件
│ ├── ImageInput.tsx # 圖片輸入元件
│ ├── SearchResults.tsx # 搜尋結果列表
│ ├── RouteCard.tsx # 路線卡片
│ ├── RouteDetailModal.tsx # 路線詳情彈窗
│ ├── RouteListModal.tsx # 路線清單彈窗
│ └── CreateRouteModal.tsx # 建立路線彈窗
├── hooks/
│ └── useRoutes.ts # 路線資料管理 hook
├── lib/
│ ├── storage.ts # OPFS 儲存封裝
│ └── matching.ts # MHD 匹配演算法
├── types/
│ └── route.ts # TypeScript 型別定義
└── App.tsx # 主應用程式
技術決策
MHD 演算法
使用 Modified Hausdorff Distance 計算點集合相似度:
- 對位置偏差有良好容忍度(5-10% 偏差仍可達 100% 相似度)
- 對漏標點較敏感(漏 1-2 個點會顯著降低相似度)
多圖片搜尋策略
一條路線可有多張照片,搜尋時取與所有圖片中最高的相似度作為該路線的匹配分數。
OPFS 儲存
routes.json- 路線索引資料images/- 圖片檔案目錄
相關文件
On this page
Languages
TypeScript92.4%CSS6.7%JavaScript0.5%HTML0.3%
Contributors
MIT License
Created November 27, 2025
Updated November 29, 2025