保持好奇心,想出問題,自己尋找答案!
1.基於空間位置的服務
網約車、附近的餐飲
經緯度坐標 —— 計算距離
先按照經緯度坐標范圍粗略篩選掉距離過遠的車輛,然后再計算進行精確篩選。
大量的時間開銷 遍歷的解法 時間復雜度高
哈希散列
經度、緯度分開處理,形成網格,並且具有層次,由高到低,代表空間范圍由大到小。
采用B樹等高效算法實現
GeoHash的思路
2.GeoHash基本原理
地理編碼算法
將地理經緯度坐標編碼為由字母和數字所構成的短字符串。
矩形網格
采用二分法不斷縮小經度和緯度的區間來進行二進制編碼,最后將經緯度分別產生的編碼奇偶位交叉合並,再用字母數字表示。
遞歸二分過程,直到所需的精度,經度得到一串二進制編碼11010 01010 11001。
緯度同理。
生成新的二進制數,它的偶數位放經度,奇數位放緯度,得到11100 11101 00100 01101 11110 00110。
使用32個數字和字母(字母去掉a、i、l、o這4個)進行32進制編碼。
每5位轉化為十進制,對應編碼。
填充曲線
Z形曲線
3.代碼實現
python-geohash
移位操作代替二分區間
4.總結
GeoHash的主要價值在於將二維的經緯度坐標信息編碼到一維的字符串中。
地理位置索引 匹配字符串
便於緩存、信息壓縮
在使用大數據工具(例如Spark)進行數據挖掘聚類時,GeoHash更加快捷高效。
Z形曲線,突變。
適當增加Geohash編碼長度,並使用周圍8個近鄰編碼參與。
參考鏈接:地理空間索引:GeoHash原理