Aprovechando el Poder de Geohash para un Análisis Geoespacial Innovador y Práctico

Xavier Jacome P.
3 min readMay 17, 2023

--

¡Hola a todos! Hoy, estoy emocionado de compartir con ustedes un caso de uso práctico e innovador de Geohash, un sistema de geocodificación de dominio público. Nos adentraremos en el mundo de los datos geoespaciales y aprenderemos cómo utilizar Geohash para una representación y análisis espaciales eficientes. Los datos que utilizaremos corresponden a las geometrías de las unidades educativas en Guayaquil, información pública presente en el portal de datos geoespaciales de la Municipalidad.

La técnica de Geohash es valiosa porque simplifica y acelera las operaciones espaciales, como la clasificación y búsqueda. En esta publicación, utilizaremos las bibliotecas de Python GeoPandas y Geohash para convertir la latitud y la longitud en códigos de geohash y luego crear polígonos correspondientes para su visualización.

import pandas as pd
import geopandas as gpd
import geohash
from tqdm import tqdm
from shapely.geometry import Polygon

Comenzamos cargando nuestros datos geoespaciales, que incluyen las coordenadas de las unidades educativas en Guayaquil. Previamente hemos descargado el set de datos. Aseguramos que los datos estén en el sistema de referencia de coordenadas (CRS) correcto — EPSG:4326, que representa el Sistema Geodésico Mundial utilizado en GPS.

coord_edu_gye = gpd.read_file(r'..\Equipamientos_Educativos.shp').to_crs('EPSG:4326')
coord_edu_gye.head()
Muestra de los datos de instituciones educativas en Guayaquil.

A continuación, extraemos la latitud y la longitud de los puntos de geometría.

coord_edu_gye['LATITUD'] = coord_edu_gye['geometry'].y
coord_edu_gye['LONGITUD'] = coord_edu_gye['geometry'].x

Ahora, definiremos dos funciones: compute_geohash para generar códigos de geohash a partir de la latitud y la longitud, y create_polygon para crear polígonos a partir de las cajas delimitadoras de geohash. La precisión utilizada en la primera función depende del caso de uso, para conocer más sobre las dimensiones según el nivel de precisión, visita mi post llamado “Comprendiendo la precisión de los códigos Geohash para la optimización de análisis espaciales”.

def compute_geohash(row):
return geohash.encode(row["LATITUD"], row["LONGITUD"], precision=7)

def create_polygon(row):
lat, lon, lat_err, lon_err = geohash.decode_exactly(row['GEOHASH_CODE'])
polygon = Polygon([ (lon - lon_err, lat - lat_err),
(lon + lon_err, lat - lat_err),
(lon + lon_err, lat + lat_err),
(lon - lon_err, lat + lat_err) ])
centroid = polygon.centroid
return pd.Series({'GEOHASH':row['GEOHASH_CODE'],'geometry': polygon, 'LATITUD': centroid.y, 'LONGITUD': centroid.x})

Aplicamos estas funciones a nuestro GeoDataFrame para obtener códigos de geohash y polígonos correspondientes. La función compute_geohash se aplica al dataframe coord_edu_gye, cuyo resultado se agregó como variable ‘GEOHASH_CODE’. La función create_polygonse utiliza sobre el dataframe coord_edu_gye, cuyo resultado se almacenó en el Geodataframe df_geohash.

coord_edu_gye["GEOHASH_CODE"] = coord_edu_gye.apply(compute_geohash, axis=1)
gdf_geohash = coord_edu_gye.apply(create_polygon, axis=1)

Para la visualización, convertimos el CRS a Web Mercator (EPSG:3857), trazamos el GeoDataFrame y añadimos un mapa base.

import contextily as ctx
import matplotlib.pyplot as plt

gdf_web_mercator = gdf_geohash.to_crs(epsg=3857)

ax = gdf_web_mercator.plot(figsize=(10, 10), alpha=0.5, edgecolor='k')
ctx.add_basemap(ax)
ax.axis('off')
plt.show()
Mapa de los polígonos Geohash generados.

Finalmente, creamos un mapa interactivo con la biblioteca Folium. Añadimos nuestros polígonos y marcadores para cada punto de nuestro GeoDataFrame.

import folium

m = folium.Map(location=[gdf_geohash['LATITUD'].mean(), gdf_geohash['LONGITUD'].mean()], zoom_start=13)

for _, row in gdf_geohash.iterrows():
geojson = folium.GeoJson(data=row['geometry'].__geo_interface__)
geojson.add_to(m)
folium.Marker([row['LATITUD'], row['LONGITUD']]).add_to(m)

m
Visualización de mapa interactivo que presenta polígonos Geohash generados y la coordenada de las instituciones educativas.

¡Y listo! Hemos aprovechado el poder de Geohash para el análisis espacial, haciendo el proceso más eficiente y manejable. Este enfoque puede extenderse a varios otros casos de uso que involucran datos geoespaciales. El mundo de Geohash es vasto y exploratorio, y apenas hemos arañado la superficie. ¡Feliz exploración!

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.