Fundamentos de PostGIS
PostGIS es una extensión de Postgres que enseña a la base de datos cómo almacenar, comparar y buscar formas en el espacio, no solo filas de valores escalares.
Esta página construye el modelo conceptual detrás de eso: qué es realmente un sistema de referencia de coordenadas, por qué geometry y geography existen como tipos separados y cómo el indexado espacial hace que "qué está cerca" sea una pregunta rápida en lugar de un escaneo completo de la tabla.
Resumen
- PostGIS añade tipos y operadores espaciales a Postgres para que "dónde" se convierta en una propiedad consultable e indexable de una fila, al igual que "cuándo" o "cuánto".
- Por qué es Importante: Las características conscientes de la ubicación, como las zonas de entrega, la geocercas y la búsqueda de proximidad, necesitan almacenamiento e indexación conscientes de la geometría que una columna numérica simple no puede proporcionar.
- Conceptos Clave: sistema de referencia de coordenadas (CRS), SRID, geometry, geography, índice espacial, GiST.
- Cuándo Usar: Utiliza este modelo mental al decidir cómo razonar sobre los SRID, al explicar por qué los índices espaciales se comportan de manera diferente a los índices B-tree, o al incorporar a alguien nuevo en el modelado de datos espaciales.
- Limitaciones / Compensaciones: La corrección espacial depende completamente del seguimiento constante de los sistemas de referencia de coordenadas, y equivocarse en eso produce resultados que parecen plausibles pero que son silenciosamente incorrectos.
- Temas Relacionados: tipos geometry vs geography, indexación espacial GiST, ajuste de rendimiento de PostGIS, arquitectura de servidores de tiles.
Fundamentos
Un par de números como (-73.99, 40.75) no es una ubicación por sí solo; solo es una ubicación una vez que se sabe en qué sistema de coordenadas se miden esos números.
Ese sistema de coordenadas se llama sistema de referencia de coordenadas, o CRS, y define el origen, las unidades y la forma del modelo de la tierra contra el cual se grafican los números.
PostGIS identifica cada CRS con un SRID numérico, y el más común para GPS y mapas web es el SRID 4326, que representa latitud y longitud crudas en el modelo WGS84 de la tierra.
Cada valor de geometry o geography en PostGIS lleva su SRID consigo, por lo que dos formas solo pueden compararse de manera significativa una vez que la base de datos sabe que comparten, o pueden convertirse a, el mismo sistema de referencia.
PostGIS representa datos espaciales con dos tipos conceptualmente diferentes, y la diferencia no es cosmética.
geometry trata la tierra como un plano y realiza sus cálculos con geometría plana ordinaria, lo que es rápido y preciso siempre que el área cubierta sea lo suficientemente pequeña como para que la planitud sea una aproximación razonable.
geography trata la tierra como una esfera o esferoide y realiza sus cálculos con cálculos geodésicos, lo que se mantiene preciso a largas distancias a costa de más cómputo.
Una analogía útil es un mapa de papel frente a un globo terráqueo: un mapa de papel (geometry) es simple y rápido de medir, pero se distorsiona a medida que el área se agranda, mientras que un globo terráqueo (geography) se mantiene preciso en todas partes pero requiere más trabajo para calcular.
Elegir entre ellos es realmente una elección sobre cuánta curvatura de la tierra deben respetar los datos, no una elección sobre qué tipo es "mejor".
La mecánica profunda de esa elección, incluido qué SRID elegir para cada caso de uso, pertenece a la comparación de geometry vs geography en otra parte de esta sección, y esta página solo necesita la división conceptual para construir sobre ella.
Mecánicas e Interacciones
PostGIS no existe como una base de datos espacial separada conectada a Postgres, existe como tipos y operadores registrados dentro del propio sistema de extensibilidad de Postgres.
Eso es importante porque significa que las columnas espaciales participan en las mismas transacciones, copias de seguridad y replicación que todas las demás columnas de la misma tabla.
Buscar "todo dentro de 5 kilómetros" de forma ingenua requeriría calcular una distancia exacta contra cada fila de una tabla, lo que no escala.
El indexado espacial existe para evitar eso, y funciona con una idea de dos fases: primero reducir los candidatos de manera económica, luego confirmar con precisión.
La primera fase económica reemplaza cada forma compleja con su bounding box (caja delimitadora), el rectángulo más pequeño que la contiene por completo, ya que comparar rectángulos es mucho más económico que comparar polígonos.
El método de acceso GiST (Generalized Search Tree) de Postgres es lo que convierte esa primera fase en un índice en lugar de un escaneo, organizando las cajas delimitadoras en un árbol donde las formas cercanas se agrupan en las mismas ramas.
Un índice espacial GiST elimina rápidamente las formas cuyas cajas delimitadoras no pueden satisfacer la consulta, dejando solo un pequeño conjunto de candidatos.
La segunda fase luego ejecuta la prueba geométrica exacta, como ST_DWithin o ST_Intersects, solo contra ese pequeño conjunto de candidatos para obtener una respuesta precisa.
Este patrón de dos fases es la razón por la que las consultas espaciales escalan: las costosas matemáticas exactas solo se ejecutan contra un puñado de filas en lugar de toda la tabla.
-- Conceptualmente, un predicado espacial se responde en dos fases:
-- 1. GiST reduce por superposición de cajas delimitadoras (el operador &&)
-- 2. La función exacta confirma la forma real
SELECT id FROM stores
WHERE geom && ST_Expand(:query_point, 5000) -- prefiltro económico de caja delimitadora
AND ST_DWithin(geom, :query_point, 5000); -- confirmación geométrica exactaEsta es también la razón por la que un índice espacial no se parece en nada a un B-tree: un B-tree asume que los valores se ordenan en una sola línea, mientras que GiST asume que los valores se superponen en un espacio multidimensional y no tiene un orden de clasificación único para apoyarse.
Consideraciones Avanzadas y Aplicaciones
El sistema de tipos de PostGIS se generaliza más allá de geometry y geography a extensiones opcionales como postgis_topology para redes de bordes compartidos y postgis_raster para imágenes basadas en cuadrículas, y cada una extiende la misma idea central de datos espaciales tipificados con operadores e índices coincidentes.
Los errores del sistema de referencia de coordenadas son una de las fallas de producción más comunes en los sistemas espaciales, porque una consulta que mezcla SRID 4326 con un SRID proyectado puede devolver silenciosamente distancias numéricamente válidas pero geográficamente sin sentido.
A gran escala, almacenar cada forma con precisión total impone un costo real de índice y E/S, y simplificar las geometrías antes de indexarlas es una forma común de mantener económico el prefiltro de caja delimitadora sin cambiar el modelo de datos subyacente.
Los sistemas espaciales suelen dividir las responsabilidades entre Postgres como sistema transaccional de registro y un servidor de tiles dedicado para la renderización, porque PostGIS se optimiza para la corrección y las uniones, no para transmitir tiles de mapas pre-renderizados a un alto volumen de solicitudes.
La observabilidad de las características espaciales debe incluir auditoría de SRID y comprobaciones de ST_IsValid en la geometría ingerida, porque las formas inválidas o desajustadas tienden a fallar silenciosamente en lugar de lanzar errores obvios.
La línea arquitectónica es la misma que demuestra pgvector en otras partes de esta pila: una extensión obtiene un rendimiento real al extender el marco de tipos, operadores e índices existente de Postgres en lugar de trabajar en torno a él.
| Enfoque | Fortaleza | Debilidad | Mejor Ajuste |
|---|---|---|---|
| Columnas numéricas crudas de lat/lon | Simple, no requiere extensión | Sin indexación espacial ni operadores geométricos | Almacenar un solo punto sin consultas de proximidad |
| PostGIS geometry/geography con GiST | Consultas espaciales rápidas, indexadas y exactas dentro de transacciones | Requiere disciplina de SRID y mantenimiento de índices | Zonas de entrega, geocercas, uniones espaciales |
| Motor GIS externo o servicio de tiles | Optimizado para renderización y protocolos OGC estándar | Sistema separado, eventualmente consistente con Postgres | Servicio de tiles de mapas de alto volumen |
Conceptos Erróneos Comunes
- "Un par de latitud y longitud es una ubicación completa" - la realidad es que las coordenadas no tienen sentido sin un sistema de referencia de coordenadas conocido, que es exactamente lo que registra el SRID.
- "geometry y geography son intercambiables" - la realidad es que codifican diferentes modelos de la tierra, y usar el incorrecto para la distancia incorrecta produce resultados que parecen válidos pero son incorrectos.
- "Los índices espaciales funcionan como índices B-tree en coordenadas" - la realidad es que GiST indexa la superposición multidimensional, sin un orden de clasificación único, por lo que se comporta de manera fundamentalmente diferente.
- "Un índice por sí solo garantiza resultados espaciales correctos" - la realidad es que GiST solo reduce los candidatos por caja delimitadora, y la función geométrica exacta aún tiene que confirmar la respuesta real.
- "PostGIS reemplaza la necesidad de un servidor de tiles" - la realidad es que PostGIS está optimizado para almacenamiento, uniones y corrección, no para entrega de tiles renderizados de alto volumen.
Preguntas Frecuentes
¿Qué añade realmente PostGIS a Postgres?
Añade tipos espaciales, operadores espaciales e indexación espacial para que "dónde" se convierta en una propiedad de primera clase y consultable de una fila.
¿Por qué un par de latitud y longitud crudas no significa nada por sí solo?
Porque los mismos números pueden describir ubicaciones del mundo real diferentes dependiendo de en qué sistema de referencia de coordenadas se midieron, razón por la cual cada valor de PostGIS lleva un SRID.
¿Qué es un SRID, en términos sencillos?
Es un identificador numérico para un sistema de referencia de coordenadas específico, que le dice a Postgres exactamente cómo interpretar las coordenadas de una forma.
¿Por qué PostGIS tiene dos tipos espaciales en lugar de uno?
geometry modela la tierra como un plano para cálculos locales rápidos, mientras que geography la modela como una esfera para cálculos de larga distancia precisos, y cada uno se adapta a una escala de problemas diferente.
¿Cómo hace un índice espacial que las consultas de proximidad sean rápidas?
- Primero reemplaza cada forma con su caja delimitadora, que es barata de comparar.
- Luego ejecuta la prueba geométrica exacta solo contra el pequeño conjunto de candidatos que sobreviven a ese filtro económico.
¿Por qué se usa GiST en lugar de un B-tree para datos espaciales?
B-tree asume que los valores se ordenan en una sola línea, pero las formas espaciales se superponen en múltiples dimensiones sin un orden natural único, que es exactamente la estructura que GiST está construido para indexar.
¿Un índice espacial garantiza por sí solo una respuesta exacta?
No, el índice solo reduce los candidatos por caja delimitadora, y la consulta aún necesita una función exacta como ST_DWithin para confirmar la respuesta geométrica real.
¿Qué sucede si se comparan directamente dos geometrías con SRID diferentes?
La comparación se rechaza o es silenciosamente sin sentido, por lo que transformar a un sistema de referencia compartido antes de la comparación es importante.
¿Cuándo debería un equipo optar por geography en lugar de geometry?
Cuando las distancias necesitan mantenerse precisas en un área amplia, como las consultas de radio GPS globales, los cálculos esféricos de geography evitan la distorsión que la geometría plana introduce a esa escala.
¿Por qué PostGIS no suele ser el sistema que renderiza tiles de mapas?
PostGIS está optimizado para almacenamiento transaccional, uniones espaciales y corrección, mientras que la renderización de mapas favorece un pipeline dedicado y amigable con la caché construido para ese único trabajo.
¿Cuál es el error espacial más común en el mundo real?
Mezclar sistemas de referencia de coordenadas, como calcular la distancia en geometría 4326 no proyectada y leer el resultado como metros cuando en realidad son grados.
¿Añadir más precisión espacial siempre ayuda al rendimiento de las consultas?
No, las formas de mayor precisión o más complejas hacen que el prefiltro de caja delimitadora sea menos selectivo y aumentan el costo de índice y almacenamiento, por lo que la simplificación a menudo vale la pena a escala.
Relacionados
- Conceptos básicos de PostGIS - instalar la extensión y elegir entre Postgres y un servidor de tiles.
- Geometry vs Geography - la comparación completa de tipos y SRID que esta página solo resume.
- Índices Espaciales - creación concreta de índices GiST y patrones de consulta.
- Rendimiento de PostGIS - técnicas de simplificación y prefiltro de caja delimitadora a escala.
- Conceptos básicos de extensiones - cómo funciona realmente el sistema de extensiones al que se conecta PostGIS.
Versiones de la pila: Esta página fue escrita para PostGIS 3.5+. Por lo demás, es conceptual y no está vinculada a una versión menor específica de PostgreSQL.