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

发布于 2024-12-24 01:15:56 字数 387 浏览 0 评论 0原文

我如何从工作表中控制团队和客户的纬度和经度,并具有合理的误差范围?

如果两个值彼此接近,我将返回“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

How can i control the latitude and the longitude of the Team and the Customer with reasonable error margin from the Job Table?

if the two values are close to eachother i will return it "true", if not "false"

Job Table (like this) :

JobID CustomerID TeamID
  2     13        1
  3     13        2

Team Table :

TeamID Latitude Longitude
 1      41.019   28.965
 2      42.019   27.165

Customer Table

 ID  Latitude Longitude
13  13.557   13.667

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

柠北森屋 2024-12-31 01:15:56

功能:

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

The function:

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
意中人 2024-12-31 01:15:56

我假设你的意思是:如果两个纬度和经度彼此相距 x 英里以内,我该如何编写一个 select 语句来返回 true...或者类似的东西?

查找“great_circle_distance”,

编写一个将客户链接到团队的查询。

对两个纬度和经度执行大圆距离计算。

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

使用解码或一些类似的构造将其转换为“True”或“False”值。

i assume you mean: how can i write a select statement to return true if two latitudes and longitudes are within x miles of each other... or something like that?

look up 'great_circle_distance'

write a query that links the customer to the team.

perform the great circle distance calculation on the two lats and longs.

compare this to you desired distance.

use decode or some similar construct to turn that into a 'True' or 'False' value.

我爱人 2024-12-31 01:15:56

SQL 有一个地理数据类型和一个计算两者之间距离的方法。将您的纬度、经度对隐藏到地理位置。
http://msdn.microsoft.com/en -us/library/microsoft.sqlserver.types.sqlgeography.stdistance.aspx
然后你可以使用一个函数来返回 true 或 false。

SQL has a geography datatype and a method to calculate the distance between two. Covert your Lat, Long pairs to geography.
http://msdn.microsoft.com/en-us/library/microsoft.sqlserver.types.sqlgeography.stdistance.aspx
Then you could use a function to return a true or false.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文