Tipos de Datos Geoespaciales en Redis

Redis proporciona tipos de datos geoespaciales que permiten almacenar y consultar inforamción geográfica. A continuación, exploraremos las operaciones principales para trabajar con datos geoespaciales en Redis.

Añadir Ubicaciones Geográficas

Para agregar ubicaciones geográficas, utilizamos el comando GEOADDD. Es importante tener en cuenta que los polos (norte y sur) no pueden ser agregados mediante este comando. Generalmente, se descargan datos de ciudades y se importan mediante programas en lenguajes como Java.


# Agregar ciudades con sus coordenadas
redis-cli GEOADD paises:colombia 74.0751 4.7109 Bogota
(integer) 1
redis-cli GEOADD paises:colombia 75.5636 6.2518 Medellin
(integer) 1
redis-cli GEOADD paises:colombia 76.6333 2.4384 Cartagena
(integer) 1
redis-cli GEOADD paises:colombia 78.5132 8.9689 Barranquilla
(integer) 1
redis-cli GEOADD paises:colombia 72.5054 7.8878 Cali
(integer) 1

Recuperar Ubicaciones

Para obtener las coordenadas de una ubicación almacenada, utilizamos el comando GEOPOS.


# Obtener coordenadas de una ciudad
redis-cli GEOPOS paises:colombia Bogota
1) 1) "74.07509994459152222"
   2) "4.71090006828308105"
redis-cli GEOPOS paises:colombia bogota
1) (nil)  # Redis es sensible a mayúsculas/minúsculas
redis-cli GEOPOS paises:colombia Medellin
1) 1) "75.56360149383544922"
   2) "6.25179982185363770"

Calcular Distancias

El comando GEODIST permite calcular la distancia entre dos ubicaciones geográficas. Podemos especificar diferentes unidades de medida como kilómetros (km), millas (mi) o pies (ft).


# Calcular distancias entre ciudades
redis-cli GEODIST paises:colombia Bogota Medellin
"249487.3421"
redis-cli GEODIST paises:colombia Bogota Medellin km
"249.4873"
redis-cli GEODIST paises:colombia Bogota Cartagena km
"681.3528"

Encontrar Ubicaciones Dentro de un Radio Específico

El comando GEORADIUS permite encontrar todas las ubicaciones dentro de un radio específico desde un punto geográfico dado. Esta función es útil para aplicaciones como "personas cercanas" o "locales cercanos".


# Encontrar ciudades dentro de un radio de 500km
redis-cli GEORADIUS paises:colombia 74 5 500 km
1) "Bogota"
2) "Cali"
redis-cli GEORADIUS paises:colombia 74 5 300 km withcoord
1) 1) "Bogota"
   2) 1) "74.07509994459152222"
      2) "4.71090006828308105"
redis-cli GEORADIUS paises:colombia 74 5 300 km withcoord withdist
1) 1) "Bogota"
   2) "0.0000"
   3) 1) "74.07509994459152222"
      2) "4.71090006828308105"
redis-cli GEORADIUS paises:colombia 74 5 300 km withcoord withdist withhash
1) 1) "Bogota"
   2) "0.0000"
   3) (integer) 3927783517888172
   4) 1) "74.07509994459152222"
      2) "4.71090006828308105"
redis-cli GEORADIUS paises:colombia 74 5 1000 km withcoord withdist count 2
1) 1) "Bogota"
   2) "0.0000"
   3) 1) "74.07509994459152222"
      2) "4.71090006828308105"
2) 1) "Cali"
   2) "298.3124"
   3) 1) "72.50539994239807129"
      2) "7.88779994249343872"

Encontrar Ubicaciones Relativas a un Miembro Específico

El comando GEORADIUSBYMEMBER permite encontrar ubicaciones dentro de un radio específico, utilizando un miembro existente como punto central.


# Encontrar ciudades dentro de 200km de Bogota
redis-cli GEORADIUSBYMEMBER paises:colombia Bogota 200 km
1) "Bogota"
2) "Cali"

Obtener Códigos Geohash

El comando GEOHASH devuelve una cadena de 11 caracteres que represanta la ubicación geográfica. Este código convierte coordenadas 2D en una cadena 1D, donde ubicaciones más cercanas tienen cadenas más similares.


# Obtener código geohash de una ciudad
redis-cli GEOHASH paises:colombia Bogota
1) "d2ruc6z0c0z"

Implementación Subyacente

La implementación subyacente de los tipos de datos geoespaciales en Redis utiliza estructuras de datos ordenadas (ZSET). Esto permite realizar operaciones eficientes sobre los datos geográficos.

Eliminar Ubicaciones

Dado que los datos geoespaciales se almacenan en conjuntos ordenados, podemos utilizar comandos de conjuntos ordenados como ZRANGE para ver todos los elementos y ZREM para eliminar un elemento específico.


# Ver todas las ciudades almacenadas
redis-cli ZRANGE paises:colombia 0 -1
1) "Barranquilla"
2) "Bogota"
3) "Cali"
4) "Cartagena"
5) "Medellin"
# Eliminar una ciudad
redis-cli ZREM paises:colombia Bogota
(integer) 1
# Verificar la eliminación
redis-cli ZRANGE paises:colombia 0 -1
1) "Barranquilla"
2) "Cali"
3) "Cartagena"
4) "Medellin"

Etiquetas: Redis Geoespatial Geografía bases de datos

Publicado el 7-3 01:49