CÓMO CALCULAR DISTANCIAS ENTRE 2 PUNTOS EN MYSQL

Las aplicaciones modernas necesitan ubicar localizaciones dentro de un radio determinado. MySQL incluye funciones espaciales nativas que permiten calcular distancias reales sobre la superficie de la Tierra de forma eficiente, sin tener que implementar manualmente la fórmula de Haversine.

Ejemplo en MySQL

Existe una tabla "lugares" con una columna "ubicacion" de tipo "POINT", idealmente con SRID 4326 en MySQL 8+.

-- Definir la ubicación de referencia (ejemplo: Ciudad de México)
-- Orden: longitud, latitud
SET @MiUbicacion = POINT(-99.1332, 19.4326);

-- Buscar lugares dentro de un radio de 5000 metros (5 km)
SELECT nombre, ST_Distance_Sphere(ubicacion, @MiUbicacion) AS distancia
FROM lugares
WHERE ST_Distance_Sphere(Ubicacion, @MiUbicacion) <= 5000
ORDER BY distancia;
Versión alternativa con SRID 4326, recomendada en MySQL 8+:

SET @MiUbicacion = ST_GeomFromText('POINT(-99.1332 19.4326)', 4326);
SELECT nombre, ST_Distance_Sphere(Ubicacion, @MiUbicacion) AS distancia
FROM lugares
WHERE  ST_Distance_Sphere(Ubicacion, @MiUbicacion) <= 5000
ORDER BY distancia;
También se puede usar "ST_Distance()" con geometrías que tengan SRID 4326, en MySQL 8+ calcula distancia geodésica sobre el elipsoide.

Resultado

  • "claveST_Distance_Sphere()" devuelve la distancia real en metros.
  • No necesitas escribir fórmulas matemáticas complejas.
  • Es nativo, preciso y eficiente para aplicaciones reales.
  • Ideal para filtrar por radio y ordenar por cercanía.

Consejos prácticos

  • Almacena siempre las coordenadas como POINT(longitud, latitud).
  • Crea un índice espacial (SPATIAL INDEX) sobre la columna de ubicación para mejorar el rendimiento en tablas grandes.
  • En versiones anteriores a MySQL 5.7.6 no existe ST_Distance_Sphere; en ese caso se puede usar la fórmula de Haversine manualmente.