將二維的經度緯度轉化成字串
字串越長代表的精度越高 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。同理,將編碼轉換成經緯度的解碼演算法與之相反
邊緣問題:
根據上述進行,當前位置為紅點,但是黃點位於同一區域,所以最終找到的是黃點
查詢周圍八個區域的點,進行比較,選出最近的即可
geohash演算法原理
geohash的使用背景 從地理資訊學角度來來分析,在地球中緯度的區間範圍為 90,90 而經度的區間範圍為 180,180 當將指定位置經緯度獲取,轉換為geohash再與相應範圍geohash相匹配,就可以為他推薦相同geohash的相關資訊。甚至可以實現一定程度上地理座標位置的保密性。geoh...
GeoHash演算法獲取附近店鋪和距離
geohash演算法將二維經緯度座標直接轉換成字串,每乙個字串代表乙個矩形區域,也就是說,這個矩形區域內所有的點 經緯度座標 都共享相同的geohash字串,字串的長度越大,矩形的區域就越小,經度也就越高。字串相似的表示距離相近,這樣可以利用字串的字首匹配來查詢附近的poi資訊。地球緯度區間是 90...
基於GEOHASH演算法的附近點搜尋實現(一)
最近在參加學校的計算機 大賽,時間好像有點不夠,所以只完成了前面的一部分最基礎的功能,中途還是選擇了放棄。但是之前的部分的確覺得完成得還不錯,在這裡分享一下。題目是要完成乙個宇宙飛船加油點的分配排程系統。完成的部分是給定座標附近點的搜尋。我們要完成的乙個是二維附近點搜尋的演算法。就是在給出若干個加油...