UFN_COORDINATES_GETDISTANCEINMILES
Returns the distance in miles between to sets of coordinates.
Return
Return Type |
---|
decimal(19, 5) |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@LATITUDE1 | decimal(16, 13) | IN | |
@LONGITUDE1 | decimal(16, 13) | IN | |
@LATITUDE2 | decimal(16, 13) | IN | |
@LONGITUDE2 | decimal(16, 13) | IN |
Definition
Copy
CREATE function dbo.UFN_COORDINATES_GETDISTANCEINMILES(@LATITUDE1 decimal(16,13),
@LONGITUDE1 decimal(16,13),
@LATITUDE2 decimal(16,13),
@LONGITUDE2 decimal(16,13))
returns decimal(19, 5)
as
begin
declare @DISTANCEINMILES decimal(19, 5);
-- Haversine formula. Adapted from: http://www.codecodex.com/wiki/Calculate_Distance_Between_Two_Points_on_a_Globe#MSSQL
declare @earthRadius Float(8);
declare @dLat Float(8);
declare @dLon Float(8);
declare @a Float(8);
declare @c Float(8);
declare @d Float(8);
set @earthRadius = 3958.75;
set @dLat = RADIANS(@LATITUDE2 - @LATITUDE1);
set @dLon = RADIANS(@LONGITUDE2 - @LONGITUDE1);
set @a = SIN(@dLat / 2) * SIN(@dLat / 2) + COS(RADIANS(@LATITUDE1))
* COS(RADIANS(@LATITUDE2)) * SIN(@dLon / 2) * SIN(@dLon / 2);
set @c = 2 * ASIN(MIN(SQRT(@a)));
set @DISTANCEINMILES = @earthRadius * @c;
return @DISTANCEINMILES;
end;