geospatial地理位置
朋友的定位,附近的人,打车距离计算!
Redis的Geo在Redis3.2版本就推出了!这个功能可以推算出地理位置的信息,两地之间的距离,方圆几里的人!
可以查询一些测试数据:https://jingweidu.bmcx.com/
只有六个命令:
getadd
# getadd 添加地理位置
# 规则:两级无法直接添加,我们一般会下载城市数据,直接通过java程序一次性导入!
# 参数 key 值(经度、维度、名称)
# 有效经度为 -180 到 180 度。
# 有效纬度为 -85.05112878 到 85.05112878 度。
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.55 29.56 chongqing 114.05 22.54 shenzhen
(integer) 2
127.0.0.1:6379> geoadd china:city 120.21 30.25 hangzhou 125.15 42.93 xian
(integer) 2
getpos
获得当前定位:一定是一个坐标值!
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 chongqing
1) 1) "116.39999896287918091"
2) "39.90000009167092543"
2) 1) "106.5499994158744812"
2) "29.56000053864853072"
geodist
两人之间的距离!
单位:
- m 表示单位为米。
- km 表示单位为千米。
- mi表示单位为英里。
- ft表示单位为英尺。
georadius 已给定的经纬度为中心,找出某一半径内的元素
我附近的人?(获得所有附近人的地址,定位!)通过半径来查询!
获得指定的数量的人,200
所有的数据应该都录入:china:city ,才能让结果更加请求!
127.0.0.1:6379> geodist china:city beijing shanghai
"1067378.7564"
127.0.0.1:6379> geodist china:city beijing shanghai km
"1067.3788"
127.0.0.1:6379> geodist china:city beijing chongqing km
"1458.5492"
############################################################################################
127.0.0.1:6379> georadius china:city 110 30 1000 km # 以110,30 这个经纬度为中心,寻找方圆1000km内的城市!
1) "chongqing"
2) "shenzhen"
3) "hangzhou"
4) "xinxiangxueyuan"
127.0.0.1:6379> georadius china:city 110 30 500 km
1) "chongqing"
127.0.0.1:6379> georadius china:city 110 30 500 km withdist # 显示到中间距离的位置
1) 1) "chongqing"
2) "336.6174"
127.0.0.1:6379> georadius china:city 110 30 500 km withcoord # 显示他人的定位信息
1) 1) "chongqing"
2) 1) "106.5499994158744812"
2) "29.56000053864853072"
127.0.0.1:6379> georadius china:city 110 30 1000 km withdist withcoord count 2 # 筛选指定结果!
1) 1) "chongqing"
2) "336.6174"
3) 1) "106.5499994158744812"
2) "29.56000053864853072"
2) 1) "xinxiangxueyuan"
2) "695.2883"
3) 1) "113.94000023603439331"
2) "35.30000080530839313"
georadiusbymember
# 找出位于指定元素周围的其他元素!
127.0.0.1:6379> georadiusbymember china:city beijing 1000 km
1) "xinxiangxueyuan"
2) "beijing"
3) "xian"
127.0.0.1:6379> georadiusbymember china:city shanghai 400 km
1) "hangzhou"
2) "shanghai"
geohash 命令- 返回一个或者多个元素的Geohash表示
该命令将返回11个字符的Geohash字符串!
# 将二维的经纬度转换为一维的字符串,如果两个字符串越接近,那么距离越近!
127.0.0.1:6379> geohash china:city beijin chongqing
1) "wx4fbxxfke0"
2) "wm7b0t5r6z0"
geo 底层的实现原理其实就是Zset!我们可以使用Zset命令来操作geo!
127.0.0.1:6379> zrange china:city 0 -1 # 查看地图中全部的元素
1) "chongqing"
2) "shenzhen"
3) "hangzhou"
4) "shanghai"
5) "xinxiangxueyuan"
6) "beijing"
7) "xian"
127.0.0.1:6379> zrem china:city beijing # 移除指定元素!
(integer) 1
127.0.0.1:6379> zrange china:city 0 -1
1) "chongqing"
2) "shenzhen"
3) "hangzhou"
4) "shanghai"
5) "xinxiangxueyuan"
6) "xian"