T-SQL:在地图上查找网格物体的最近位置(T-SQL: Finding the closest l

2019-09-16 21:30发布

我有一个地图上的网格表现。 我知道你的位置,并在地图上2个物体的位置。 对象出现,其中网格线交叉。 考虑世界扁平不圆,因为地图上的面积只有很短的距离。 我想,以确定哪些对象是最接近你不使用三角和繁殖性能的原因。 我不是在寻找的准确性不亚于刚开球场指示。 我应该能够确定从我目前的位置在纬度和经度的差异之间的最短距离。 我的表,位置,如下所示:

ID   Latitude   Longitude
1       50         70
2       30         40

如果我的位置是北纬= 40和经度= 60,然后用ID = 1的位置是靠近我。

如果我的位置是北纬= 30和经度= 60,大概两个位置大约相同的距离,所以随便挑一个。

如果我的位置是北纬= 30和经度= 50,然后用ID = 2的位置将是更近。

Answer 1:

我只想做的差的总和的分钟。 我尝试过了,它工作得很好。

SELECT MIN(ABS(s.Latitude - 47) + ABS(s.Longitude - -122)), s.ID FROM Sites as s Group By ID;


Answer 2:

你真的需要使用一些三角得到任何准确的:

DECLARE @LocationTable TABLE(ID int, Latitude int, Longitude int)
INSERT INTO @LocationTable(ID, Latitude, Longitude)
VALUES
    (1,50,70),
    (2,30,40)

DECLARE
    @MyLatitude int = 90,
    @MyLongitude int = 40

WITH DistanceTable AS
(
    SELECT ID, Latitude, Longitude,
        SQRT(POWER(Latitude - @MyLatitude,2) + POWER(Longitude - @MyLongitude, 2)) AS Distance
    FROM @LocationTable
)
SELECT ODT.ID, ODT.Latitude, ODT.Longitude, ODT.Distance
FROM (SELECT ID, Latitude, Longitude, Distance, ROW_NUMBER() OVER(ORDER BY Distance) AS Position
    FROM DistanceTable) AS ODT
WHERE ODT.Position = 1;


Answer 3:

SELECT MIN(((s.Latitude - @lat)(s.Latitude - @lat))+((s.Longitude - @lon)(s.Longitude - @lon))),s.ID FROM站点为s组由ID;



文章来源: T-SQL: Finding the closest location of an object on a map grid