Todos los productos
Search
Centro de documentos

Tair (Redis® OSS-Compatible):GIS

Última actualización: Sep 03, 2026

TairGIS es una estructura de datos GIS basada en índices R-tree que permite almacenar y consultar puntos, linestrings y polígonos mediante el formato well-known text (WKT). A diferencia de los comandos GEO nativos de Redis —que utilizan GeoHash y Sorted Set para gestionar únicamente consultas de puntos— TairGIS admite consultas de relaciones espaciales (contains, within, intersects) y búsquedas de proximidad por radio en los tres tipos de geometría.

Este módulo es de código abierto. Para obtener más información, consulte TairGIS.

Conceptos clave

Consultas de relaciones espaciales: contains, within e intersects

Estos tres comandos consultan distintas relaciones direccionales entre una geometría proporcionada y las formas almacenadas en un área. La distinción es importante porque GIS.CONTAINS y GIS.WITHIN parecen similares, pero operan en direcciones opuestas:

  • GIS.CONTAINS: busca las formas almacenadas que contienen la entrada proporcionada. Utilice este comando cuando tenga un punto (como la ubicación GPS de un usuario) y necesite saber qué regiones almacenadas lo encierran. Por ejemplo: "¿En qué zonas de reparto se encuentra esta dirección?"

  • GIS.WITHIN: busca las formas almacenadas que están dentro de la entrada proporcionada. Utilice este comando cuando tenga una forma delimitadora grande y necesite saber qué formas almacenadas caben completamente en su interior. Por ejemplo: "¿Qué estacionamientos están completamente dentro de este distrito?"

  • GIS.INTERSECTS: busca las formas almacenadas que comparten coordenadas con la entrada proporcionada. Utilice este comando cuando baste con una superposición parcial. Por ejemplo: "¿Qué carreteras cruzan esta zona de construcción?"

Tipos de geometría WKT

TairGIS utiliza well-known text (WKT) para describir geometrías. Los tres tipos siguen el formato TYPE (coordinates):

Tipo

Ejemplo WKT

Restricción

POINT

'POINT (120.086631 30.138141)'

Primero la longitud, luego la latitud

LINESTRING

'LINESTRING (30 10, 40 40)'

Como mínimo dos pares de coordenadas

POLYGON

'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))'

Tres o más pares de coordenadas; el primero y el último deben coincidir

Rango válido de longitud: -180 a 180. Rango válido de latitud: -90 a 90.

Los tipos MULTIPOINT, MULTILINESTRING, MULTIPOLYGON, GEOMETRY y COLLECTION no son compatibles.

El parámetro area

Cada comando de TairGIS recibe un argumento area como primer parámetro. Un área es un contenedor lógico —una clave de Redis— que agrupa geometrías relacionadas. Todas las formas agregadas a la misma área se pueden consultar en conjunto.

Requisitos previos

Antes de empezar, asegúrese de contar con:

Actualice su instancia a la versión secundaria más reciente para obtener más funciones y mayor estabilidad. Para obtener más información, consulte Actualizar la versión secundaria de una instancia . En el caso de instancias con arquitectura de clúster o de división de lectura/escritura , actualice también los nodos proxy a la versión secundaria más reciente para garantizar que todos los comandos se ejecuten correctamente.

Notas de uso

Los datos de TairGIS se almacenan en la instancia de Tair.

Comandos compatibles

Comando

Sintaxis

Descripción

GIS.ADD

GIS.ADD area polygonName polygonWkt [polygonName polygonWkt ...]

Agrega una o más geometrías descritas en WKT a un área

GIS.GET

GIS.GET area polygonName

Recupera el WKT de una geometría con nombre

GIS.GETALL

GIS.GETALL area [WITHOUTWKT]

Recupera todos los nombres de geometrías (y opcionalmente su WKT) en un área

GIS.CONTAINS

GIS.CONTAINS area polygonWkt [WITHOUTWKT]

Devuelve las geometrías almacenadas que contienen la geometría de entrada

GIS.WITHIN

GIS.WITHIN area polygonWkt [WITHOUTWKT]

Devuelve las geometrías almacenadas que están dentro de la geometría de entrada

GIS.INTERSECTS

GIS.INTERSECTS area polygonWkt

Devuelve las geometrías almacenadas que intersecan con la geometría de entrada

GIS.SEARCH

`GIS.SEARCH area [RADIUS lon lat dist M

KM

FT

MI] [MEMBER field dist M

KM

FT

MI] [GEOM geom] [COUNT count] [ASC

DESC] [WITHDIST] [WITHOUTWKT]`

Consulta puntos dentro de un radio o límite de polígono

GIS.DEL

GIS.DEL area polygonName

Elimina una geometría con nombre de un área

DEL

DEL key [key ...]

Elimina una o más claves de TairGIS (comando nativo de Redis)

Convenciones de sintaxis de comandos:

  • MAYÚSCULAS: palabra clave del comando

  • *Cursivas*: variable

  • [opciones]: parámetro opcional; los parámetros sin corchetes son obligatorios

  • A|B: mutuamente excluyentes; especifique solo uno

  • ...: el parámetro anterior puede repetirse

GIS.ADD

Agrega una o más geometrías descritas en WKT a un área.

Complejidad temporal

Elemento

Detalles

Sintaxis

GIS.ADD area polygonName polygonWkt [polygonName polygonWkt ...]

O(log n)

Parámetros

Parámetro

Descripción

area

El área (clave) que agrupa las geometrías relacionadas

polygonName

El nombre de la geometría

polygonWkt

La geometría en formato WKT. Tipos compatibles: POINT, LINESTRING, POLYGON

WKT (well-known text) es un lenguaje de marcado de texto estándar para representar objetos de geometría vectorial, sistemas de referencia espacial y transformaciones entre sistemas de referencia espacial.

Valor devuelto

  • Éxito: el recuento de geometrías agregadas o actualizadas

  • Error: un mensaje de error

Ejemplo

GIS.ADD hangzhou campus 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))'

Salida:

(integer) 1

GIS.GET

Recupera el WKT de una geometría con nombre dentro de un área.

Elemento

Detalles

Sintaxis

GIS.GET area polygonName

Complejidad temporal

O(1)

Parámetros

Parámetro

Descripción

area

El área (clave) que agrupa las geometrías relacionadas

polygonName

El nombre de la geometría que se va a recuperar

Valor devuelto

  • Éxito: la representación WKT de la geometría

  • No encontrado (el área o la geometría no existe): nil

  • Error: un mensaje de error

Ejemplo

Requisitos previos: ejecute GIS.ADD hangzhou campus 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))'.

GIS.GET hangzhou campus

Salida:

'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))'

GIS.GETALL

Recupera todos los nombres de geometrías en un área, junto con su WKT de forma predeterminada.

Elemento

Detalles

Sintaxis

GIS.GETALL area [WITHOUTWKT]

Complejidad temporal

O(n)

Parámetros

Parámetro

Descripción

area

El área (clave) que agrupa las geometrías relacionadas

WITHOUTWKT

(Opcional) Si se especifica, devuelve solo los nombres de las geometrías, sin su WKT

Valor devuelto

  • Éxito: nombres de geometrías y WKT (o solo nombres si se especifica WITHOUTWKT)

  • No encontrado (el área no existe): nil

  • Error: un mensaje de error

Ejemplo

Requisitos previos: ejecute GIS.ADD hangzhou campus 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))'.

GIS.GETALL hangzhou

Salida:

1) "campus"
2) "POLYGON((30 10,40 40,20 40,10 20,30 10))"

GIS.CONTAINS

Devuelve las geometrías almacenadas en un área que contienen la geometría de entrada.

Utilice GIS.CONTAINS cuando tenga una geometría (como un punto de coordenadas) y necesite saber qué regiones almacenadas la encierran.

Elemento

Detalles

Sintaxis

GIS.CONTAINS area polygonWkt [WITHOUTWKT]

Complejidad temporal

Óptima: O(log² n); peor caso: O(log n)

Parámetros

Parámetro

Descripción

area

El área (clave) que agrupa las geometrías relacionadas

polygonWkt

La geometría de entrada en formato WKT. Tipos compatibles: POINT, LINESTRING, POLYGON

WITHOUTWKT

(Opcional) Si se especifica, devuelve solo los nombres de las geometrías, sin su WKT

Valor devuelto

  • Éxito: el recuento y WKT de las geometrías que contienen la entrada

  • No encontrado (el área no existe): empty list or set

  • Error: un mensaje de error

Ejemplo

Requisitos previos: ejecute GIS.ADD hangzhou campus 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))'.

El siguiente ejemplo comprueba qué polígonos almacenados contienen el punto en (30, 11):

GIS.CONTAINS hangzhou 'POINT (30 11)'

Salida:

1) "1"
2) 1) "campus"
   2) "POLYGON((30 10,40 40,20 40,10 20,30 10))"

GIS.WITHIN

Devuelve las geometrías almacenadas en un área que se encuentran completamente dentro de la geometría de entrada.

Utilice GIS.WITHIN cuando tenga un límite (como un polígono de distrito) y necesite saber qué formas almacenadas están completamente en su interior.

Elemento

Detalles

Sintaxis

GIS.WITHIN area polygonWkt [WITHOUTWKT]

Complejidad temporal

Óptima: O(log² n); peor caso: O(log n)

Parámetros

Parámetro

Descripción

area

El área (clave) que agrupa las geometrías relacionadas

polygonWkt

La geometría de entrada en formato WKT. Tipos compatibles: POINT, LINESTRING, POLYGON

WITHOUTWKT

(Opcional) Si se especifica, devuelve solo los nombres de las geometrías, sin su WKT

Los tipos MULTIPOINT, MULTILINESTRING, MULTIPOLYGON, GEOMETRY y COLLECTION no son compatibles.

Valor devuelto

  • Éxito: el recuento y WKT de las geometrías dentro de la entrada

  • No encontrado (el área no existe): empty list or set

  • Error: un mensaje de error

Ejemplo

Requisitos previos: ejecute GIS.ADD hangzhou campus 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))'.

El siguiente ejemplo comprueba qué polígonos almacenados se encuentran dentro del polígono delimitador más grande:

GIS.WITHIN hangzhou 'POLYGON ((30 5, 50 50, 20 50, 5 20, 30 5))'

Salida:

1) "1"
2) 1) "campus"
   2) "POLYGON((30 10,40 40,20 40,10 20,30 10))"

GIS.INTERSECTS

Devuelve las geometrías almacenadas en un área que comparten coordenadas con la geometría de entrada.

Utilice GIS.INTERSECTS cuando baste con una superposición parcial; por ejemplo, para encontrar todas las carreteras que cruzan una zona de construcción.

Elemento

Detalles

Sintaxis

GIS.INTERSECTS area polygonWkt

Complejidad temporal

Óptima: O(log² n); peor caso: O(log n)

Parámetros

Parámetro

Descripción

area

El área (clave) que agrupa las geometrías relacionadas

polygonWkt

La geometría de entrada en formato WKT. Tipos compatibles: POINT, LINESTRING, POLYGON

WITHOUTWKT

(Opcional) Si se especifica, devuelve solo los nombres de las geometrías, sin su WKT

Valor devuelto

  • Éxito: el recuento y WKT de las geometrías que intersecan con la entrada

  • No encontrado (el área no existe): empty list or set

  • Error: un mensaje de error

Ejemplo

Requisitos previos: ejecute GIS.ADD hangzhou campus 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))'.

El siguiente ejemplo comprueba qué polígonos almacenados intersecan con el linestring de (30, 10) a (40, 40):

GIS.INTERSECTS hangzhou 'LINESTRING (30 10, 40 40)'

Salida:

1) "1"
2) 1) "campus"
   2) "POLYGON((30 10,40 40,20 40,10 20,30 10))"

GIS.SEARCH

Consulta geometrías de puntos en un área que se encuentran dentro de un radio determinado o de un límite de polígono. Este comando es el equivalente en TairGIS al comando GEORADIUS nativo de Redis.

Especifique exactamente una de las opciones RADIUS, MEMBER o GEOM para definir el límite de búsqueda.

Elemento

Detalles

Sintaxis

`GIS.SEARCH area [RADIUS lon lat dist M

KM

FT

MI] [MEMBER field dist M

KM

FT

MI] [GEOM geom] [COUNT count] [ASC

DESC] [WITHDIST] [WITHOUTWKT]`

Complejidad temporal

Óptima: O(log² n); peor caso: O(log n)

Opciones de límite de búsqueda (especifique exactamente una)

Opción

Descripción

Ejemplo

RADIUS lon lat dist unit

Busca dentro de dist respecto a la longitud y latitud indicadas. Unidades: M (metro), KM (kilómetro), FT (pie), MI (milla)

RADIUS 15 37 200 KM

MEMBER field dist unit

Usa un punto almacenado como centro y busca dentro de dist respecto a él

MEMBER Agrigento 100 KM

GEOM geom

Busca dentro del polígono definido por una cadena WKT

GEOM 'POLYGON((10 30,20 30,20 40,10 40))'

Opciones adicionales

Opción

Descripción

COUNT count

Limita el número de resultados devueltos. Ejemplo: COUNT 3

ASC

Devuelve los resultados ordenados por distancia, del más cercano al más lejano

DESC

Devuelve los resultados ordenados por distancia, del más lejano al más cercano

WITHDIST

Devuelve la distancia entre cada punto resultante y el punto central especificado

WITHOUTWKT

Devuelve solo los nombres de las geometrías, sin su WKT

Valor devuelto

  • Éxito: el recuento y WKT de los puntos coincidentes

  • No encontrado (el área no existe): empty list or set

  • Error: un mensaje de error

Ejemplo

Requisitos previos: ejecute GIS.ADD Sicily "Palermo" "POINT (13.361389 38.115556)" "Catania" "POINT(15.087269 37.502669)".

El siguiente ejemplo busca todos los puntos en el área Sicily dentro de 200 km de (15, 37), ordenados por distancia:

GIS.SEARCH Sicily RADIUS 15 37 200 km WITHDIST ASC

Salida:

1) (integer) 2
2) 1) "Catania"
   2) "POINT(15.087269 37.502669)"
   3) "56.4413"
   4) "Palermo"
   5) "POINT(13.361389 38.115556)"
   6) "190.4424"

GIS.DEL

Elimina una geometría con nombre de un área.

Elemento

Detalles

Sintaxis

GIS.DEL area polygonName

Complejidad temporal

O(log n)

Parámetros

Parámetro

Descripción

area

El área (clave) que agrupa las geometrías relacionadas

polygonName

El nombre de la geometría que se va a eliminar

Valor devuelto

  • Éxito: OK

  • No encontrado (el área o la geometría no existe): nil

  • Error: un mensaje de error

Ejemplo

Requisitos previos: ejecute GIS.ADD hangzhou campus 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))'.

GIS.DEL hangzhou campus

Salida:

OK

Pasos siguientes