计算地球上两个坐标点(经度,纬度)之间距离sql函数

go  

--计算地球上两个坐标点(经度,纬度)之间距离sql函数

--作者:lordbaby

--整理:www.aspbc.com 

CREATE FUNCTION [dbo].[fnGetDistance](@LatBegin REAL, @LngBegin REAL, @LatEnd REAL, @LngEnd REAL) RETURNS FLOAT

  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) / 10000  

  RETURN @Distance

END

  使用方法如下:

1 SELECT FROM 商家表名 WHEREdbo.fnGetDistance(121.4625,31.220937,longitude,latitude) < 5

(鼠标移到代码上去,在代码的顶部会出现四个图标,第一个是查看源代码,第二个是复制代码,第三个是打印代码,第四个是帮助)
这里的longitude,latitude分别是酒店的经度和纬度字段,而121.4625,31.220937是手机得到的当前客户所在的经度,后面的5表示5公里范围之内。

lordbaby还告诉我,在SQL2008数据库中,可以直接用geography 数据的函数来解决,见http://msdn.microsoft.com/zh-cn/library/bb933952(v=sql.100).aspx 。

你可能感兴趣的:(sql)