如何从作业表中以合理的误差范围控制团队和客户的纬度和经度?
如果两个值彼此接近,我将返回“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
答案 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。