Calcule la distancia entre dos coordenadas de latitud / longitud en SQL Server
Cree una función SQL que calcule la distancia entre las coordenadas de latitud / longitud en millas o kilómetros
Contexto
Calcular la distancia entre dos lugares puede ser bastante complicado, hay algunos buenos artículos por ahí, sin embargo, esta página solo incluirá el código.
Para obtener más información sobre cómo se calculan las distancias en una esfera, eche un vistazo a Haversine Formula en Wikipedia , es un poco complejo, por lo que no queremos duplicar el contenido.
Encontramos algo de este código en línea y lo hemos adaptado a una función SQL, con la capacidad de pedir millas o kilómetros.
Esto solo se calcula "en línea recta", sin embargo, se probó como parte de una aplicación que habíamos construido en un iPhone y las distancias fueron acertadas.
SQL Server
CREATE FUNCTION CoordinateDistanceMiles(@Latitude1 float,@Longitude1 float,@Latitude2 float,@Longitude2 float,@Distance NVARCHAR(10))RETURNS FLOATAS BEGIN-- CONSTANTSDECLARE @EarthRadiusInMiles FLOAT=(CASE @Distance WHEN 'Miles' THEN 3959 WHEN 'Kilometers' THEN 6371 ELSE 0 END);DECLARE @PI FLOAT=PI();DECLARE @lat1Radians FLOAT=@Latitude1 * @PI / 180DECLARE @long1Radians FLOAT=@Longitude1 * @PI / 180;DECLARE @lat2Radians FLOAT=@Latitude2 * @PI / 180;DECLARE @long2Radians FLOAT=@Longitude2 * @PI / 180;RETURN Acos(Cos(@lat1Radians)*Cos(@long1Radians)*Cos(@lat2Radians)*Cos(@long2Radians)+Cos(@lat1Radians)*Sin(@long1Radians)*Cos(@lat2Radians)*Sin(@long2Radians)+Sin(@lat1Radians)*Sin(@lat2Radians)) * @EarthRadiusInMiles;END