Calcola la distanza tra due coordinate in SQL
Crea una funzione SQL che calcola la distanza tra le coordinate di latitudine/longitudine in miglia o chilometri
Contesto
Calcolare la distanza tra due luoghi può essere piuttosto complicato, ci sono alcuni buoni articoli là fuori, tuttavia questa pagina andrà solo nel codice.
Per ulteriori informazioni su come vengono calcolate le distanze su una sfera, dai un'occhiata a Haversine Formula su Wikipedia , è un po' complesso, quindi non vogliamo duplicare il contenuto.
Abbiamo trovato parte di questo codice online e lo abbiamo adattato a una funzione SQL, con la possibilità di chiedere miglia o chilometri.
Questo calcola solo "in linea d'aria", tuttavia è stato testato come parte di un'app che avevamo costruito su un iPhone e le distanze erano esatte.
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