如何在T-SQL中使用大圆距离计算

时间:2011-12-29 16:52:58

标签: sql-server sql-server-2008 tsql

如何从作业表中以合理的误差范围控制团队和客户的纬度和经度?

如果两个值彼此接近,我将返回“true”,如果不是“false”

工作表(像这样):

JobID CustomerID TeamID
  2     13        1
  3     13        2

团队表:

TeamID Latitude Longitude
 1      41.019   28.965
 2      42.019   27.165

客户表

 ID  Latitude Longitude
13  13.557   13.667

3 个答案:

答案 0 :(得分:3)

功能:

CREATE FUNCTION dbo.DictanceKM(@lat1 FLOAT, @lat2 FLOAT, @lon1 FLOAT, @lon2 FLOAT)
RETURNS FLOAT 
AS
BEGIN
    RETURN ACOS(SIN(PI()*@lat1/180.0)*SIN(PI()*@lat2/180.0)+COS(PI()*@lat1/180.0)*COS(PI()*@lat2/180.0)*COS(PI()*@lon2/180.0-PI()*@lon1/180.0))*6371
END

答案 1 :(得分:1)

我假设你的意思是:如果两个纬度和经度彼此相距x英里以内,我怎么能写一个select语句才能返回true?

查找'great_circle_distance'

编写一个将客户与团队联系起来的查询。

对两个长度和长度进行大圆距离计算。

将此与您想要的距离进行比较。

使用decode或类似的构造将其转换为'True'或'False'值。

答案 2 :(得分:1)

SQL具有地理数据类型和计算两者之间距离的方法。将你的Lat,Long对转换为地理位置 http://msdn.microsoft.com/en-us/library/microsoft.sqlserver.types.sqlgeography.stdistance.aspx 然后你可以使用一个函数来返回true或false。