如何找到最接近的十进制值

时间:2013-02-04 07:08:04

标签: sql sqlite spatial

正在开发MAP应用。它可以节省数千个纬度和数量。绘制叠加的经度细节。 当用户触摸叠加层时,它想从SQL中保存的记录中获取最近的纬度和经度。

我用:

SELECT * 
FROM track_points 
WHERE segmentId = '22' 
ORDER BY (ABS(latitude - 25.312005) + ABS(longitude - 91.730433))

它完全相同,但问题是特定叠加层有几千个lat和longi细节。 完成上述查询需要很长时间。

它运行时认为整个DB数据得到一个点,即使提取最近的数据也是如此。

只要当给出28.2525时我需要25.2520附近的东西或者它是什么,然后停下来。我不想从22.23252或第10行开始,在第5000行达到25.2520,然后直到最后一行。

1 个答案:

答案 0 :(得分:1)

首先,继续调查Spatialite是否符合您的需求。

但是,您需要减少查询正在考虑的点数:

SELECT * 
FROM track_points 
WHERE segmentId = '22' 
ORDER BY (ABS(latitude - 25.312005) + ABS(longitude - 91.730433))
WHERE latitude BETWEEN 25.31 AND 25.32
      AND
      longitude BETWEEN 91.73 AND 91.74

您希望将边界设置为尽可能窄但宽度足以确保至少获得一个结果。如果你的纬度和经度是一个规则的格子,那么这是微不足道的。

您可以使用BETWEEN @value - @tolerance AND @value + @tolerance来动态定义值。