# Geo命令

# GEOADD

# 语法

GEOADD key [NX | XX] [CH] longitude latitude member [longitude
  latitude member ...]```

#### 描述

将指定的地理空间数据项(经度、纬度、名称)添加到指定的键中。数据会以有序集合的形式存储在该键下,这样后续就能直接用 GEOSEARCH 命令来查询这些位置信息
#### 参数

- **key**

保存地理空间索引(有序集合)的键名

- **longitude latitude member **

要添加到索引中的一个或多个‘经度-纬度-成员’三元组


#### 示例

```bash
> GEOADD Sicily 13.361389 38.115556 "Palermo" 15.087269 37.502669 "Catania"
(integer) 2
> GEODIST Sicily Palermo Catania
"166274.1516"
> GEORADIUS Sicily 15 37 100 km
1) "Catania"
> GEORADIUS Sicily 15 37 200 km
1) "Palermo"
2) "Catania"

# GEODIST

# 语法

GEODIST key member1 member2 [M | KM | FT | MI]

# 描述

返回由有序集合表示的地理空间索引中,两个成员之间的距离

# 参数

  • key

保存地理空间索引(有序集合)的键名

  • member

成员

# 示例

> GEOADD Sicily 13.361389 38.115556 "Palermo" 15.087269 37.502669 "Catania"
(integer) 2
> GEODIST Sicily Palermo Catania
"166274.1516"
> GEODIST Sicily Palermo Catania km
"166.2742"
> GEODIST Sicily Palermo Catania mi
"103.3182"
> GEODIST Sicily Foo Bar
(nil)

# GEOHASH

# 语法

GEOHASH key [member [member ...]]

# 描述

返回有效的 Geohash 字符串,用于表示地理空间索引中一个或多个元素的位置

# 参数

  • key

保存地理空间索引(有序集合)的键名

  • member

需要返回其 Geohash 字符串的一个或多个成员

# 示例

> GEOADD Sicily 13.361389 38.115556 "Palermo" 15.087269 37.502669 "Catania"
(integer) 2
> GEOHASH Sicily Palermo Catania
1) "sqc8b49rny0"
2) "sqdtr74hyu0"

# GEOPOS

# 语法

GEOPOS key [member [member ...]]

# 描述

返回指定键所代表的地理空间索引中,所有指定成员的位置

# 参数

  • key

保存地理空间索引(有序集合)的键名

  • member

需要返回其 Geohash 字符串的一个或多个成员

# 示例

> GEOADD Sicily 13.361389 38.115556 "Palermo" 15.087269 37.502669 "Catania"
(integer) 2
> GEOPOS Sicily Palermo Catania NonExisting
1) 1) "13.361389338970184"
   2) "38.1155563954963"
2) 1) "15.087267458438873"
   2) "37.50266842333162"
3) (nil)

# GEORADIUS

# 语法

GEORADIUS key longitude latitude radius <M | KM | FT | MI>
  [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count [ANY]] [ASC | DESC]
  [STORE key | STOREDIST key]

# 描述

返回地理空间索引(即使用 GEOADD 添加成员的有序集合)中,落在以指定位置为中心、给定半径范围内的成员

# 参数

  • key

保存地理空间索引(有序集合)的键名

  • WITHCOORD

保存地理空间索引(有序集合)的键名

  • WITHHASH

同时返回每个匹配项原始的 52 位 GeoHash 编码分数

  • COUNT count

最多返回 count个匹配项。如果使用 ANY 选项,命令一旦找到足够数量的匹配项就会立即返回——这样速度更快,但结果可能未经排序

# 示例

> GEOADD Sicily 13.361389 38.115556 "Palermo" 15.087269 37.502669 "Catania"
(integer) 2
> GEORADIUS Sicily 15 37 200 km WITHDIST
1) 1) "Palermo"
   2) "190.4424"
2) 1) "Catania"
   2) "56.4413"
> GEORADIUS Sicily 15 37 200 km WITHCOORD
1) 1) "Palermo"
   2) 1) "13.361389338970184"
      2) "38.1155563954963"
2) 1) "Catania"
   2) 1) "15.087267458438873"
      2) "37.50266842333162"
> GEORADIUS Sicily 15 37 200 km WITHDIST WITHCOORD
1) 1) "Palermo"
   2) "190.4424"
   3) 1) "13.361389338970184"
      2) "38.1155563954963"
2) 1) "Catania"
   2) "56.4413"
   3) 1) "15.087267458438873"
      2) "37.50266842333162"

# GEORADIUS_RO

# 语法

GEORADIUS_RO key longitude latitude radius <M | KM | FT | MI>
  [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count [ANY]] [ASC | DESC]```

#### 描述

这是 GEORADIUS 命令的只读版本。除了不支持可选的 STORE 和 STOREDIST 参数外,它的功能和 GEORADIUS 完全一样

#### 参数

- **key**

保存地理空间索引(有序集合)的键名

- **WITHCOORD**

保存地理空间索引(有序集合)的键名

- **WITHHASH**

同时返回每个匹配项原始的 52 位 GeoHash 编码分数

- **COUNT count**

最多返回 count个匹配项。如果使用 ANY 选项,命令一旦找到足够数量的匹配项就会立即返回——这样速度更快,但结果可能未经排序


---

## GEORADIUSBYMEMBER

#### 语法

```bash
GEORADIUSBYMEMBER key member radius <M | KM | FT | MI> [WITHCOORD]
  [WITHDIST] [WITHHASH] [COUNT count [ANY]] [ASC | DESC] [STORE key
  | STOREDIST key]

# 描述

该命令与 GEORADIUS 相同,唯一的区别在于:它不是接收一个经纬度值作为查询区域的中心,而是接收一个已经存在于该地理空间索引中的成员名称作为中心

# 参数

  • key

保存地理空间索引(有序集合)的键名

  • WITHCOORD

保存地理空间索引(有序集合)的键名

  • WITHHASH

同时返回每个匹配项原始的 52 位 GeoHash 编码分数

  • COUNT count

最多返回 count个匹配项。如果使用 ANY 选项,命令一旦找到足够数量的匹配项就会立即返回——这样速度更快,但结果可能未经排序

# 示例

> GEOADD Sicily 13.583333 37.316667 "Agrigento"
(integer) 1
> GEOADD Sicily 13.361389 38.115556 "Palermo" 15.087269 37.502669 "Catania"
(integer) 2
> GEORADIUSBYMEMBER Sicily Agrigento 100 km
1) "Agrigento"
2) "Palermo"

# GEORADIUSBYMEMBER_RO

# 语法

GEORADIUSBYMEMBER_RO key member radius <M | KM | FT | MI>
  [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count [ANY]] [ASC | DESC]

# 描述

GEORADIUSBYMEMBER 命令的只读版本

# 参数

  • key

保存地理空间索引(有序集合)的键名

  • WITHCOORD

保存地理空间索引(有序集合)的键名

  • WITHHASH

同时返回每个匹配项原始的 52 位 GeoHash 编码分数

  • COUNT count

最多返回 count个匹配项。如果使用 ANY 选项,命令一旦找到足够数量的匹配项就会立即返回——这样速度更快,但结果可能未经排序

  • ASC

按距离中心点的远近对结果进行排序:最近的在前(ASC/升序),或最远的在前(DESC/降序)


# GEOSEARCH

# 语法

GEOSEARCH key <FROMMEMBER member | FROMLONLAT longitude latitude>
  <BYRADIUS radius <M | KM | FT | MI> | BYBOX width height <M | KM |
  FT | MI>> [ASC | DESC] [COUNT count [ANY]] [WITHCOORD] [WITHDIST]
  [WITHHASH]

# 描述

返回指定形状区域内、通过 GEOADD 命令添加了地理信息的有序集合成员。该命令是 GEORADIUS 命令的扩展,因此除了支持在圆形区域内搜索外,还支持在矩形区域内进行搜索

# 参数

  • key

保存地理空间索引(有序集合)的键名

  • WITHCOORD

保存地理空间索引(有序集合)的键名

  • WITHHASH

同时返回每个匹配项原始的 52 位 GeoHash 编码分数

  • COUNT count

最多返回 count个匹配项。如果使用 ANY 选项,命令一旦找到足够数量的匹配项就会立即返回——这样速度更快,但结果可能未经排序

  • ASC

按距离中心点的远近对结果进行排序:最近的在前(ASC/升序),或最远的在前(DESC/降序)

  • BYRADIUS radius

在指定单位下,按给定半径进行圆形范围搜索。该参数与 BYBOX 互斥

  • BYRADIUS width height

在指定单位下,按给定的宽度和高度进行轴对齐矩形框搜索。该参数与 BYRADIUS 互斥

# 示例

> GEOADD Sicily 13.361389 38.115556 "Palermo" 15.087269 37.502669 "Catania"
(integer) 2
> GEOADD Sicily 12.758489 38.788135 "edge1"   17.241510 38.788135 "edge2"
(integer) 2
> GEOSEARCH Sicily FROMLONLAT 15 37 BYRADIUS 200 km ASC
1) "Catania"
2) "Palermo"
> GEOSEARCH Sicily FROMLONLAT 15 37 BYBOX 400 400 km ASC WITHCOORD WITHDIST
1) 1) "Catania"
   2) "56.4413"
   3) 1) "15.087267458438873"
      2) "37.50266842333162"
2) 1) "Palermo"
   2) "190.4424"
   3) 1) "13.361389338970184"
      2) "38.1155563954963"
3) 1) "edge2"
   2) "279.7403"
   3) 1) "17.241510450839996"
      2) "38.78813451624225"
4) 1) "edge1"
   2) "279.7405"
   3) 1) "12.75848776102066"
      2) "38.78813451624225"

# GEOSEARCHSTORE

# 语法

GEOSEARCHSTORE destination source <FROMMEMBER member |
  FROMLONLAT longitude latitude> <BYRADIUS radius <M | KM | FT | MI>
  | BYBOX width height <M | KM | FT | MI>> [ASC | DESC] [COUNT count
  [ANY]] [STOREDIST]

# 描述

这个命令和 GEOSEARCH 类似,不过它会把查询结果存到指定的目标位置

# 参数

  • destination

用于存储结果的键

  • source

要搜索的地理空间索引键

  • COUNT count

最多返回 count个匹配项。如果使用 ANY 选项,命令一旦找到足够数量的匹配项就会立即返回——这样速度更快,但结果可能未经排序

  • ASC

按距离中心点的远近对结果进行排序:最近的在前(ASC/升序),或最远的在前(DESC/降序)

# 示例

> GEOADD Sicily 13.361389 38.115556 "Palermo" 15.087269 37.502669 "Catania"
(integer) 2
> GEOADD Sicily 12.758489 38.788135 "edge1"   17.241510 38.788135 "edge2"
(integer) 2
> GEOSEARCHSTORE key1 Sicily FROMLONLAT 15 37 BYBOX 400 400 km ASC COUNT 3
(integer) 3
> GEOSEARCH key1 FROMLONLAT 15 37 BYBOX 400 400 km ASC WITHCOORD WITHDIST WITHHASH
1) 1) "Catania"
   2) "56.4413"
   3) (integer) 3479447370796909
   4) 1) "15.087267458438873"
      2) "37.50266842333162"
2) 1) "Palermo"
   2) "190.4424"
   3) (integer) 3479099956230698
   4) 1) "13.361389338970184"
      2) "38.1155563954963"
3) 1) "edge2"
   2) "279.7403"
   3) (integer) 3481342659049484
   4) 1) "17.241510450839996"
      2) "38.78813451624225"
> GEOSEARCHSTORE key2 Sicily FROMLONLAT 15 37 BYBOX 400 400 km ASC COUNT 3 STOREDIST
(integer) 3
> ZRANGE key2 0 -1 WITHSCORES
1) "Catania"
2) "56.4412578701582"
3) "Palermo"
4) "190.44242984775784"
5) "edge2"
6) "279.7403417843143"