redis geo 地理位置系应用战案例
admin
2023-01-27 23:59:59
0

专有名词
geographic 地理
radius 半径范围; 半径(距离); 用半径度量的圆形面积

redis GEO实现

redis GEO实现主要包含了以下两项技术:

1、使用geohash保存地理位置的坐标。
2、使用有序集合(sort set)保存地理位置的集合。(重点:基于sort set存储)

redis GEO 方法列表

  1. geoadd

含义:

将指定的地理空间位置(纬度、经度、名称)添加到指定的key中。

语法:

GEOADD key longitude latitude member [longitude latitude member]

实现:

geoadd city_clusters 116.405285 39.904989 beijing  121.472644 31.231706 shanghai
  1. geopos

含义:

从key里返回所有给定位置元素的位置(经度和纬度)

语法:

GEOPOS key member [member ...]

实现:

127.0.0.1:6379> geopos city_clusters beijing shanghai
1) 1) "116.40528291463851929"
   2) "39.9049884229125027"
2) 1) "121.47264629602432251"
   2) "31.23170490709807012"
  1. geodist

含义:

返回两个给定位置之间的距离。
备注:
指定单位的参数 unit 必须是以下单位的其中一个:
m 表示单位为米。
km 表示单位为千米。
mi 表示单位为英里。
ft 表示单位为英尺。
如果用户没有显式地指定单位参数, 那么 GEODIST 默认使用米作为单位。

语法:

GEODIST key member1 member2 [unit]

实现:

127.0.0.1:6379> geodist city_clusters beijing shanghai km
"1067.5980"
127.0.0.1:6379> geodist city_clusters beijing shanghai
"1067597.9668"
  1. geohash

含义:

返回一个或多个位置元素的 Geohash 表示。
作用:将二维的经纬度转换成字符串。

语法:

GEOHASH key member [member ...]

实现:

127.0.0.1:6379> geohash city_clusters beijing
1) "wx4g0b7xrt0"
127.0.0.1:6379> geohash city_clusters beijing shanghai
1) "wx4g0b7xrt0"
2) "wtw3sjt9vg0"
  1. georadius

含义:

以给定的经纬度为中心, 返回键包含的位置元素当中, 与中心的距离不超过给定最大距离的所有位置元素。
备注:
范围可以使用以下其中一个单位:
m 表示单位为米。
km 表示单位为千米。
mi 表示单位为英里。
ft 表示单位为英尺。
在给定以下可选项时, 命令会返回额外的信息:
WITHDIST: 在返回位置元素的同时, 将位置元素与中心之间的距离也一并返回。 距离的单位和用户给定的范围单位保持一致。
WITHCOORD: 将位置元素的经度和维度也一并返回。
WITHHASH: 以 52 位有符号整数的形式, 返回位置元素经过原始 geohash 编码的有序集合分值。 这个选项主要用于底层应用或者调试, 实际中的作用并不大。

COUNT限定返回的记录数

命令默认返回未排序的位置元素。 通过以下两个参数, 用户可以指定被返回位置元素的排序方式:
ASC: 根据中心的位置, 按照从近到远的方式返回位置元素。
DESC: 根据中心的位置, 按照从远到近的方式返回位置元素。

语法:

GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]

实现:

 georadius city_clusters 114.546569 30.496705 1000 km withdist withcoord withhash  count 3 asc  
1) 1) "wuhan"
   2) "0.0002"
   3) (integer) 4051940381831537
   4) 1) "114.54657107591629028"
      2) "30.49670420836107354"
2) 1) "ezhou"
   2) "34.4580"
   3) (integer) 4051965036178493
   4) 1) "114.88938957452774048"
      2) "30.40377626121739496"
3) 1) "shanghai"
   2) "666.1872"
   3) (integer) 4054803464817068
   4) 1) "121.47264629602432251"
      2) "31.23170490709807012
  1. georadiusbymember

含义:

和 GEORADIUS 命令一样, 都可以找出位于指定范围内的元素, 但是 GEORADIUSBYMEMBER 的中心点是由给定的位置元素决定的, 而不是像 GEORADIUS 那样, 使用输入的经度和纬度来决定中心点
备注:
同georadius

语法:

GEORADIUSBYMEMBER key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count]

实现:

 georadiusbymember city_clusters ezhou 1000 km withcoord withdist withhash count 10 asc
1) 1) "ezhou"
   2) "0.0000"
   3) (integer) 4051965036178493
   4) 1) "114.88938957452774048"
      2) "30.40377626121739496"
2) 1) "wuhan"
   2) "34.4578"
   3) (integer) 4051940381831537
   4) 1) "114.54657107591629028"
      2) "30.49670420836107354"
3) 1) "shanghai"
   2) "635.4470"
   3) (integer) 4054803464817068
   4) 1) "121.47264629602432251"
      2) "31.23170490709807012"

相关内容

热门资讯

【第一消息】“,728土豪版.... 【第一消息】“,728土豪版.怎么开挂?”详细开挂教程您好,,728土豪版这个游戏其实有挂的,确实是...
重磅消息“白金岛.可以开挂吗?... 您好:白金岛这款游戏可以开挂,确实是有挂的,需要了解加客服微信【9752949】很多玩家在这款游戏中...
今日重大发现“新蓝鲸.怎么装挂... 网上科普关于“新蓝鲸有没有挂”话题很是火热,小编也是针对新蓝鲸作*弊开挂的方法以及开挂对应的知识点,...
最新引进“大庆划水麻将.怎么装... 网上科普关于“大庆划水麻将有没有挂”话题很是火热,小编也是针对大庆划水麻将作*弊开挂的方法以及开挂对...
【第一资讯】“白金岛游戏.可以... 【第一资讯】“白金岛游戏.可以开挂吗?”太坑了原来有挂您好,白金岛游戏这个游戏其实有挂的,确实是有挂...
终于了解“微乐南昌麻将.开挂神... 有 亲,根据资深记者爆料微乐南昌麻将是可以开挂的,确实有挂(咨询软件无需...
今日重大通报“西兵互娱.真的有... 您好:西兵互娱这款游戏可以开挂,确实是有挂的,需要了解加客服微信【9784099】很多玩家在这款游戏...
今日重大消息“红豆炸金花.开挂... 网上科普关于“红豆炸金花有没有挂”话题很是火热,小编也是针对红豆炸金花作*弊开挂的方法以及开挂对应的...
重磅消息“喜扣游戏.开挂神器?... 网上科普关于“喜扣游戏有没有挂”话题很是火热,小编也是针对喜扣游戏作*弊开挂的方法以及开挂对应的知识...
玩家攻略科普“威信娱乐.怎么开... 您好:威信娱乐这款游戏可以开挂,确实是有挂的,需要了解加客服微信【4282891】很多玩家在这款游戏...