跳轉到

Introduction

1. GeoHash 是什麼?

GeoHash 將二維的點資料轉換成一維的數據,也就是將二維的經緯度轉換成一維的字串。

img

GeoHash 的一個重要特性是,地理上相鄰的位置會有相似的 GeoHash 值。==這使得它非常適合用於進行鄰近性搜尋。==

如果你想找出所有在某個地點附近的記錄,你只需要找出該地點的 GeoHash 值,然後查詢所有與該值相似的記錄即可。

img

2. GeoHash 優點

  • 減輕運算負載:計算地理座標之間的距離需要進行複雜的數學運算,而 GeoHash 將座標編碼為字串後,只需要比較這個字串就好。

  • 搭配索引進一步優化:由於查詢是基於字串比較,因此可以使用索引來縮短查詢時間。

3. 使用 GeoHash 演算法給定點編碼

img

以點 [lat:39.928167, lng:116.389550] 為例,對該點依上述方法編碼,得到

經度產生的編碼為

img

11010 01011

緯度產生的編碼為

10111 00011

接著將 2 串編碼組合生成新字串,奇數位放經度,偶數位放緯度,得到

11100 11101 00100 01111

再對此字串進行 base32 編碼,得到

img

wx4g

4. 根據字串查詢並篩選數據

去 db 透過 like **% 快速定位數據,然後再透過距離半徑篩選所需的數據。

select * from customer_poi where geoHash like wx4g%

Reference