<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ## 簡述 移動互聯網時代LBS應用越來越多,交友軟件中附近的小姐姐、外賣軟件中附近的美食店鋪、打車軟件附近的車輛等等,那這種附近各種形形色色的XX是如何實現的呢 我么你都知道地球上的地理位置是使用二維的經緯度表示,經度范圍 (-180, 180),緯度范圍 (-90, 90),只要我們確定一個點的經緯度就可以明確在地球上的位置。 redis3.2版本新增的一個功能就是對GEO(地理位置)的支持。 地理位置大概提供了6個命令,分別為: * GEOADD * GEODIST * GEOHASH * GEOPOS * GEORADIUS * GEORADIUSBYMEMBER ## 使用 ### 添加地理位置 將給定的空間元素(緯度、經度、名字)添加到指定的鍵里面 GEOADD key longitude latitude member \[longitude latitude member …\] # 如添加杭州北京上海的地理位置 127.0.0.1:6379> geoadd city 120.20000 30.26667 hangzhou 116.41667 39.91667 beijing 121.47 31.23 shanghai ### 獲取地理位置信息 從鍵里面返回所有給定位置元素的位置(經度和緯度),可以獲取集合中任意元素的經緯度坐標,可以一次獲取多個 GEOPOS key member \[member …\] ``` 127.0.0.1:6379> geopos city hangzhou beijing shanghai 1) 1) "120.15000075101852417" 2) "30.2800007575645509" 2) 1) "116.39999896287918091" 2) "39.90000009167092543" 3) 1) "121.47000163793563843" 2) "31.22999903975783553" 127.0.0.1:6379> geopos city hangzhou 1) 1) "120.15000075101852417" 2) "30.2800007575645509" ``` ### 計算距離 距離單位可以是 m、km、ml、ft,分別代表米、千米、英里和尺。如果用戶沒有顯式地指定單位參數, 那么`GEODIST`默認使用米作為單位。 GEODIST key member1 member2 \[unit\] ``` 127.0.0.1:6379> geodist city shanghai hangzhou km "164.5694" 127.0.0.1:6379> geodist city beijing hangzhou km "1122.7998" ``` >[info] `GEODIST`命令在計算距離時會假設地球為完美的球形, 在極限情況下, 這一假設最大會造成 0.5% 的誤差。 ### 獲取指定元素范圍的地理信息位置集合 使用`GEORADIUSBYMEMBER`命令即可查詢附近的位置 GEORADIUSBYMEMBER key member radius m|km|ft|mi \[WITHCOORD\] \[WITHDIST\] \[WITHHASH\] \[ASC|DESC\] \[COUNT count\] ``` # 例如查找距離杭州300km以內的城市的10個城市按距離排序 127.0.0.1:6379> GEORADIUSBYMEMBER city hangzhou 300 km WITHCOORD WITHDIST WITHHASH ASC COUNT 10 1) 1) "hangzhou" 2) "0.0000" 3) (integer) 4054134257390783 4) 1) "120.15000075101852417" 2) "30.2800007575645509" 2) 1) "shanghai" 2) "164.5694" 3) (integer) 4054803462927619 4) 1) "121.47000163793563843" 2) "31.22999903975783553" ``` * `WITHDIST`: 在返回位置元素的同時, 將位置元素與中心之間的距離也一并返回。 距離的單位和用戶給定的范圍單位保持一致。 * `WITHCOORD`: 將位置元素的經度和維度也一并返回。 * `WITHHASH`: 以 52 位有符號整數的形式, 返回位置元素經過原始 geohash 編碼的有序集合分值。 這個選項主要用于底層應用或者調試, 實際中的作用并不大。 ### 獲取元素的 hash 值 返回的其實是元素的經緯度經過goehash計算后的base32編碼字符串。可以通過連接 http://geohash.org/${hash}中進行直接定位,它是 geohash 的標準編碼值。 ``` 127.0.0.1:6379> geohash city hangzhou 1) "wtmkq069cc0" 127.0.0.1:6379> geohash city beijing 1) "wx4fbxxfke0" ``` ## 原理 ### 存儲結構 其存儲結構主要使用的是Redis的有序結構,其score是GeoHash的52位整數值 ``` 127.0.0.1:6379> ZRANGE city 0 -1 WITHSCORES 1) "hangzhou" 2) "4054134257390783" 3) "shanghai" 4) "4054803462927619" 5) "beijing" 6) "4069885360207904" ``` ### 原理 其原理比較容易理解,核心思想就是將球體轉換為球面,區塊轉換為一點 ![](https://box.kancloud.cn/8c750e87e0e355d532a08469de902264_428x327.png) 主要分為三步 * 將三維的地球變為二維的坐標 * 在將二維的坐標轉換為一維的點塊, 并進行標記 * 最后將一維的點塊轉換為二進制在通過base32編碼(比如wtmkq069cc0) * 在標記的點塊中找到w塊,在w塊中找到t塊,在t塊中找到m塊..... 詳細原理解析可以參考這邊文章[GeoHash核心原理解析](https://blog.csdn.net/dongdongzzcs/article/details/50389022) ## 其他Geo處理 目前很多數據存儲引擎都支持Geo的處理,如MongoDB、MySql、PgSql、Elasticsearch等等。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看