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;