# GPX & FIT Viewer

> 在瀏覽器直接打開 GPX 或 FIT 運動紀錄：看路線形狀、爬升、心率和功率圖表，一鍵把 FIT 轉成 GPX 或 CSV。檔案完全不會上傳，也不載入地圖圖磚，路線在哪裡只有你知道。

- URL: https://bytescope.dev/zh-Hant/gpx-viewer/
- Locale: zh-Hant · Also: [en](https://bytescope.dev/en/gpx-viewer.md) · [ja](https://bytescope.dev/ja/gpx-viewer.md)
- Runs: GPX 和 FIT 檔都在你電腦的瀏覽器 worker 裡解析——不上傳、不用登入，也不會向任何地圖圖資服務發出請求，所以路線在哪裡只有你知道。
- Requires: Any modern browser (Chrome, Edge, Firefox, Safari), desktop and mobile.
- Updated: 2026-09-08

## What it does

運動手錶和自行車碼錶錄下來的是 `.fit`，但多數路線網站和 app 只收 `.gpx`。不管哪一種，把檔案拖到這裡就會直接在頁面裡解析：先看摘要——距離、總時間、移動時間、爬升與下降、平均和最高速度（或配速）、心率、功率、錄製的裝置——接著是依比例畫出的軌跡（附比例尺和北方箭頭），還有高度、速度、心率、踏頻、功率、溫度的圖表，檔案裡有哪些就畫哪些。可以一次拖進好幾個檔，從左邊清單切換。

所有東西都留在你的瀏覽器裡。GPS 軌跡等於一本「你什麼時候在哪裡」的日記，只是想看一眼，實在不必交給任何伺服器。解析在你電腦上的 Web Worker 裡跑，頁面沒有上傳端點，關掉分頁就什麼都不留。這也是為什麼軌跡畫在空白背景上、不疊地圖：只要向地圖圖磚服務要底圖，對方就會收到你路線所在的那一塊區域。

### FIT 轉 GPX、轉 CSV

FIT 轉 GPX 會產出 GPX 1.1 軌跡，心率、踏頻、溫度寫進 Garmin 的 `TrackPointExtension`，Strava、Komoot、Garmin Connect 和大多數路線工具都讀得懂。GPX 沒有地方放分圈、裝置事件、developer fields，以及裝置自己量的速度和距離，這些會被丟掉，頁面會把丟掉的欄位逐一列出來。功率在 GPX 裡沒有標準欄位，勾選後會寫成非標準的 `<power>`，預設不勾，因為加了它檔案就過不了 schema 驗證。FIT 和 GPX 也都能匯出 CSV——每個紀錄點一列，單位直接寫在欄名裡（`ele_m`、`speed_mps`、`hr_bpm`），旁邊有連結可以直接在 CSV Explorer 打開。

### 數字是怎麼算的

爬升和下降只計入「跟上一個計入點相差至少 3 公尺」的高度變化，GPS 的抖動才不會累積成一座山；Strava 和 Garmin Connect 各有自己的平滑方式和高度來源，所以總數對不上是正常的。移動時間只累計相鄰兩點之間速度至少 0.5 m/s 的秒數。距離在檔案允許時會給兩個：裝置記錄的（輪徑感測器或它自己過濾過的 GPS），以及原始座標逐點加總出來的。

### 解析器老實承認看不懂的部分

FIT 檔裡有各廠商的私有訊息，只有原廠軟體看得懂。進階區塊會列出每種訊息的筆數和欄位名稱、developer fields 的名稱和單位，以及看不懂的訊息編號——不會假裝解讀。某一筆資料壞掉不會害整個檔案被丟掉：解析成功的點照常顯示，下方標出略過了幾筆。FIT 的時間存的是 UTC，顯示時用你瀏覽器的時區並附上 UTC 值；GPX 的時間若既沒有 `Z` 結尾、也沒有 `+08:00` 這類時差，會標「時區不明」而不是亂猜。

## Limits

Does not load a map under the track, trim a privacy zone or read TCX files; it views and converts GPX and FIT files.

## FAQ

### 我的 GPX 或 FIT 檔會被上傳嗎？

不會。檔案直接從你的磁碟讀進來，在頁面裡的 Web Worker 解析；摘要、軌跡、圖表和轉出來的檔案全部在本機產生。沒有伺服器、不用帳號，也不會向任何地圖服務要圖磚，所以路線在哪裡沒人知道。

### 為什麼爬升跟 Strava 或 Garmin Connect 不一樣？

因為爬升本來就沒有唯一正確答案。每個平台各自挑高度來源——檔案裡的氣壓計數值，或是用座標查地形模型——也各自平滑。這個頁面用檔案裡的高度，變化累積到跟上一個計入點相差 3 公尺才算一次，規則就寫在頁面上，方便你拿同樣的基準比。跟其他平台對不上是正常的，不是壞掉。

### FIT 轉 GPX 會丟掉什麼？

分圈、裝置事件（暫停、按鍵）、Connect IQ app 的 developer fields、裝置自己量的速度和距離，還有功率（除非你勾選非標準選項）。心率、踏頻、溫度、高度和時間會留在 Garmin 的 `TrackPointExtension` 裡。頁面會針對你打開的檔案列出被丟掉的欄位，如果其中有你在意的，原始 `.fit` 要留著。

### 為什麼軌跡下面沒有地圖？

刻意的。要在路線下面畫出道路，就得向圖磚伺服器要你所在的那塊區域，等於把你家、公司或固定練車路線的位置交給第三方。所以軌跡改成依比例畫在空白畫布上，附比例尺和北方箭頭——要認出路線形狀、找出 GPS 飄掉的那一段已經夠用了。

### 裁掉起點附近的點，Strava 就一定看不到我家嗎？

不一定，而且這個版本目前根本不做裁切（排在之後的階段）。就算真的裁了也不保證：平台還是看得到時間、你出發的方向、資料開始的那個點，再跟你其他活動一比對就能推回去。比較可靠的做法是用平台自己的隱私區域功能（Strava、Garmin Connect、Komoot 都有），它會對其他使用者隱藏那一塊，你自己的統計數字不受影響。

### 為什麼距離有兩個數字？

一個是裝置記錄的，通常來自輪徑感測器或它自己過濾過的 GPS；另一個是把原始座標逐點加起來。騎車時輪徑感測器比較準，低速時 GPS 抖動則會把座標加總灌水。兩個都給，你就知道上傳的平台會比較接近哪一個。

### 轉 GPX 時該勾「包含功率」嗎？

只有在你確定要匯入的工具讀得懂時才勾。GPX 沒有標準的功率欄位，這裡寫出的 `<power>` 落在 GPX 自己的命名空間裡，嚴格的驗證器會直接拒收。要上傳 Strava 或大多數路線規劃工具就別勾；真的需要功率，改匯出 CSV 或留著 `.fit`。

### 手錶的 FIT 檔在別的地方打不開，裡面到底有什麼？

拖進來後捲到進階區塊。那裡列出每種訊息的筆數和欄位、developer fields 的名稱和單位，以及解析器看不懂的廠商私有訊息編號。就算檔案有一部分損壞，解析成功的點照樣顯示，下方會標出略過了幾筆。

## Related tools

- [CSV Explorer](https://bytescope.dev/zh-Hant/csv-explorer.md) — 把匯出的 CSV 當表格打開，排序、篩選，還能用 SQL 查詢。
- [Remove EXIF](https://bytescope.dev/zh-Hant/remove-exif.md) — 分享照片前，先把 GPS 座標和其他 metadata 清掉。
- [File Type Identifier](https://bytescope.dev/zh-Hant/file-type.md) — 不確定這是什麼檔？從位元組內容判斷，不看副檔名。
