Ir al contenido principal

    PostGIS para seguridad vehicular: Consultas espaciales que protegen comunidades

    8 min lecturatecnicoPostGISdatos espaciales

    Cuando tu producto necesita responder preguntas como “en que comuna ocurrio este evento?”, “cuales son las zonas con mas incidentes?” o “que areas tienen un patron de riesgo creciente?”, necesitas algo mas que una base de datos relacional. Necesitas una base de datos que entienda geografia.

    PostGIS es la extension de PostgreSQL que hace exactamente eso. En Lominic, PostGIS es el motor detras de cada funcionalidad espacial: desde determinar a que division administrativa pertenece un punto, hasta generar los heatmaps anonimizados que muestran zonas de riesgo sin comprometer la privacidad. En este articulo compartimos los patrones que aprendimos trabajando con datos espaciales a escala regional.

    Por que PostGIS (y no una solucion custom)

    Antes de PostGIS, evaluamos varias alternativas: calcular distancias manualmente en el codigo de la aplicacion, usar APIs externas de geocodificacion, o implementar un servicio espacial separado. Todas tenian el mismo problema: movian la logica geografica fuera de donde viven los datos.

    PostGIS resuelve esto de raiz. Las consultas espaciales se ejecutan directamente en la base de datos, junto a los datos que necesitan. No hay llamadas de red adicionales, no hay sincronizacion entre servicios, y PostgreSQL se encarga de optimizar los planes de ejecucion aprovechando indices espaciales.

    Ademas, PostGIS es un proyecto maduro con mas de 20 anos de desarrollo. Implementa el estandar OGC Simple Features, soporta multiples sistemas de coordenadas, y ofrece cientos de funciones espaciales optimizadas. No teniamos razon para reinventar esa rueda.

    Point-in-polygon: clasificar eventos por zona

    El caso de uso mas fundamental en seguridad vehicular es determinar a que zona pertenece un evento. Cuando un usuario escanea una placa en una esquina de Santiago, necesitamos saber instantaneamente en que comuna ocurrio — no para rastrear al usuario, sino para agregar el dato a las estadisticas de esa zona.

    PostGIS resuelve esto con funciones como ST_Contains y ST_Within, que determinan si un punto (la ubicacion del evento) esta dentro de un poligono (el limite de una comuna, departamento o estado). La operacion es simple en concepto, pero la complejidad esta en la escala.

    Cuando operas en 17 paises, la cantidad de poligonos administrativos se mide en miles. Cada pais tiene sus propias divisiones: Chile tiene regiones y comunas, Colombia tiene departamentos y municipios, Mexico tiene estados y delegaciones. En total, manejamos miles de poligonos con geometrias que pueden tener cientos de vertices cada uno.

    Sin indices espaciales, una consulta point-in-polygon contra miles de poligonos podria tomar segundos. Con un indice GiST (Generalized Search Tree), PostGIS reduce el espacio de busqueda dramaticamente: primero filtra por bounding box (un rectangulo que envuelve cada poligono) y solo luego verifica la geometria exacta. El resultado es una consulta que responde en milisegundos, incluso con la complejidad geometrica de toda America Latina.

    Heatmaps: agregacion espacial en la base de datos

    Los mapas de zonas calientes son una de las funcionalidades mas visibles del producto. Pero generar un heatmap no es simplemente poner puntos en un mapa — es un proceso de agregacion espacial que debe equilibrar utilidad, rendimiento y privacidad.

    PostGIS permite hacer esta agregacion directamente en SQL. En lugar de enviar miles de puntos individuales al cliente para que los agregue, la base de datos agrupa los datos en celdas de una grilla espacial y calcula la intensidad de cada celda. El cliente recibe solo las celdas con sus pesos — un volumen de datos ordenes de magnitud menor.

    La funcion ST_SnapToGrid es clave para esto: redondea las coordenadas de cada punto a la celda mas cercana de una grilla definida, permitiendo agrupar con un simple GROUP BY. Combinado con ST_MakeEnvelope para filtrar por viewport (el area visible del mapa), la consulta solo procesa los datos relevantes para lo que el usuario esta viendo.

    Para la anonimizacion, PostGIS facilita aplicar umbrales minimos: las celdas con menos de un numero determinado de eventos se filtran directamente en la consulta SQL, antes de que cualquier dato salga de la base de datos. Esto garantiza que lo que el cliente recibe ya esta anonimizado — no hay datos individuales que proteger porque nunca salieron de la base de datos.

    Clustering: identificar zonas calientes automaticamente

    Mas alla de visualizar datos en un mapa, necesitamos identificar automaticamente las zonas con mayor concentracion de incidentes — lo que llamamos zonas calientes o hot zones. Esto es util tanto para los usuarios (saber que zonas evitar) como para las municipalidades (priorizar recursos de seguridad).

    PostGIS ofrece funciones de clustering como ST_ClusterDBSCAN, que implementa el algoritmo DBSCAN directamente en SQL. DBSCAN es particularmente apropiado para datos espaciales porque no requiere especificar el numero de clusters de antemano — los descubre automaticamente basandose en la densidad de puntos.

    Cada cluster resultante se puede caracterizar con funciones adicionales de PostGIS: ST_Centroid para calcular el centro geografico, ST_ConvexHull para obtener el perimetro que los envuelve, y consultas de agregacion para determinar horarios pico, dias de mayor frecuencia y radio efectivo del cluster.

    Lo poderoso de hacer clustering en la base de datos es que se puede parametrizar facilmente. Una municipalidad puede querer clusters mas estrictos (alta densidad, radio pequeno) para intervenciones focalizadas, mientras que un analisis regional puede usar parametros mas amplios para detectar tendencias macro. Los mismos datos, la misma funcion, distintos parametros.

    Indices espaciales: la diferencia entre segundos y milisegundos

    Todo lo anterior funciona gracias a los indices espaciales. Sin ellos, cada consulta tendria que comparar cada punto contra cada poligono — una operacion O(n*m) que escala terriblemente. Con indices GiST, PostGIS construye un arbol R-tree que permite descartar rapidamente las geometrias que no intersectan.

    En la practica, aprendimos tres lecciones sobre indices espaciales que no son obvias desde la documentacion.

    El indice debe coincidir con el tipo de consulta. Un indice en geometrias 2D no ayuda si la consulta usa geografia 3D (con altitud). Parece obvio, pero es facil mezclar tipos cuando se trabaja con datos de diferentes fuentes.

    El ANALYZE es critico despues de cargas masivas. Cuando cargamos los poligonos administrativos de un pais nuevo, las estadisticas del planificador de consultas quedan desactualizadas. Sin un ANALYZE explicito, PostgreSQL puede elegir planes de ejecucion suboptimos durante horas hasta que el auto-analyze se ejecute.

    Las geometrias simplificadas aceleran consultas de filtrado. Para consultas donde la precision milimetrica no importa (como filtrar eventos por viewport), usar ST_Simplify en los poligonos de las divisiones administrativas reduce el costo computacional sin afectar la precision perceptible del resultado.

    Escalando a 17 paises: lecciones practicas

    Operar con datos espaciales de 17 paises presenta desafios que no aparecen cuando trabajas con un solo pais.

    Los sistemas de coordenadas importan. Aunque usamos WGS84 (SRID 4326) como estandar para almacenar todas las coordenadas, los calculos de distancia precisa requieren proyecciones locales. La distancia entre dos puntos calculada en grados no es igual cerca del ecuador que cerca de los tropicos. Para calculos de distancia usamos geography en lugar de geometry, lo que le dice a PostGIS que trabaje sobre la esfera terrestre real.

    La calidad de los poligonos varia enormemente. Los limites administrativos de Chile estan disponibles con alta precision desde fuentes oficiales. Los de algunos paises centroamericanos pueden tener menos precision o estar desactualizados. Validar y normalizar las geometrias (con ST_MakeValid) antes de cargarlas es un paso que no se puede omitir.

    El particionamiento por pais mejora el rendimiento. En lugar de tener todas las divisiones administrativas en una sola tabla, particionar por pais permite que las consultas que solo afectan a un pais trabajen con un subconjunto mucho menor de datos. PostgreSQL es inteligente con el partition pruning — si la consulta incluye un filtro de pais, automaticamente ignora las particiones irrelevantes.

    Lo que recomendamos a otros equipos

    Si estas evaluando PostGIS para un proyecto con datos espaciales, estas son las recomendaciones que nos hubiera gustado tener al empezar.

    Empieza con PostGIS antes de necesitarlo. Agregar la extension a una base de datos PostgreSQL existente es trivial. Tener la capacidad espacial disponible desde el inicio evita migraciones complejas cuando eventualmente la necesites.

    Encapsula las consultas espaciales en funciones SQL. Las consultas espaciales tienden a ser complejas y repetitivas. Encapsularlas como funciones (RPCs) de la base de datos las hace reutilizables, testeables y permite optimizarlas sin modificar el codigo de la aplicacion.

    Testea con datos reales, no con rectangulos. Los poligonos del mundo real tienen irregularidades, agujeros, bordes compartidos y vertices cercanos. Un test con un cuadrado perfecto no detecta los problemas que aparecen con la geometria real de una comuna costera o una frontera entre paises.

    Monitorea las consultas espaciales. Las consultas que involucran geometrias complejas pueden consumir mas CPU y memoria que las consultas relacionales tipicas. Monitorear el tiempo de ejecucion y el uso de recursos de las funciones espaciales es esencial para mantener el rendimiento a medida que los datos crecen.

    Preguntas frecuentes

    Que es PostGIS y por que se usa en seguridad vehicular?

    PostGIS es una extension de PostgreSQL que agrega soporte para datos geograficos. Permite ejecutar consultas espaciales como determinar en que zona ocurrio un evento o calcular concentraciones de incidentes por area, funcionalidades esenciales para analizar patrones de seguridad.

    Se puede usar PostGIS con datos en tiempo real?

    Si. Con indices espaciales bien configurados, PostGIS responde consultas en milisegundos. Esto permite clasificar eventos y actualizar mapas de calor en tiempo real sin sacrificar rendimiento.

    PostGIS es gratuito?

    Si. PostGIS es software libre bajo licencia GPL, disponible en la mayoria de los servicios de bases de datos en la nube.


    PostGIS alimenta cada funcionalidad espacial de una plataforma que opera en 17 paises de America Latina. Explora el Mapa de Zonas Calientes para ver los datos espaciales en accion.

    Verifica cualquier vehiculo gratis

    Consulta si un vehiculo tiene encargo por robo en segundos. Gratis, sin registro y disponible 24/7.

    Descargar App