Funciones Geoespaciales
Las funciones geoespaciales en SQL permiten manejar datos geográficos, calcular distancias, determinar intersecciones y realizar análisis espaciales. Estas funciones están disponibles en bases de datos como PostgreSQL (con la extensión PostGIS) y MySQL (con Spatial Functions).
1. STGeomFromText() - Crear Geometrías desde Texto #
Convierte una cadena en formato WKT (Well-Known Text) en un objeto geométrico.
Ejemplo: #
1-- MySQL 2SELECT ST_GeomFromText('POINT(10 20)');
1-- PostgreSQL (PostGIS requerido) 2SELECT ST_GeomFromText('POINT(10 20)');
Esto crea un punto en las coordenadas (10, 20).
2. STAsText() - Convertir Geometría a Texto WKT #
Devuelve la representación en formato WKT de una geometría.
Ejemplo: #
1-- MySQL, PostgreSQL 2SELECT ST_AsText(ST_GeomFromText('POINT(10 20)'));
Esto devuelve 'POINT(10 20)'.
3. STDistance() - Calcular la Distancia entre Dos Geometrías #
Devuelve la distancia entre dos puntos en el mismo sistema de coordenadas.
Ejemplo: #
1-- MySQL 2SELECT ST_Distance(ST_GeomFromText('POINT(10 20)'), ST_GeomFromText('POINT(30 40)'));
1-- PostgreSQL (PostGIS) 2SELECT ST_Distance(ST_GeomFromText('POINT(10 20)'), ST_GeomFromText('POINT(30 40)'));
Esto calcula la distancia euclidiana entre los dos puntos.
4. STContains() - Determinar si una Geometría Contiene a Otra #
Devuelve TRUE si una geometría contiene completamente a otra.
Ejemplo: #
1-- MySQL 2SELECT ST_Contains(ST_GeomFromText('POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))'), ST_GeomFromText('POINT(5 5)'));
1-- PostgreSQL (PostGIS) 2SELECT ST_Contains(ST_GeomFromText('POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))'), ST_GeomFromText('POINT(5 5)'));
Esto devuelve TRUE porque el punto (5,5) está dentro del polígono.
5. STIntersects() - Comprobar si Dos Geometrías se Cruzan #
Determina si dos geometrías tienen algún punto en común.
Ejemplo: #
1-- MySQL 2SELECT ST_Intersects(ST_GeomFromText('LINESTRING(0 0, 10 10)'), ST_GeomFromText('LINESTRING(5 5, 15 15)'));
1-- PostgreSQL (PostGIS) 2SELECT ST_Intersects(ST_GeomFromText('LINESTRING(0 0, 10 10)'), ST_GeomFromText('LINESTRING(5 5, 15 15)'));
Esto devuelve TRUE si las líneas se cruzan.
6. STArea() - Calcular el Área de una Geometría #
Devuelve el área de un polígono en unidades de su sistema de referencia.
Ejemplo: #
1-- MySQL 2SELECT ST_Area(ST_GeomFromText('POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))'));
1-- PostgreSQL (PostGIS) 2SELECT ST_Area(ST_GeomFromText('POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))'));
Esto devuelve 100, que es el área del cuadrado definido.
7. STBuffer() - Crear un Área de Influencia (Buffer) #
Genera una nueva geometría que representa un área alrededor de la original.
Ejemplo: #
1-- PostgreSQL (PostGIS) 2SELECT ST_Buffer(ST_GeomFromText('POINT(10 20)'), 5);
Esto crea un círculo con radio 5 alrededor del punto (10,20).
Resumen del tema
Conceptos clave #
- Formato WKT y Conversión:
ST_GeomFromText()convierte cadenas de texto estándar (comoPOINT,LINESTRING,POLYGON) en geometrías espaciales nativas, yST_AsText()realiza el proceso inverso. - Cálculo de Distancias:
ST_Distance()calcula la distancia geométrica o geodésica entre dos objetos o coordenadas. - Relaciones Espaciales:
ST_Contains()determina si una geometría encierra completamente a otra, mientras queST_Intersects()comprueba si comparten algún punto en común. - Medición y Zonas de Influencia:
ST_Area()calcula la superficie de polígonos yST_Buffer()genera un polígono envolvente alrededor de una geometría con un radio determinado.
Qué debes recordar #
Las funciones espaciales (mediante PostGIS o MySQL Spatial) permiten almacenar y consultar datos geográficos con índices espaciales específicos (como R-Tree o GiST) para un rendimiento óptimo.