GEOADD key longitude latitude member [longitude latitude member …] 添加地理位置
可用版本: >= 3.2.0
时间复杂度: 每添加一个元素的复杂度为 O(log(N)) , 其中 N 为键里面包含的位置元素数量。
将给定的空间元素(纬度、经度、名字)添加到指定的键里面。 这些数据会以有序集合的形式被储存在键里面, 从而使得像 GEORADIUS
和 GEORADIUSBYMEMBER
这样的命令可以在之后通过位置查询取得这些元素。
GEOADD
命令以标准的 x,y
格式接受参数, 所以用户必须先输入经度, 然后再输入纬度。 GEOADD
能够记录的坐标是有限的: 非常接近两极的区域是无法被索引的。 精确的坐标限制由 EPSG:900913 / EPSG:3785 / OSGEO:41001 等坐标系统定义, 具体如下:
- 有效的经度介于 -180 度至 180 度之间。
- 有效的纬度介于 -85.05112878 度至 85.05112878 度之间。
当用户尝试输入一个超出范围的经度或者纬度时, GEOADD
命令将返回一个错误。
返回值
新添加到键里面的空间元素数量, 不包括那些已经存在但是被更新的元素。
127.0.0.1:6379> GEOADD g1 1.87454125 9.85474415 ningbo
(integer) 1
127.0.0.1:6379> GEOADD g1 80.52145587 23.25254478 hangzhou
(integer) 1
GEOPOS key member [member …] 获取key中的地理位置
可用版本: >= 3.2.0
时间复杂度: 获取每个位置元素的复杂度为 O(log(N)) , 其中 N 为键里面包含的位置元素数量。
从键里面返回所有给定位置元素的位置(经度和纬度)。
因为 GEOPOS
命令接受可变数量的位置元素作为输入, 所以即使用户只给定了一个位置元素, 命令也会返回数组回复。
返回值
GEOPOS
命令返回一个数组, 数组中的每个项都由两个元素组成: 第一个元素为给定位置元素的经度, 而第二个元素则为给定位置元素的纬度。 当给定的位置元素不存在时, 对应的数组项为空值。
127.0.0.1:6379> GEOPOS g1 ningbo hangzhou
1) 1) "33.332323729991913"
2) "33.332111734668928"
2) 1) "80.521456897258759"
2) "23.252544641883979"
GEODIST key member1 member2 [unit] 两个给定位置之间的距离
可用版本: >= 3.2.0
复杂度: O(log(N))
返回两个给定位置之间的距离。
如果两个位置之间的其中一个不存在, 那么命令返回空值。
指定单位的参数 unit
必须是以下单位的其中一个:
-
m
表示单位为米。 -
km
表示单位为千米。 -
mi
表示单位为英里。 -
ft
表示单位为英尺。
如果用户没有显式地指定单位参数, 那么 GEODIST
默认使用米作为单位。
GEODIST
命令在计算距离时会假设地球为完美的球形, 在极限情况下, 这一假设最大会造成 0.5% 的误差。
返回值
计算出的距离会以双精度浮点数的形式被返回。 如果给定的位置元素不存在, 那么命令返回空值。
127.0.0.1:6379> GEODIST g1 hangzhou ningbo km
"4714.6240"
GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [ASC|DESC] [COUNT count] 给定一个经纬度,返回key里符合距离的元素
127.0.0.1:6379> GEORADIUS g1 32.33233321 33.22333332 100 km WITHDIST
#返回g1数组距离100km的元素
1) 1) "taizhou"
2) "73.3969"
2) 1) "ningbo"
2) "93.7701"
127.0.0.1:6379> GEORADIUS g1 32.33233321 33.22333332 100 km WITHCOORD
1) 1) "taizhou"
2) 1) "32.33139842748642"
2) "33.883220948017041"
2) 1) "ningbo"
2) 1) "33.332323729991913"
2) "33.332111734668928"
127.0.0.1:6379> GEORADIUS g1 32.33233321 33.22333332 100 km WITHHASH
1) 1) "taizhou"
2) (integer) 3503937389531394
2) 1) "ningbo"
2) (integer) 3504044319089290
127.0.0.1:6379> GEORADIUS g1 32.33233321 33.22333332 100 km WITHCOORD WITHDIST WITHHASH
1) 1) "taizhou"
2) "73.3969"
3) (integer) 3503937389531394
4) 1) "32.33139842748642"
2) "33.883220948017041"
2) 1) "ningbo"
2) "93.7701"
3) (integer) 3504044319089290
4) 1) "33.332323729991913"
2) "33.332111734668928"
GEORADIUSBYMEMBER key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [ASC|DESC] [COUNT count]
可用版本: >= 3.2.0
时间复杂度: O(log(N)+M), 其中 N 为指定范围之内的元素数量, 而 M 则是被返回的元素数量。
这个命令和 GEORADIUS
命令一样, 都可以找出位于指定范围内的元素, 但是 GEORADIUSBYMEMBER
的中心点是由给定的位置元素决定的, 而不是像 GEORADIUS
那样, 使用输入的经度和纬度来决定中心点。
关于 GEORADIUSBYMEMBER
命令的更多信息, 请参考 GEORADIUS
命令的文档。
返回值
一个数组, 数组中的每个项表示一个范围之内的位置元素。
127.0.0.1:6379> GEOADD g1 32.33233321 33.22333332 center
(integer) 1
127.0.0.1:6379> GEORADIUSBYMEMBER g1 ningbo 100 km
1) "center"
2) "ningbo"
127.0.0.1:6379> GEORADIUSBYMEMBER g1 center 100 km
1) "center"
2) "taizhou"
3) "ningbo"
127.0.0.1:6379> GEORADIUSBYMEMBER Sicily Agrigento 100 km withcoord withdist
1) 1) "Agrigento"
2) "0.0000"
3) 1) "13.583331406116486"
2) "37.316668049938166"
2) 1) "Palermo"
2) "90.9778"
3) 1) "13.361389338970184"
2) "38.115556395496299"
127.0.0.1:6379> GEORADIUSBYMEMBER Sicily Agrigento 100 km withcoord withdist withhash
1) 1) "Agrigento"
2) "0.0000"
3) (integer) 3479030013248308
4) 1) "13.583331406116486"
2) "37.316668049938166"
2) 1) "Palermo"
2) "90.9778"
3) (integer) 3479099956230698
4) 1) "13.361389338970184"
2) "38.115556395496299"
GEOHASH key member [member …]
可用版本: >= 3.2.0
时间复杂度: 寻找每个位置元素的复杂度为 O(log(N)) , 其中 N 为给定键包含的位置元素数量。
返回一个或多个位置元素的 Geohash 表示。
返回值
一个数组, 数组的每个项都是一个 geohash 。 命令返回的 geohash 的位置与用户给定的位置元素的位置一一对应。
代码示例
redis> GEOADD Sicily 13.361389 38.115556 "Palermo" 15.087269 37.502669 "Catania"
(integer) 2
redis> GEOHASH Sicily Palermo Catania
1) "sqc8b49rny0"
2) "sqdtr74hyu0"
网友评论