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