redis中的 geospatial(地理位置)使用

geospatial(地理位置)

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

Redis的Geo在Redis3.2版本就推出了!这个功能可以推算地理位置的信息,俩地之间的距离,方圆几里的人!

redis中的 geospatial(地理位置)使用

官方文档:http://www.redis.net.cn/order/3685.html

getadd

# getadd
# 规则:俩极无法添,我们一般会下载城市数据,直接通过java程序一次性导入!
# 参数 key 值(纬度,经度,名称)!经纬度写错会报以下错误。
#(error) ERR invalid longitude,latitude pair 39.900000,116.400000
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 chongqin 114.05 22.52 shengzhen
(integer) 2
127.0.0.1:6379> Geoadd china:city 120.16 30.24 hangzhou
(integer) 1
127.0.0.1:6379> Geoadd china:city 108.96 34.26 xian
(integer) 1

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 chongqin
1) 1) "116.39999896287918091"
   2) "39.90000009167092543"
2) 1) "106.49999767541885376"
   2) "29.52999957900659211"

geodist

俩人之间的距离!

单位:

  • m 表示单位为米。
  • km 表示单位为千米。
  • mi 表示单位为英里。
  • ft 表示单位为英尺。
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"

redis中的 geospatial(地理位置)使用

由于定位问题,但是我们也可以看到大致距离相差不大。

georadius 以指定的经纬度为中心,找出某一半径的元素

找附近的人?(获取所有附近的人的地址,定位!)通过半径来查询!

获得指定数量的人,200

所有数据应该都录入:china:city,才会让结果更加请求!

127.0.0.1:6379> GEORADIUS china:city 110 30 1000 km     # 以100 30这个经纬度为中心,寻找1000km内的城市
1) "chongqin"
2) "xian"
3) "shengzhen"
4) "hangzhou"
127.0.0.1:6379> GEORADIUS china:city 110 30 500 km
1) "chongqin"
2) "xian"
127.0.0.1:6379> GEORADIUS china:city 110 30 500 km withdist     #显示到中间距离的位置
1) 1) "chongqin"
   2) "341.9374"
2) 1) "xian"
   2) "483.8340"
127.0.0.1:6379> GEORADIUS china:city 110 30 500 km withcoord    #显示他人的定位信息
1) 1) "chongqin"
   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) "chongqin"
   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) "chongqin"
   2) "341.9374"
   3) 1) "106.49999767541885376"
      2) "29.52999957900659211"
2) 1) "xian"
   2) "483.8340"
   3) 1) "108.96000176668167114"
      2) "34.25999964418929977"

GEORADIUSBYMEMBER

#找出位于指定元素周围的其他元素!
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"

GEO 底层的实现原理就是Zset

127.0.0.1:6379> ZRANGE china:city 0 -1      #查看地图中全部元素
1) "chongqin"
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) "chongqin"
2) "xian"
3) "shengzhen"
4) "hangzhou"
5) "shanghai"
上一篇:android-哪种方法更好地获得方向?


下一篇:使用Sequelize和MySQL的地理空间距离计算器