GeoHash -------寻找附近人
增加
geoadd 指令攜帶集合名稱以及多個經緯度名稱三元組,注意這?可以加?多個三元組 127.0.0.1:6379> geoadd company 116.48105 39.996794 juejin (integer) 1 127.0.0.1:6379> geoadd company 116.514203 (error) ERR wrong number of arguments for 'geoadd' command 127.0.0.1:6379> geoadd company 116.514203 39.905409 ireader (integer) 1 127.0.0.1:6379> geoadd company 116.489033 40.007669 meituan (integer) 1 127.0.0.1:6379> geoadd company 116.562108 39.787602 jd 116.334255 40.027400 xiaomi (integer) 2 也許你會問為什么 Redis 沒有提供 geo 刪除指令?前?我們提到 geo 存儲結構上使?的是 zset,意味著我們可以使? zset 相關的 指令來操作 geo 數據,所以刪除指令可以直接使? zrem 指令即 可。距離
geodist 指令可以?來計算兩個元素之間的距離,攜帶集合名稱、2個名稱和距離單位。距離單位可以是m、km、ml、ft,分別代表?、千?、英?和尺。 127.0.0.1:6379> geodist company juejin ireader km "10.5501" 127.0.0.1:6379> geodist company juejin meituan km "1.3878" 127.0.0.1:6379> geodist company juejin xiaomi km "12.9606"獲取元素位置
geopos 指令可以獲取集合中任意元素的經緯度坐標,可以?次獲取多個。 127.0.0.1:6379> geopos company juejin 1) 1) "116.48104995489120483"2) "39.99679348858259686" 127.0.0.1:6379> geopos company juejin ireader 1) 1) "116.48104995489120483"2) "39.99679348858259686" 2) 1) "116.5142020583152771"2) "39.90540918662494363"獲取元素的 hash 值
geohash 可以獲取元素的經緯度編碼字符串,上?已經提到,它是base32 編碼。你可以使?這個編碼值去 http://geohash.org/${hash}中進?直接定位,它是 geohash 的標準編碼值。geohash計算過程依據上述原理,接下來詳細介紹一下geohash的計算過程,這里拿經緯度(116.389550, 39.928167)進行算法說明。
a. 緯度計算
中學學過的地理知識知道,地球分為南緯與北緯,分別都是0~90°,但是在計算機中,用文字定義南緯與北緯較為麻煩,所以計算機中用區間定義[-90,0)與[0,90]分為南北緯,同時叫做左右區間。區分了左右區間,接下來就是整個計算過程:
判斷當前緯度39.928167是在左區間還是右區間,發現是在右區間[0,90]中,在右區間標識為1;接著將區間[0,90]進行左右區間二分,二分后為 [0,45),[45,90],可以確定39.928167屬于左區間 [0,45),標記為0;不斷重復上述過程39.928167總是屬于某個區間[a,b]。隨著每次迭代區間[a,b]總在縮小,并越來越逼近39.928167;依據最大精度,定義一個最大重復次數,這里我們定義為15,這樣就能得出一個01字串;
b. 全局計算
經度計算與緯度計算類似,也是依據區間劃分,左右判斷來進行,這里就不在復述了,給出最終計算結果為:1 1 0 1 0 0 1 0 1 1 0 0 0 1 0,接下來就是如何通過經度與緯度的01字串,編碼成相應的字母+數字的組合。將經度與緯度的01字串進行合并,合并方法為:基數為放緯度,偶數位放經度
- 最終字串為:11011, 01110, 00010, 01111, 00001, 00100
- 將字串轉換成十進制,得到:27, 14, 2, 15, 1, 4
- 對應base32編碼表
轉載于:https://www.cnblogs.com/hanmengya/p/10967457.html
總結
以上是生活随笔為你收集整理的GeoHash -------寻找附近人的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 5 dex文件
- 下一篇: SonarQube 代码扫描任务集成