官方文档 :https://www.redis.net.cn/order/3685.html
- # geoadd 添加地理位置
- # 规则:两级无法直接添加,我们一般会下载城市数据,直接通过java程序一次性导入!
- # 有效的经度从-180度到180度。
- # 有效的纬度从-85.05112878度到85.05112878度。
- # 当坐标位置超出上述指定范围时,该命令将会返回一个错误。
- # 127.0.0.1:6379> geoadd china:city 39.90 116.40 beijin (error)
- # ERR invalid longitude,latitude pair 39.900000,116.400000
-
- # 参数 key 值()
- 127.0.0.1:6379> geoadd china:city 116.40 39.90 beijing
- (integer) 1
- 127.0.0.1:6379> geoadd china:city 121.47 31.23 shanghai
- (integer) 1
- 127.0.0.1:6379> geoadd china:city 106.50 29.53 chongqi 114.05 22.52 shengzhen
- (integer) 2
- 127.0.0.1:6379> geoadd china:city 120.16 30.24 hangzhou 108.96 34.26 xian
- (integer) 2
获得当前定位:一定是一个坐标值!
- 127.0.0.1:6379> GEOPOS china:city beijing # 获取指定的城市的经度和纬度!
- 1) 1) "116.39999896287918091"
- 2) "39.90000009167092543"
- 127.0.0.1:6379> GEOPOS china:city beijing chongqi
- 1) 1) "116.39999896287918091"
- 2) "39.90000009167092543"
- 2) 1) "106.49999767541885376"
- 2) "29.52999957900659211"
两坐标之间的距离!
m 表示单位为米。
km 表示单位为千米。
mi 表示单位为英里。
ft 表示单位为英尺
- 127.0.0.1:6379> GEODIST china:city beijing shanghai km # 查看上海到北京的直线距离
- "1067.3788"
- 127.0.0.1:6379> GEODIST china:city beijing chongqi km # 查看重庆到北京的直线距离
- "1464.0708"
以给定的经纬度为中心, 找出某一半径内的元素。
我附近的人? (获得所有附近的人的地址,定位!)通过半径来查询! 获得指定数量的人,200 所有数据应该都录入:china:city ,才会让结果更加请求!
- 127.0.0.1:6379> GEORADIUS china:city 110 30 1000 km # 以110,30 这个经纬度为中心,寻 找方圆1000km内的城市
- 1) "chongqi"
- 2) "xian"
- 3) "shengzhen"
- 4) "hangzhou"
- 127.0.0.1:6379> GEORADIUS china:city 110 30 500 km
- 1) "chongqi"
- 2) "xian"
- 127.0.0.1:6379> GEORADIUS china:city 110 30 500 km withdist # 显示到中间距离的位置
- 1) 1) "chongqi"
- 2) "341.9374"
- 2) 1) "xian"
- 2) "483.8340"
- 127.0.0.1:6379> GEORADIUS china:city 110 30 500 km withcoord # 显示他人的定位信息
- 1) 1) "chongqi"
- 2) 1) "106.49999767541885376"
- 2) "29.52999957900659211"
- 2) 1) "xian"
- 2) 1) "108.96000176668167114"
- 2) "34.25999964418929977"
- 127.0.0.1:6379> GEORADIUS china:city 110 30 500 km withdist withcoord count 1 # 筛选出指定的结果!
- 1) 1) "chongqi"
- 2) "341.9374"
- 3) 1) "106.49999767541885376"
- 2) "29.52999957900659211"
- 127.0.0.1:6379> GEORADIUS china:city 110 30 500 km withdist withcoord count 2
- 1) 1) "chongqi"
- 2) "341.9374"
- 3) 1) "106.49999767541885376"
- 2) "29.52999957900659211"
- 2) 1) "xian"
- 2) "483.8340"
- 3) 1) "108.96000176668167114"
- 2) "34.25999964418929977"
找出位于指定元素周围的其他元素!
- # 找出位于指定元素周围的其他元素!
- 127.0.0.1:6379> GEORADIUSBYMEMBER china:city beijing 1000 km
- 1) "beijing"
- 2) "xian"
- 127.0.0.1:6379> GEORADIUSBYMEMBER china:city shanghai 400 km
- 1) "hangzhou"
- 2) "shanghai"
- # 将二维的经纬度转换为一维的字符串,如果两个字符串越接近,那么则距离越近!
- 127.0.0.1:6379> geohash china:city beijing chongqi
- 1) "wx4fbxxfke0"
- 2) "wm5xzrybty0"
GEO 底层的实现原理其实就是 Zset!我们可以使用Zset命令来操作geo!
- 127.0.0.1:6379> ZRANGE china:city 0 -1 # 查看地图中全部的元素
- 1) "chongqi"
- 2) "xian"
- 3) "shengzhen"
- 4) "hangzhou"
- 5) "shanghai"
- 6) "beijing"
- 127.0.0.1:6379> zrem china:city beijing # 移除指定元素! (integer) 1
- 127.0.0.1:6379> ZRANGE china:city 0 -1
- 1) "chongqi"
- 2) "xian"
- 3) "shengzhen"
- 4) "hangzhou"
- 5) "shanghai"