5:25 0 0
Funcion SQL para calcular la distancia entre dos puntos geograficos

Funcion SQL para calcular la distancia entre dos puntos geograficos

  Sergi |  febrero 242024

Una funcionalidad interesante que normalmente necesitamos es saber que direcciones están alrededor de mi dirección, y/o, de mi posición actual. Es por ello que podemos necesitar enviar estos datos al gestor de base de datos para que nos pueda devolver quien está a nuestro alrededor.

Para esto podemos crear una funcion en SQL que reciba los valores de latitud y longitud desde el punto de origen hasta los datos que tenemos almacenados en nuestra base de datos de cada dirección. Aquí os muesto esta pequeña función.

CREATE FUNCTION CalculateDistance
(
@lat1 FLOAT,
@lon1 FLOAT,
@lat2 FLOAT,
@lon2 FLOAT
)
RETURNS FLOAT
AS
BEGIN
DECLARE @R FLOAT = 6371; -- Earth Radio
DECLARE @dLat FLOAT = RADIANS(@lat2 - @lat1);
DECLARE @dLon FLOAT = RADIANS(@lon2 - @lon1);
DECLARE @a FLOAT = SIN(@dLat / 2) * SIN(@dLat / 2) + COS(RADIANS(@lat1)) * COS(RADIANS(@lat2)) * SIN(@dLon / 2) * SIN(@dLon / 2);
DECLARE @c FLOAT = 2 * ANT2(SQRT(@a), SQRT(1 - @a));
RETURN (@R * @c)
END

El valor @R representa una constante estándar del radio de la Tierra. Este valor lo he obtenido de wikipedia. He utilizado el radio medio, ya que puedes utilizar otros dos valores, el Ecuatorial de 6378.1 Km o el Polar de 6356.8 Km. Evidentemente esta función es una aproximación, pero suficiente para la mayoria de las aplicaciones que necesites.

Como utilizarlo

Para utilizar la funcion supongamos de una tabla llamada Address en la que dispongas de 2 columnas Latitude y Longitude donde tendremos almacenados los datos. Entonces creariamos una consulta como la que sigue.

DECLARE @addressLat FLOAT = 15.1600;
DECLARE @addressLon FLOAT = 120.5500;
SELECT dbo.CalculateDistance(@addressLat, @addressLon, Latitude, Longitude) FROM Address

Esto nos devolvería la distancia en Km desde las cooredenadas de una ciudad en Filipinas hasta donde sea.


0 Comentarios

 
 
 

Archivo