Introduction
1. GeoHash 是什麼?
GeoHash 將二維的點資料轉換成一維的數據,也就是將二維的經緯度轉換成一維的字串。
GeoHash 的一個重要特性是,地理上相鄰的位置會有相似的 GeoHash 值。==這使得它非常適合用於進行鄰近性搜尋。==
如果你想找出所有在某個地點附近的記錄,你只需要找出該地點的 GeoHash 值,然後查詢所有與該值相似的記錄即可。
2. GeoHash 優點
-
減輕運算負載:計算地理座標之間的距離需要進行複雜的數學運算,而 GeoHash 將座標編碼為字串後,只需要比較這個字串就好。
-
搭配索引進一步優化:由於查詢是基於字串比較,因此可以使用索引來縮短查詢時間。
3. 使用 GeoHash 演算法給定點編碼
以點 [lat:39.928167, lng:116.389550] 為例,對該點依上述方法編碼,得到
經度產生的編碼為
11010 01011
緯度產生的編碼為
10111 00011
接著將 2 串編碼組合生成新字串,奇數位放經度,偶數位放緯度,得到
11100 11101 00100 01111
再對此字串進行 base32 編碼,得到
wx4g
4. 根據字串查詢並篩選數據
去 db 透過 like **% 快速定位數據,然後再透過距離半徑篩選所需的數據。
select * from customer_poi where geoHash like wx4g%