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 |
|
Primero la longitud, luego la latitud |
|
LINESTRING |
|
Como mínimo dos pares de coordenadas |
|
POLYGON |
|
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:
Una instancia de Tair basada en DRAM
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 |
|||||||
|
|
Agrega una o más geometrías descritas en WKT a un área |
||||||||
|
|
Recupera el WKT de una geometría con nombre |
||||||||
|
|
Recupera todos los nombres de geometrías (y opcionalmente su WKT) en un área |
||||||||
|
|
Devuelve las geometrías almacenadas que contienen la geometría de entrada |
||||||||
|
|
Devuelve las geometrías almacenadas que están dentro de la geometría de entrada |
||||||||
|
|
Devuelve las geometrías almacenadas que intersecan con la geometría de entrada |
||||||||
|
|
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 |
|
|
|
Elimina una geometría con nombre de un área |
||||||||
|
|
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 obligatoriosA|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 |
|
|
O(log n) |
Parámetros
|
Parámetro |
Descripción |
|
|
El área (clave) que agrupa las geometrías relacionadas |
|
|
El nombre de la geometría |
|
|
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 |
|
|
Complejidad temporal |
O(1) |
Parámetros
|
Parámetro |
Descripción |
|
|
El área (clave) que agrupa las geometrías relacionadas |
|
|
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):
nilError: 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 |
|
|
Complejidad temporal |
O(n) |
Parámetros
|
Parámetro |
Descripción |
|
|
El área (clave) que agrupa las geometrías relacionadas |
|
|
(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):
nilError: 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 |
|
|
Complejidad temporal |
Óptima: O(log² n); peor caso: O(log n) |
Parámetros
|
Parámetro |
Descripción |
|
|
El área (clave) que agrupa las geometrías relacionadas |
|
|
La geometría de entrada en formato WKT. Tipos compatibles: POINT, LINESTRING, POLYGON |
|
|
(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 setError: 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 |
|
|
Complejidad temporal |
Óptima: O(log² n); peor caso: O(log n) |
Parámetros
|
Parámetro |
Descripción |
|
|
El área (clave) que agrupa las geometrías relacionadas |
|
|
La geometría de entrada en formato WKT. Tipos compatibles: POINT, LINESTRING, POLYGON |
|
|
(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 setError: 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 |
|
|
Complejidad temporal |
Óptima: O(log² n); peor caso: O(log n) |
Parámetros
|
Parámetro |
Descripción |
|
|
El área (clave) que agrupa las geometrías relacionadas |
|
|
La geometría de entrada en formato WKT. Tipos compatibles: POINT, LINESTRING, POLYGON |
|
|
(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 setError: 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 |
|
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 |
|
|
Busca dentro de |
|
|
|
Usa un punto almacenado como centro y busca dentro de |
|
|
|
Busca dentro del polígono definido por una cadena WKT |
|
Opciones adicionales
|
Opción |
Descripción |
|
|
Limita el número de resultados devueltos. Ejemplo: |
|
|
Devuelve los resultados ordenados por distancia, del más cercano al más lejano |
|
|
Devuelve los resultados ordenados por distancia, del más lejano al más cercano |
|
|
Devuelve la distancia entre cada punto resultante y el punto central especificado |
|
|
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 setError: 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 |
|
|
Complejidad temporal |
O(log n) |
Parámetros
|
Parámetro |
Descripción |
|
|
El área (clave) que agrupa las geometrías relacionadas |
|
|
El nombre de la geometría que se va a eliminar |
Valor devuelto
Éxito:
OKNo encontrado (el área o la geometría no existe):
nilError: 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