Blog de Gonzalo

CAMPOS ESPACIALES EN MYSQL

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.
Tipos de datos espaciales simples
  • POINT: almacena punto.
  • LINESTRING: almacena una cadena de puntos.
  • 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: almacena una colección de polígonos.
  • GEOMETRYCOLLECTION: almacena objetos geométricos de cualquier tipo.
  • 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

Para consultas espaciales eficientes, considera agregar índices espaciales a tus columnas:

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

Compartir en twitter