Thursday, October 18, 2012

UDF - Distence B/W two Lat Long

CREATE FUNCTION [dbo].[fn_DistanceBetween_Metric] (@Lat1 as real, @Long1 as real, @Lat2 as real, @Long2 as real, @Metric varchar(20)='mile') RETURNS real --WITH ENCRYPTION AS BEGIN DECLARE @dLat1InRad as float(53); SET @dLat1InRad = @Lat1 * (PI()/180.0); DECLARE @dLong1InRad as float(53); SET @dLong1InRad = @Long1 * (PI()/180.0); DECLARE @dLat2InRad as float(53); SET @dLat2InRad = @Lat2 * (PI()/180.0); DECLARE @dLong2InRad as float(53); SET @dLong2InRad = @Long2 * (PI()/180.0); DECLARE @dLongitude as float(53); SET @dLongitude = @dLong2InRad - @dLong1InRad; DECLARE @dLatitude as float(53); SET @dLatitude = @dLat2InRad - @dLat1InRad; /* Intermediate result a. */ DECLARE @a as float(53); SET @a = SQUARE (SIN (@dLatitude / 2.0)) + COS (@dLat1InRad) * COS (@dLat2InRad) * SQUARE(SIN (@dLongitude / 2.0)); /* Intermediate result c (great circle distance in Radians). */ DECLARE @c as real; SET @c = 2.0 * ATN2 (SQRT (@a), SQRT (1.0 - @a)); DECLARE @kEarthRadius as real; If @Metric = 'km' SET @kEarthRadius = 6376.5 /* kms */ Else SET @kEarthRadius = 3956.0 /* miles */ DECLARE @dDistance as real; SET @dDistance = @kEarthRadius * @c; return (@dDistance); END

No comments:

Post a Comment