GeoHash算法的學習

一、簡介

將二維的經度緯度轉化成字符串

字符串越長代表的精度越高 5位的編碼能表示10平方千米,而6位的編碼約0.34平方千米

字符串的相似表示距離的遠近。

查詢指定位置的附近的商店等,只需要將所在位置的經緯度轉化爲geohash字符串,並於各個商店的Geohash字符串進行前綴匹配,匹配越多的越接近

在這裏插入圖片描述

二、算法步驟:

地球緯度區間是[-90,90], 北海公園的緯度是39.928167,可以通過下面算法對緯度39.928167進行逼近編碼:
1)區間[-90,90]進行二分爲[-90,0),[0,90],稱爲左右區間,可以確定39.928167屬於右區間[0,90],給標記爲1;
2)接着將區間[0,90]進行二分爲 [0,45),[45,90],可以確定39.928167屬於左區間 [0,45),給標記爲0;
3)遞歸上述過程39.928167總是屬於某個區間[a,b]。隨着每次迭代區間[a,b]總在縮小,並越來越逼近39.928167;
4)如果給定的緯度x(39.928167)屬於左區間,則記錄0,如果屬於右區間則記錄1,這樣隨着算法的進行會產生一個序列
1011100,序列的長度跟給定的區間劃分次數有關。
通過上述計算,緯度產生的編碼爲10111 00011,經度產生的編碼爲11010 01011。偶數位放經度,奇數位放緯度,把2串編碼組合
生成新串:11100 11101 00100 01111。
最後使用用0-9、b-z(去掉a, i, l, o)這32個字母進行base32編碼,首先將11100 11101 00100 01111轉成十進制,對應着28、
29、4、15,十進制對應的編碼就是wx4g。同理,將編碼轉換成經緯度的解碼算法與之相反

三、問題

邊緣問題:
在這裏插入圖片描述

根據上述進行,當前位置爲紅點,但是黃點位於同一區域,所以最終找到的是黃點
查找周圍八個區域的點,進行比較,選出最近的即可
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章