Geohash 介紹

MING
Feb 6, 2022

geohash是一種具有分層級的編碼,能夠將空間經緯度編碼成二進位的字串。Geohash的產生是根據Z-order curve的方式產生,這樣的特性讓查詢上可以透過hash編碼的前綴來加快空間搜尋速度。geohash能提供任意精度的分級,主要可以分成12級別。

一般來說geohash中偶數位放經度、奇數位放緯度,可以透過下圖來理解如何切割以及分類。

(取自GitHub — stephenlb/geohash-chat-by-proximity: Geo Hashing Chat by Proximity to connect two or more users to a group chat.)

Z-order curve(Z曲線)的分類方式,一個Z結束後,尾端會去連結下一個Z的開頭(如下圖)。這種分類方式常見於各類型地圖中,如電子海圖( Electronic Navigational Charts)等圖幅分類皆是使用Z曲線。

二維 Z-order curve
Z-order curve

geohash每個層級網格的解析度大致上如下:
5,009.4km x 4,992.6km
1,252.3km x 624.1km
156.5km x 156km
39.1km x 19.5km
4.9km x 4.9km
1.2km x 609.4m
152.9m x 152.4m
38.2m x 19m
4.8m x 4.8m
1.2m x 59.5cm
14.9cm x 14.9cm
3.7cm x 1.9cm

如上12個層級網格,代表geohash表示並非為一個點(point),而是表示一個矩形區域,可以藉由此方式提供一個較為粗略精度的位置,保護自己位置的隱私。

以下兩隻影片蠻適合做為學習

geohash的使用可以搭配python,並透過geopandas等對於地理空間支援的資料庫進行搭配,這篇就先介紹到這篇,有機會應該會再持續介紹python搭配geohash。

安裝方式如下:

使用anaconda的安裝方式conda install python-geohash

使用pip:pip install python-geohash

--

--

MING

東京大學大學院申請上沒念完,政府部門公務員也選擇離開,目前在離岸風電外商做地理資料分析顧問。閒暇時,會寫些關於碰到技術的文章以及自己過去經歷。