博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
redis geo 地理位置系应用战案例
阅读量:5831 次
发布时间:2019-06-18

本文共 2991 字,大约阅读时间需要 9 分钟。

专有名词

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 shanghai1) 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 beijing1) "wx4g0b7xrt0"127.0.0.1:6379> geohash city_clusters beijing shanghai1) "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 asc1) 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"

转载于:https://blog.51cto.com/phpme/2378947

你可能感兴趣的文章
Flask 源码流程,上下文管理
查看>>
stream classdesc serialVersionUID = -7218828885279815404, local class serialVersionUID = 1.
查看>>
ZAB与Paxos算法的联系与区别
查看>>
Breaking parallel loops in .NET C# using the Stop method z
查看>>
修改故障转移群集心跳时间
查看>>
[轉]redis;mongodb;memcache三者的性能比較
查看>>
微软职位内部推荐-Sr DEV
查看>>
让你的WPF程序在Win7下呈现Win8风格主题
查看>>
802.11 学习笔记
查看>>
Leetcode-Database-176-Second Highest Salary-Easy(转)
查看>>
构建Docker Compose服务堆栈
查看>>
最小角回归 LARS算法包的用法以及模型参数的选择(R语言 )
查看>>
Hadoop生态圈-Kafka常用命令总结
查看>>
如何基于Redis Replication设计并实现Redis-replicator?
查看>>
浮点数内存如何存储的
查看>>
贪吃蛇
查看>>
EventSystem
查看>>
用WINSOCK API实现同步非阻塞方式的网络通讯
查看>>
玩一玩博客,嘿嘿
查看>>
P1352 没有上司的舞会
查看>>