24 lines
660 B
Transact-SQL
24 lines
660 B
Transact-SQL
CREATE FUNCTION [dbo].[Haversine](@Lat1 AS DECIMAL(9,7), @Lon1 AS DECIMAL(10,7), @Lat2 AS DECIMAL(9,7), @Lon2 AS DECIMAL(10,7))
|
|
RETURNS DECIMAL(12,7)
|
|
AS
|
|
BEGIN
|
|
DECLARE @R DECIMAL(11,7);
|
|
DECLARE @dLat DECIMAL(9,7);
|
|
DECLARE @dLon DECIMAL(10,7);
|
|
DECLARE @a DECIMAL(10,7);
|
|
DECLARE @c DECIMAL(10,7);
|
|
|
|
SET @R = 6372.8;
|
|
SET @dLat = RADIANS(@Lat2 - @Lat1);
|
|
SET @dLon = RADIANS(@Lon2 - @Lon1);
|
|
SET @Lat1 = RADIANS(@Lat1);
|
|
SET @Lat2 = RADIANS(@Lat2);
|
|
SET @a = SIN(@dLat / 2) * SIN(@dLat / 2) + SIN(@dLon / 2) * SIN(@dLon / 2) * COS(@Lat1) * COS(@Lat2);
|
|
SET @c = 2 * ASIN(SQRT(@a));
|
|
|
|
RETURN @R * @c;
|
|
END
|
|
GO
|
|
|
|
SELECT dbo.Haversine(36.12,-86.67,33.94,-118.4)
|