UFN_COORDINATES_GETDISTANCEINKILOMETERS
Returns the distance in kilometers 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_GETDISTANCEINKILOMETERS(@LATITUDE1 decimal(16,13),
@LONGITUDE1 decimal(16,13),
@LATITUDE2 decimal(16,13),
@LONGITUDE2 decimal(16,13))
returns decimal(19, 5)
as
begin
declare @DISTANCEINKILOMETERS 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 = 6371;
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 @DISTANCEINKILOMETERS = @earthRadius * @c;
return @DISTANCEINKILOMETERS;
end;