跳至內容
Toova
所有工具

Geohash 編碼與解碼工具

注重隱私的設計 — 完全在您的瀏覽器中執行

在編碼模式輸入緯度與經度(附帶精度滑桿)即可取得 Geohash 字串;在解碼模式貼上 Geohash,即可看到中心座標與該格的西南/東北邊界。適用於空間索引、近距搜尋與位置資料的偽匿名化儲存。

Geohash 真正在編碼什麼

Geohash 把經度與緯度的位元交錯排列,再以特殊字母(0-9 與不含 a/i/l/o 的 b-z)做 base32 編碼。每個字元帶有 5 個位元的精度,在經度與緯度的細化之間交替。輸出是一個短而 URL 安全的字串,其前綴關係直接對應空間包含關係:任何以 "dr5ru" 開頭的 Geohash 都會落在名為 dr5ru 的格子內。

精度與格子大小

在精度 1 時,世界被切成 32 個約 5,000 km 寬的格子。精度 5(赤道附近約 4.9 km)適合用來進行區/街道層級的分組;精度 9(約 5 m)是單一建物的精度;精度 12 約 4 cm,只在測量級工作中才常用。靠近兩極時格子會變小。

為何使用 Geohash

字串前綴在 PostgreSQL、Redis、DynamoDB 與 SQLite 中都能高效索引。要找目標 5 km 內的點,只需計算目標的精度 5 Geohash,再用前綴搜尋就可以了,遠比大圓距離查詢便宜。邊界落差是真實存在的,所以正式管線通常也會查詢目標格的八個鄰格。Geohash 較 S2 與 H3 簡單且歷史更久,在熱門路徑的近距運算上仍是最輕量選擇。

常見問題

為什麼精度 5 就涵蓋整個城市?
每個字元 5 個位元,所以精度 5 即 25 位元,在赤道附近約 4.9 km × 4.9 km。幾公里見方的城市可放入一個格子,因此叫車、外送類應用常以精度 5 的 Geohash 來分桶,使配對更迅速。
相鄰兩點得到不同 Geohash,是錯誤嗎?
不是錯誤,是格網本身的特性。位於格邊兩側的點即便相距 1 m,前綴也可能完全不同。正式環境會同時查詢目標格與其八個鄰格(3×3 環狀)。
Geohash 使用的字母為何?
0-9 加上 b-z,但排除 a、i、l、o。排除這幾個字母是為了避免在低對比字型下與 0/1 混淆;它是以這套自訂字母的 base32,並非 RFC 4648 的 base32。
與 S2、H3 相比如何?
Geohash 是三者中最簡單也最古老的;S2 與 H3 使用球面或六角形網格,在處理極區形變上更佳但代價是更多程式碼。多數 App 等級的近距處理只要 Geohash 就夠用,行星級的導航/路由再考慮 S2/H3。
可以安全地把 Geohash 建立在 PostgreSQL 索引嗎?
可以。把 Geohash 視為 text 欄位並建立 btree 索引,前綴搜尋(LIKE 'dr5ru%')就會非常快;如需更複雜的空間查詢可加上 PostGIS,但多數情境前綴比對就已足夠。
Toova 會紀錄我輸入的座標嗎?
不會。編碼與解碼都在本頁面的 JavaScript 內完成,座標與結果 Geohash 都不會送到 Toova 伺服器。