GEO—地理坐标
# GEO—地理坐标
Redis GEO是Redis在3.2版本中新添加的特性,通过这一特性,用户可以将经纬度格式的地理坐标存储到Redis中,并对这些坐标执行距离计算、范围查找等操作
# 🔥GEOADD 存储、更新坐标
使用GEOADD命令,用户可以将给定的一个或多个经纬度坐标存储到位置集合中,并为这些坐标设置相应的名字
geoadd location_set longitude latitude name [longitude latitude name ...]
GEOADD命令会返回新添加至位置集合的坐标数量作为返回值
位置相同,则更新
# 🔥GEOPOS 获取指定位置的坐标
使用GEOADD命令将位置及其坐标存储到位置集合之后,用户可以使用GEOPOS命令去获取给定位置的坐标
geopos location_set name [name ...]
GEOPOS命令会返回一个数组作为执行结果,数组中的每个项都与用户给定的位置相对应。数组中的每个项都包含两个元素,第一个元素是位置的经度,而第二个元素则是位置的纬度
如果用户给定的位置并不存在于位置集合当中,那么GEOPOS命令将返回一个空值
# 🔥GEODIST 计算两个位置之间的直线距离
使用GEODIST命令计算两个给定位置之间的直线距离
geodist location_set name1 name2 [unit]
在默认情况下,GEODIST命令将以米为单位,返回两个给定位置之间的直线距离
unit参数的值可以是以下单位中的任意一个:
- m——以米为单位,为默认单位。
- km——以千米为单位。
- mi——以英里为单位。
- ft——以英尺为单位。
在调用GEODIST命令时,如果用户给定的某个位置并不存在于位置集合中,那么命令将返回空值,表示计算失败
# 🔥GEORADIUS 查找指定坐标半径范围内的其他位置
通过使用GEORADIUS命令,用户可以指定一个经纬度作为中心点,并从位置集合中找出位于中心点指定半径范围内的其他位置
georadis location_set longitude latitude radis unit [withdist] [withcoord] [asc|desc] [count n]
各个命令参数的意义分别如下:
- location_set参数用于指定执行查找操作的位置集合。
- longitude参数和latitude参数分别用于指定中心点的经度和纬度。
- radius参数用于指定查找半径。
- unit参数用于指定查找半径的单位,与GEODIST命令中的unit参数一样,这个参数的值可以是m(米)、km(千米)、mi(英里)或者ft(英尺)中的任意一个。
其他参数
- withdist 返回这些位置与中心点之间的距离
- withcoord 返回被匹配位置的坐标
- asc|desc 排序查找结果
- count n 限制命令获取的位置数量
# 🔥GEORADIUSBYMEMBER 查找指定位置半径范围内的其他位置
GEORADIUSBYMEMBER命令的作用和GEORADIUS命令的作用一样,都是找出中心点指定半径范围内的其他位置,这两个命令的主要区别在于GEORADIUS命令通过给定经纬度来指定中心点,而GEORADIUSBYMEMBER命令则通过选择位置集合中的一个位置作为中心点
georadiusbymember location_set name radius unit [withdist] [withcoord] [asc|desc] [count n]
除了指定中心点时使用的参数不一样之外,其余一样
# GEOHASH 获取指定位置的Geohash值
用户可以通过向GEOHASH命令传入一个或多个位置来获得这些位置对应的经纬度坐标的Geohash表示
geohash location_set name [name ...]
在进行范围查找时获取Geohash值,传入withhash参数即可
注意:需要注意的是,与GEOHASH命令不一样,GEORADIUS命令和GEORADIUSBYMEMBER命令返回的是被解释为数字的Geohash值。而GEOHASH命令返回的则是被解释为字符串的Geohash值。比如GEOHASH命令在获取清远市的Geohash值时返回的是字符串"ws0w0phgp70",而GEORADIUS命令获取的Geohash值却是数字4046597933543051,不过这两个值底层的二进制位是完全相同的。