Mastodon
Kuàn-ka

Chat with me on Mastodon

Postdoc in Physics, swimmer and lifeguard coach

more about me

Terra Incognita

2026年8月23日 22:33:49

Every map I've ever seen has the same lie on it: it shows the whole world, as if I'd been everywhere.

This one doesn't. It starts black, and only the places I've actually stood are lit.

→ Open the map

What it is

Terra incognita is what cartographers wrote on the blank parts of a map — the land past the edge of what anyone had surveyed. Sailing further was the only way to shrink it.

The map above works the same way. Fog covers everything by default. Three years of GPS traces cut corridors through it, and what's left dark is the part of the world I still haven't seen. Currently that's 99.9995% of the Earth's surface.

I built it because I wanted to know what my own answer to that number was.

Where the data comes from

Four sources, each with its own colour, each toggleable on the map:

Source Since What it gives
Google Timeline 2026-02 Everyday movement, but sparse
Garmin (open water) 2023-08 53 swims, 1 Hz, the sharpest lines on the map
Garmin (running) 2023-08 9 runs
Photo locations 2023-01 Wherever I stopped long enough to take a picture

The Garmin swim tracks are my favourite part. They're the only traces that go out to sea, and because a watch samples every second, the shape of a 3 km crossing survives intact — including the 11 km to Guishan Island that took most of one August morning.

Google Timeline is the weakest source, which surprised me. Google moved Timeline to on-device storage in 2024, so an export only contains what's currently on your phone. Mine starts the day I set up a new one.

What's been left out

This is a public page, so the data behind it isn't the data I keep for myself:

  • Timestamps are stripped. Every point has its time zeroed. You can see where I've been, not when, and not what my week looks like.
  • Home and workplace are masked. A 500 m circle around each is removed entirely, and tracks are cut at the boundary rather than drawn straight through — a line crossing an empty circle would give away more than the circle hides.
  • Coordinates are rounded to about 11 m.

The version I actually use is more precise and has a time slider. It runs on a Raspberry Pi on my own network and isn't reachable from here.

How it's made

Python for the data (Timeline JSON, Garmin FIT via garmin-fit-sdk, and a read-only query against the macOS Photos library), Leaflet and a canvas layer for the fog. The reveal is one line of Canvas API — fill everything with fog, then switch to destination-out and stroke the GPS path, which erases instead of paints.

The video is rendered with Timeline Visualizer, with the flights compressed so the swims get room to breathe.


未至之地

我看過的每張地圖都在說同一個謊:它把整個世界攤開,好像我哪裡都去過。

這張不會。它一開始是全黑的,只有我真的站過的地方會亮起來。

→ 打開地圖

這是什麼

Terra incognita 是拉丁文的「未知之地」,古地圖上畫到資料盡頭、再過去沒人測繪過的地方,製圖師就在那片空白標這幾個字。要讓它變小,唯一的辦法是自己再往前走。

上面那張地圖是同一件事。迷霧預設蓋住全部,三年的 GPS 軌跡在裡面切出走廊,剩下還是黑的就是我還沒去過的世界。目前那是地球表面的 99.9995%

會做這個,是因為我想知道自己這個數字是多少。

資料從哪來

四個來源,各有各的顏色,可以在地圖上分別開關:

來源 起自 內容
Google Timeline 2026-02 日常移動,但很稀疏
Garmin 開放水域 2023-08 53 趟,每秒一點,地圖上最銳利的線
Garmin 跑步 2023-08 9 趟
照片地點 2023-01 我停下來拍照的地方

我最喜歡游泳那部分。它們是唯一往海上延伸的軌跡,而且手錶每秒取樣一次,所以一趟三公里橫渡的形狀是完整保留下來的 —— 包含那趟花掉一整個八月早晨的龜山島 11 公里

反而 Google Timeline 是最弱的來源,這點出乎我意料。Google 在 2024 年把 Timeline 改成存在裝置上,所以匯出只會拿到手機裡現有的部分。我的資料起點就是我設定新手機那一天。

哪些東西被拿掉了

這是公開頁面,所以背後的資料不是我自己留的那份:

  • 時間戳全部抹除。 每個點的時間都歸零。你看得到我去過哪裡,但看不到什麼時候,也看不出我一週的作息。
  • 住家與工作地點被遮住。 各以 500 公尺為半徑整片移除,而且軌跡在邊界就切斷,不是直接畫過去 —— 一條穿過空白圓圈的直線,洩漏的比那個圓圈遮住的還多。
  • 座標降到約 11 公尺精度。

我自己在用的那份精度完整、還有時間軸,跑在自家網路的樹莓派上,從這裡連不到。

怎麼做的

資料處理用 Python(Timeline JSON、Garmin FIT 用 garmin-fit-sdk、macOS 照片圖庫用唯讀查詢),迷霧是 Leaflet 加一層 canvas。擦開的原理只有一行 Canvas API —— 先把整片填滿霧,再切成 destination-out 沿著 GPS 軌跡描線,於是描到哪裡就擦掉哪裡。

影片是用 Timeline Visualizer 算的,飛行段做了壓縮,讓游泳段有空間展開。