Si queremos saber la distancia entre dos coordenadas GPS, por ejemplo, para la clásica aplicación tipo Tinder que te devuelve un listado de personas que se encuentran a menos de X distancia de ti, tenemos las siguientes opciones.
En MySql tenemos la función ‘ST_Distance_Sphere’ que te devuelve la distancia en metros entre dos puntos. Lamentablemente, en MariaDB no tenemos esta función disponible, pero nos la podemos crear:
CREATE DEFINER=`root`@`%` FUNCTION `earth_circle_distance`(point1 point, point2 point) RETURNS double DETERMINISTIC begin declare lon1, lon2 double; declare lat1, lat2 double; declare td double; declare d_lat double; declare d_lon double; declare a, c, R double; set lon1 = X(GeomFromText(AsText(point1))); set lon2 = X(GeomFromText(AsText(point2))); set lat1 = Y(GeomFromText(AsText(point1))); set lat2 = Y(GeomFromText(AsText(point2))); set d_lat = radians(lat2 - lat1); set d_lon = radians(lon2 - lon1); set lat1 = radians(lat1); set lat2 = radians(lat2); set R = 6372.8; -- in kilometers set a = sin(d_lat / 2.0) * sin(d_lat / 2.0) + sin(d_lon / 2.0) * sin(d_lon / 2.0) * cos(lat1) * cos(lat2); set c = 2 * asin(sqrt(a)); return R * c; end
Una vez creada ya podemos conseguir la distancia de dos puntos sobre el globo terrestre(En este caso en kilometros). Si quiero saber la distancia entre Girona y Barcelona lo hago de la siguiente manera:
select earth_circle_distance( POINT(41.979401,2.821426), /* Girona */ POINT(41.390205,2.154007) /* Barcelona */ );
Así de fácil, el nuevo Tinder esta cerca 😀