Comprendiendo la precisión de los códigos Geohash para la optimización de análisis espaciales

Xavier Jacome P.
4 min readMay 17, 2023

--

Ejemplo de códigos Geohash precisión 7 en Tenguel, parroquia rural de Guayaquil.

Hola a todos, en el mundo de los datos geoespaciales, Geohash se ha convertido en una herramienta poderosa para codificar ubicaciones geográficas en cadenas de texto. La belleza de los códigos Geohash reside en su simplicidad y flexibilidad, permitiéndonos ajustar la precisión de nuestras ubicaciones a medida de nuestras necesidades. Sin embargo, ¿cómo determinamos la precisión correcta para nuestro análisis? En esta publicación, vamos a explorar la precisión de los códigos Geohash y cómo se correlaciona con las dimensiones físicas en la Tierra.

Primero, recordemos que un código Geohash es una forma de codificar una ubicación geográfica en una cadena de caracteres. La longitud de esta cadena determina la precisión del Geohash: cuanto más larga sea la cadena, mayor será la precisión. Sin embargo, es importante tener en cuenta que a medida que aumenta la precisión, también lo hace la cantidad de códigos Geohash necesarios para cubrir un área específica. Por lo tanto, debemos encontrar un equilibrio entre la precisión y la cantidad de datos que estamos dispuestos a manejar.

Para entender mejor esto, vamos a explorar cómo las dimensiones físicas de un Geohash varían con su precisión. Para esto, utilizaremos Python y las bibliotecas geohash y geopy.

import geohash
import geopy.distance

def geohash_dimensions(precision):
# Codifique una muestra de latitud y longitud usando la precisión dada
sample_geohash = geohash.encode(0, 0, precision)

# Obtener el cuadro delimitador de geohash
_, _, lat_err, lon_err = geohash.decode_exactly(sample_geohash)

# Calcule las dimensiones directamente a partir de los errores de latitud y longitud
width = lon_err * 2 * 111320 # 1 grado de longitud ~= 111,32 km en el ecuador
height = lat_err * 2 * 110574 # 1 grado de latitud ~= 110.574 km en todas partes

return width, height
for precision in range(1, 13):
width, height = geohash_dimensions(precision)
print(f"Precision {precision}: {width:.2f}m x {height:.2f}m")
Precision 1: 5009400.00m x 4975830.00m
Precision 2: 1252350.00m x 621978.75m
Precision 3: 156543.75m x 155494.69m
Precision 4: 39135.94m x 19436.84m
Precision 5: 4891.99m x 4859.21m
Precision 6: 1223.00m x 607.40m
Precision 7: 152.87m x 151.85m
Precision 8: 38.22m x 18.98m
Precision 9: 4.78m x 4.75m
Precision 10: 1.19m x 0.59m
Precision 11: 0.15m x 0.15m
Precision 12: 0.04m x 0.02m

Este script calcula y muestra las dimensiones de un Geohash para diferentes niveles de precisión. A medida que aumenta la precisión (es decir, la longitud del código Geohash), las dimensiones de la celda disminuyen. Esto significa que un Geohash más preciso representará un área más pequeña en la Tierra.

Los pasos que realiza la función geohash_dimensions son los siguientes:

  1. Dentro de la función, primero genera un geohash de muestra utilizando la longitud y latitud 0,0 (que corresponde más o menos al Golfo de Guinea en el Océano Atlántico), con la precisión especificada.
  2. Luego, utiliza la función decode_exactly de la biblioteca geohash para obtener los errores de latitud y longitud de la caja del geohash. Estos errores representan la mitad de las dimensiones de la caja.
  3. A continuación, calcula el ancho y la altura de la caja del geohash, multiplicando el error de longitud por 2 y por una constante que representa el número de metros en un grado de longitud en el ecuador (111.32 km), y el error de latitud por 2 y por una constante que representa el número de metros en un grado de latitud en cualquier lugar (110.574 km).
  4. Finalmente, retorna el ancho y la altura de la caja del geohash.

Es importante recordar que estas dimensiones son aproximadas y pueden variar ligeramente debido a la forma esférica de la Tierra. En general, estas dimensiones son más precisas cerca del ecuador y menos precisas cerca de los polos.

Al comprender cómo se correlaciona la precisión de un Geohash con sus dimensiones físicas, podemos tomar decisiones más informadas sobre la precisión que necesitamos para nuestro análisis. Por ejemplo, si estamos analizando datos de tráfico a nivel de ciudad, podríamos necesitar una precisión alta para capturar la variabilidad dentro de la ciudad, como lo podría ser una precisión 7, o inclusive mayor. Por otro lado, si estamos analizando patrones de migración de aves a nivel continental, una precisión más baja podría ser suficiente.

Espero que este post te haya ayudado a entender mejor la precisión de los códigos Geohash y cómo puedes ajustarla a tus necesidades. Recuerda, el mejor análisis geoespacial es aquel que se ajusta a las características de tus datos y a las preguntas que estás intentando responder. ¡Buena suerte con tus análisis espaciales!

P.S. Si quieres revisar código en detalle, visita mi perfil de GitHub.

--

--

Xavier Jacome P.

Analytics Team Lead. Master in Market Research, certified in Data Science by IBM and Advanced Google Analytics.