SQL SERVER 根据地图经纬度计算距离的公式

chinaaxia 5月前 52

--SQL SERVER 根据地图经纬度计算距离的公式


select [dbo].[fnGetDistance] (  31.400193 ,120.601319,31.504889,120.609798  )


go 



USE [DB2]

GO


IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[fnGetDistance]') AND type in (N'FN', N'IF', N'TF', N'FS', N'FT'))

DROP FUNCTION [dbo].[fnGetDistance]

GO


--创建经纬度距离计算函数


 CREATE FUNCTION [dbo].[fnGetDistance] 


 --LatBegin 开始经度

 --LngBegin 开始维度

(@LatBegin REAL, @LngBegin REAL, @LatEnd REAL, @LngEnd REAL) 

RETURNs decimal(18,2)

AS

BEGIN

       --距离(千米)


       DECLARE @Distance      REAL


       DECLARE @EARTH_RADIUS  REAL


       SET @EARTH_RADIUS = 6378.137 


       DECLARE @RadLatBegin  REAL,


               @RadLatEnd    REAL,


               @RadLatDiff   REAL,


               @RadLngDiff   REAL


       


       SET @RadLatBegin = @LatBegin *PI()/ 180.0 


       SET @RadLatEnd = @LatEnd *PI()/ 180.0 


       SET @RadLatDiff = @RadLatBegin - @RadLatEnd 


       SET @RadLngDiff = @LngBegin *PI()/ 180.0 - @LngEnd *PI()/ 180.0 


       


       SET @Distance = 2 *ASIN(


               SQRT(


                   POWER(SIN(@RadLatDiff / 2), 2)+COS(@RadLatBegin)*COS(@RadLatEnd) 


                   *POWER(SIN(@RadLngDiff / 2), 2)

               )

           )


       SET @Distance = @Distance * @EARTH_RADIUS 

     --  SET @Distance = Round(@Distance * 10000 , 2) / 10000 

     

       RETURN Convert(decimal(18,2),@Distance)

END


最新回复 (0)
返回
发新帖