Modelado físico avanzado relacional de bases de datos
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. ST_GeomFromText() - 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. ST_AsText() - 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. ST_Distance() - 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. ST_Contains() - 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. ST_Intersects() - 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. ST_Area() - 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. ST_Buffer() - 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).