Calculer la distance entre deux coordonnées de latitude / longitude dans SQL Server
Créez une fonction SQL qui calcule la distance entre les coordonnées de latitude / longitude en miles ou en kilomètres
Le contexte
Calculer la distance entre deux endroits peut être assez délicat, il existe de bons articles, mais cette page n'entrera que dans le code.
Pour plus d'informations sur la façon dont les distances sont calculées sur une sphère, jetez un œil à Haversine Formula sur Wikipédia , c'est un peu complexe, nous ne voulons donc pas dupliquer le contenu.
Nous avons trouvé une partie de ce code en ligne et l'avons adapté à une fonction SQL, avec la possibilité de demander des miles ou des kilomètres.
Cela ne calcule que "à vol d'oiseau", mais il a été testé dans le cadre d'une application que nous avions construite sur un iPhone et les distances étaient parfaites.
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