Redis(五)geospatial的用法

geospatial 地理空间

朋友的定位,附近的人,打车距离的计算

Redis的Geo,3.2版本推出,可以推算地理位置的信息,两地之间的距离

城市经纬度查询:http://www.jsons.cn/lngcode/

geoadd

# geoadd   先经度后维度(官方文档疑似写错了)
127.0.0.1:6379[1]> geoadd china:city 39.9 116.4 beijing
(error) ERR invalid longitude,latitude pair 39.900000,116.400000
经纬度反了会报错
# 两极无法直接添加!南北极,而且我们一般会下载城市数据通过java程序一次性导入
127.0.0.1:6379[1]> geoadd china:city 116.4 39.9 beijing
# 批量 geoadd china:city 116.4 39.9 beijing 121.4 31.2 shanghai 114.1 22.5 shenzhen 113.3 23.1 guangzhou 114.2 22.3 xianggang 113.5 22.2 aomen 121.9 29.5 xiangshan
(integer) 1
127.0.0.1:6379[1]> geoadd china:city 121.4 31.2 shanghai
(integer) 1
127.0.0.1:6379[1]> geoadd china:city 114.1 22.5 shenzhen
(integer) 1
127.0.0.1:6379[1]> geoadd china:city 113.3 23.1 guangzhou
(integer) 1
127.0.0.1:6379[1]> geoadd china:city 114.2 22.3 xianggang
(integer) 1
127.0.0.1:6379[1]> geoadd china:city 113.5 22.2 aomen
(integer) 1
127.0.0.1:6379[1]> geoadd china:city 121.9 29.5 xiangshan
(integer) 1

geopost

# 获取地理位置
127.0.0.1:6379[1]> GEOPOS china:city beijing shanghai shenzhen xianggang
1) 1) "116.39999896287918091"
2) "39.90000009167092543"
2) 1) "121.40000134706497192"
2) "31.20000061483705878"
3) 1) "114.09999936819076538"
2) "22.50000113800319212"
4) 1) "114.19999748468399048"
2) "22.29999896492555678"

geodist

两人之间的直线距离

  • m 表示单位为米。
  • km 表示单位为千米。
  • mi 表示单位为英里。
  • ft 表示单位为英尺。
127.0.0.1:6379[1]> GEODIST china:city beijing xianggang
"1968579.6084"
127.0.0.1:6379[1]> GEODIST china:city beijing xianggang m
"1968579.6084"
127.0.0.1:6379[1]> GEODIST china:city beijing xianggang km
"1968.5796"
127.0.0.1:6379[1]> GEODIST china:city beijing xianggang ft
"6458594.5159"
127.0.0.1:6379[1]> GEODIST china:city beijing xianggang mi
"1223.2217"

georadius

以给定的经纬度为中心,找出某一半径内所有的元素

实现附近的人:

1、获取所有附近的人的地址(GPS)

# 范围查找  经度110 纬度 30为圆心 半径100km内所有的城市
127.0.0.1:6379[1]> GEORADIUS china:city 110 30 100 km
(empty list or set)
# 范围查找  经度110 纬度 30为圆心 半径1000km内所有的城市
127.0.0.1:6379[1]> GEORADIUS china:city 110 30 1000 km
1) "aomen"
2) "xianggang"
3) "shenzhen"
4) "guangzhou"
# 范围查找  经度110 纬度 30为圆心 半径100km内所有的城市 带上经纬度和城市距离该点的直线距离
127.0.0.1:6379[1]> GEORADIUS china:city 110 30 1000 km withcoord withdist
1) 1) "aomen"
   2) "935.1758"
   3) 1) "113.49999994039535522"
      2) "22.19999914574732003"
2) 1) "xianggang"
   2) "953.3433"
   3) 1) "114.19999748468399048"
      2) "22.29999896492555678"
3) 1) "shenzhen"
   2) "928.8366"
   3) 1) "114.09999936819076538"
      2) "22.50000113800319212"
4) 1) "guangzhou"
   2) "834.6077"
   3) 1) "113.29999834299087524"
      2) "23.10000005307264104"
# count 控制个数
127.0.0.1:6379[1]> GEORADIUS china:city 110 30 1000 km withcoord withdist count 2
1) 1) "guangzhou"
   2) "834.6077"
   3) 1) "113.29999834299087524"
      2) "23.10000005307264104"
2) 1) "shenzhen"
   2) "928.8366"
   3) 1) "114.09999936819076538"
      2) "22.50000113800319212"
 # GEORADIUSBYMEMBER 根据给定的元素确定中心点,再进行查找
127.0.0.1:6379[1]> GEORADIUSBYMEMBER china:city shanghai 1000 km withdist
1) 1) "xiangshan"
   2) "195.0791"
2) 1) "shanghai"
   2) "0.0000"
127.0.0.1:6379[1]> GEORADIUSBYMEMBER china:city shanghai 2000 km withdist
1) 1) "aomen"
   2) "1271.1657"
2) 1) "xianggang"
   2) "1220.4023"
3) 1) "shenzhen"
   2) "1207.9869"
4) 1) "guangzhou"
   2) "1205.0747"
5) 1) "xiangshan"
   2) "195.0791"
6) 1) "shanghai"
   2) "0.0000"
7) 1) "beijing"
   2) "1067.7424"
   
   # GEOHASH 将二维的经纬度转换为一维的字符串,经过hash之后的结果
   #
   #     如果两个字符串越像,则代表越接近!
   #
127.0.0.1:6379[1]> GEOHASH china:city beijing shanghai
1) "wx4fbxxfke0"
2) "wtw36xbc1j0"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值