ALTER FUNCTION [dbo].[fnGetDistanceBaidu](@LatBegin REAL, @LngBegin REAL, @LatEnd REAL, @LngEnd REAL) RETURNS FLOAT
AS
BEGIN
--距离(米)
DECLARE @Distance FLOAT
DECLARE @b INT SET @b = -180
DECLARE @c INT SET @c = 180
DECLARE @d INT SET @d = -74
DECLARE @e INT SET @e = 74
DECLARE @X_PI REAL SET @X_PI = 3.14159265358979323846
if(@LngBegin > @c)
begin
set @LngBegin = @LngBegin-(@c - @b)
end
if(@LngBegin < @b)
begin
set @LngBegin = @LngBegin+(@c - @b)
end
if(@LngEnd > @c)
begin
set @LngEnd = @LngEnd-(@c - @b)
end
if(@LngEnd < @b)
begin
set @LngEnd = @LngEnd+(@c - @b)
end
if(@LatBegin < @d)
begin
set @LatBegin = @d
end
if(@LatBegin > @e)
begin
set @LatBegin = @e
end
if(@LatEnd < @d)
begin
set @LatEnd = @d
end
if(@LatEnd > @e)
begin
set @LatEnd = @e
end
DECLARE @aX REAL SET @aX = @X_PI*@LngBegin/180
DECLARE @aY REAL SET @aY = @X_PI*@LatBegin/180
DECLARE @bX REAL SET @bX = @X_PI*@LngEnd/180
DECLARE @bY REAL SET @bY = @X_PI*@LatEnd/180
set @Distance = 6370996.81*ACOS(SIN(@aY)*SIN(@bY)+ COS(@aY) * COS(@bY) * COS(@bX - @aX))
RETURN @Distance
END