简介:
Geo是redis用于存储地理位置信息的结构,与redis3.2版本新增。
命令简介:
1.geoadd:添加地理位置的坐标
2.geopos:获取地理位置的坐标
3.geodist:计算两个位置之间的距离
4.georadius:根据用户给定的经纬度坐标获取指定范围内的地理位置集合
5.georadiusbymember:根据存储在位置集合里面的某一个地点获取范围内的地理位置集合
6.geohash:返回一个或者多个位置对象的geohash值。
命令介绍:
1)geoadd
可用版本: >=3.2.0
时间复杂度: 每添加一个元素复杂度为O(log(N))
命令格式: geoadd key longitude latitude member [longitude latitude member ....]
作用:
将给定的空间元素(经度,纬度,名字)添加到指定的键里面,这些数据将会以有序集合的形式保存在key中。
返回值:
新添加到key中的空间元素的数量,不包括已经存在但是被更新的元素。
注意:
GEOADD可以记录的坐标有限,很接近两级的区域将无法被索引。
有效的经度在-180到180之间。
有效的纬度在-85.05112878到85.05112878之间。
如果输入的经纬度不在有效度数之间的话,geoadd将会返回一个error。
2)geopos
可用版本: >=3.2.0
时间复杂度: 获取每一个元素的复杂度为O(log(N))
命令格式: geopos key member [member ...]
作用:
获取key中指定member的位置信息(经度+纬度)。
返回值:
返回一个数组,数组中每一个项都由两个元素组成,第一个为经度,第二个为纬度。
注意:
当给定的位置元素不存在时,对应的数组项为nil。
3)geodist
可用版本: >=3.2.0
时间复杂度: O(log(N))
命令格式: geodist key member1 member2 [unit]
作用:
获取两个位置之间的距离。
返回值:
计算出的距离会以双精度浮点数的形式被返回,如果给定的元素不存在,将会返回nil。
注意:
unit参数必须是下面其中的一个:
1. m-米
2.km-千米
3.mi-英里
4.ft-英尺
没有unit参数时,默认为米。
geodist计算距离时,默认地球为完美的球形,所以会存在0.5%之内的误差。
4)georadius
可用版本: >=3.2.0
时间复杂度: O(N+log(M)),其中 N 为指定半径范围内的位置元素数量, 而 M 则是被返回位置元素的数量。
命令格式: georadius key longitude latitude radius unit [withcoord] [withdist] [withhash] [asc|desc] [count count]
作用:
以给定的经纬度为中心,返回键包含的位置元素当中,与中心的距离不超过给定的最大距离的所有位置元素。
返回值:
返回一个数组,在没有任何with参数的时候,返回格式为["New York","Milan","Paris"] 这样的线性(linear)列表。
在有with参数的时候,将会返回一个两层嵌套的数组。第一个位置为元素名称,然后按以下顺序:
1.浮点数型返回中心与位置元素的距离
2.geohash整数。
3.由两个元素组成的坐标,分别为经度与纬度。
注意:
withdist:在返回位置元素的同时,将位置元素与中心的距离也一并返回。距离的单位和用户给定的范围单位保存一致。
withcoord:将位置元素的经度和纬度也一并返回。
withhash:以52位有符号整数的形式,返回位置元素经过原始geohash编码的有序集合分值。(实际作用不大)
asc|desc:根据中心位置,安装距离从近到远、从远到近排序。
count:默认情况下会返回所有匹配的位置元素,count可以限制元素个数。
5)georadiusbymember
可用版本: >=3.2.0
时间复杂度: O(log(N)+M), 其中 N 为指定范围之内的元素数量, 而 M 则是被返回的元素数量。
命令格式: georadiusbymember
作用:
以给定的元素为中心,返回键包含的位置元素当中,与中心的距离不超过给定的最大距离的所有位置元素。
返回值:
同georadius命令。
6)geohash
可用版本: >=3.2.0
时间复杂度: 寻找每个位置元素的复杂度为 O(log(N)) , 其中 N 为给定键包含的位置元素数量。
命令格式: geohash key member [member ...]
作用:
获取一个或者多个位置元素的geohash表示。
返回值:
一个数组,每一个元素都是一个geohash。命令返回的geohash位置与用户请求时的位置一一对应。