1

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

我用:

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

它完全一样,但问题是当特定的叠加层有数千个纬度和经度细节时。完成上述查询需要很长时间。

即使获取最近的数据,它也会认为整个数据库数据得到一个点。

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

4

1 回答 1

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来动态确定值。

于 2013-02-05T04:08:48.247 回答