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).