Berechnen Sie den Abstand zwischen zwei Breiten-/Längenkoordinaten in SQL Server
Erstellen Sie eine SQL-Funktion, die die Entfernung zwischen Längen- und Breitengradkoordinaten in Meilen oder Kilometern berechnet
Kontext
Die Berechnung der Entfernung zwischen zwei Orten kann ziemlich schwierig sein, es gibt einige gute Artikel da draußen, aber diese Seite geht nur auf den Code ein.
Weitere Informationen darüber, wie Entfernungen auf einer Kugel berechnet werden, finden Sie in der Haversine-Formel auf Wikipedia . Sie ist etwas komplex, daher möchten wir den Inhalt nicht duplizieren.
Wir haben einen Teil dieses Codes online gefunden und ihn an eine SQL-Funktion angepasst, mit der Möglichkeit, nach Meilen oder Kilometern zu fragen.
Dies berechnet nur "Luftlinie", wurde jedoch als Teil einer App getestet, die wir auf einem IPhone erstellt hatten, und die Entfernungen waren genau richtig.
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