CAMPOS ESPACIALES EN MYSQL: DATOS GEOGRÁFICOS Y EJEMPLOS

MySQL soporta datos espaciales y funciones espaciales, lo que te permite trabajar con datos geográficos y geométricos. Los campos espaciales en mysql incluyen Point, LineString, Polygon, entre otros. Aquí tienes una breve descripción de cómo trabajar con datos espaciales en MySQL. Un ejemplo
CREATE TABLE ubicaciones (
id INT AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(255),
coordenadas POINT //Reresenta un campo geográfico
);
INSERT INTO ubicaciones (nombre, coordenadas) VALUES
('Ubicación A', POINT(40.7128, -74.0060)),
('Ubicación B', POINT(34.0522, -118.2437)),
('Ubicación C', POINT(51.5074, -0.1278));
Una vez que se han introducido datos veamos una consulta con datos espaciales:
SELECT id, nombre, ST_DISTANCE(coordenadas, POINT(40.7128, -74.0060)) AS distancia
FROM ubicaciones
WHERE ST_DISTANCE(coordenadas, POINT(40.7128, -74.0060)) < 500;
En el ejemplo anterior, ST_DISTANCE calcula la distancia entre las coordenadas almacenadas y un punto de referencia. Hay que ajustar la condición y la distancia según las necesidades del proyecto.

Funciones Espaciales

Algunas funciones espaciales comunes:
  • ST_DISTANCE: Calcula la distancia entre dos geometrías.
  • ST_CONTAINS: Verifica si una geometría contiene a otra.
  • ST_INTERSECTS: Verifica se produce intersección entre dos geometrías.
  • ST_WITHIN: Verifica si una geometría está dentro de otra.
  • ST_Overlaps: ¿Se solapan?
  • ST_Touches: ¿Se tocan en el borde?
  • ST_Equals: ¿Son espacialmente iguales?
  • ST_Buffer: Crea un área alrededor de un punto/línea./li>
  • ST_Area: Calcula el área.
  • ST_Length: Longitud de una línea.
  • ST_Centroid (geom): Centroide de una geometría.
  • ST_AsText / ST_AsGeo: Convertir a texto o GeoJSON.
Tipos de datos espaciales simples
  • POINT: Representa una ubicación en un espacio 2D. Almacena punto.
  • LINESTRING: Una secuencia de puntos que forman una línea..
  • POLYGON: almacena un polígono.
Tipos de datos espaciales que soportan conjuntos de objetos:
  • MULTIPOINT: Almacena una colección de puntos.
  • MULTILINESTRING: Almacena una colección de objetos LineString.
  • MULTIPOLYGON: Una superficie formada por una o más líneas cerradas. Almacena una colección de polígonos.
  • GEOMETRYCOLLECTION: Colección de diferentes tipos de geometrías.
  • GEOMETRY: Almacena valores de cualquier tipo.

Obtener todas las ubicaciones dentro de un polígono específico
SELECT id, nombre
FROM ubicaciones
WHERE ST_WITHIN(coordenadas, POLYGON((...))); -- Reemplaza (...) con las coordenadas del polígono con el que se quieran hacer cálculos.

Indexar Datos Espaciales

Es recomendable crear un SPATIAL INDEX (índices espaciales) para campos espaciales, ya que mejora el rendimiento de las consultas geoespaciales. Sin embargo, estos índices tienen limitaciones, como que solo funcionan con tablas de tipo MyISAM o InnoDB (en versiones recientes). Ejemplo:

//Campo nombre y coordenadas tienen que estar a not null
CREATE SPATIAL INDEX idx_coordenadas ON ubicaciones (coordenadas);
Esto puede mejorar significativamente el rendimiento de las consultas espaciales.