Get it on Google Play
Tu partner Freelance para tus proyectos IT

Análisis de datos con MariaDB desde 0: Trabajando con datos GPS

23-12-2020
GPS distance in MariaDB

GPS distance in MariaDB

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 😀

Si te ha servido, por favor comparte
 

Leave a Reply