Sql server 2008 T-SQL:在地图网格上查找对象的最近位置

Sql server 2008 T-SQL:在地图网格上查找对象的最近位置,sql-server-2008,tsql,min,Sql Server 2008,Tsql,Min,我在地图上有网格显示。我知道你的位置和地图上两个物体的位置。对象显示在网格线交叉的位置。考虑世界是平的而不是圆的,因为地图上的区域只有很短的距离。我想确定哪个对象离你最近,而不使用三角学和乘法,因为性能原因。我不是在寻找准确度,而是在寻找一个大致的指示。我应该能够确定距离我当前位置的经纬度差之间的最短距离。我的表“位置”如下所示: ID Latitude Longitude 1 50 70 2 30 40 如果我的位置是纬度=40

我在地图上有网格显示。我知道你的位置和地图上两个物体的位置。对象显示在网格线交叉的位置。考虑世界是平的而不是圆的,因为地图上的区域只有很短的距离。我想确定哪个对象离你最近,而不使用三角学和乘法,因为性能原因。我不是在寻找准确度,而是在寻找一个大致的指示。我应该能够确定距离我当前位置的经纬度差之间的最短距离。我的表“位置”如下所示:

ID   Latitude   Longitude
1       50         70
2       30         40
如果我的位置是纬度=40,经度=60,那么ID=1的位置将更靠近我

如果我的位置是纬度=30,经度=60,那么可能两个位置的距离都差不多,所以只选一个


如果我的位置是纬度=30,经度=50,那么ID=2的位置会更近。

我只需要对差异之和进行一分钟的计算。我试过了,效果很好

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

您确实需要使用一些三角学来获得任何类型的精度:

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;

从站点中选择MIN((s.纬度-@lat)(s.纬度-@lat))+((s.经度-@lon)(s.经度-@lon)))s.ID作为s Group By ID

您有什么版本的SQL?如果2008,则可以使用几何函数2008。几何函数的性能难道不比直接进行整数比较差吗?我的坐标始终是整数。是的,它们通常是整数,但会提供比整数更精确的比较-例如,比较51.5228,-0.1028和50.5374,-3.5173和51.228,-0.1028和52.5374,-1.5173之间的行程-这也是我在发布问题后得出的结论。谢谢!它还会定期返回错误的答案。例如,当我的纬度=90,经度为40时,这就意味着ID2距离最近(60),而事实上ID1距离最近(实际上是50,而不是70)。这不是到x,y点之间的距离的公式。DebyMonlight:我的应用程序中的纬度位于高度流行的位置,而不是北极或南极。此外,任何两点之间的差值最多为50公里,因此对于大致的数字来说,bnieland的解决方案就足够了。Blam:我不是在寻找准确的距离,而是指某个位置是否在同一个大致范围内,最多为50公里。对于世界上人口最多的地区来说,bnieland的解决方案足以做到这一点。谢谢,但我在帖子中表示,我并不寻求准确性。如果我需要精确性,那么我将使用内置的几何函数。@AndroidDev,除非点靠近赤道,否则如果没有三角学,结果将完全错误。例如,在莫斯科(纬度为55°N),1度纬度=111.13公里(与其他任何地方一样),但1度经度仅为63.7公里,因为纬度远离赤道。如果你在莫斯科,有两个点,一个向北110公里,另一个向西64公里,那么你的方法会说110公里比64公里更近。