查找25个离纬度和经度表最近的地址

时间:2014-06-22 21:30:59

标签: mysql gis latitude-longitude distance

我正在尝试创建一个新表,其中包含另一个表中每个地址的列表,它是最近的10个地址。每条记录都有经纬度。显然,对所有人进行全部工作比需要的工作要多得多(数百万条记录)。

然而,如果我使用纬度,经度对表进行索引/索引,它会自动按距离排序,我可以直接按ID +/- 25逐步查看每个记录。

然而,这仍然留给我一个问题;如何查询每个具有纬度/经度的两个记录之间的距离是什么样的?

1 个答案:

答案 0 :(得分:0)

如果我是你,我的纬度和经度都有索引。然后,我会执行SELECT COUNT(*) FROM table WHERE (table.latitude BETWEEN (query_lat - x) AND (query_lat + x)) AND (table.longitude BETWEEN (query_long - y) AND (query_long + y));之类的操作,每次都会优化xy,直到计数下降到大约100条左右的记录。 (也许我会将最终的xy值存储到查询地址的记录中,以便下次我不必再进行这么多查询。)然后我就是&#39 ; d运行查询所有列,而不仅仅是COUNT(*),以获得实际的纬度和经度,并可能使用堆队列来获得25个最短距离。

这里真正困难的是经度和距离之间的关系也取决于纬度;他们不是独立的。我不确定在查询中加入球面坐标转换是一个好主意。

你的使用纬度/经度为id的技巧是不会起作用的,因为它只是没有排序。例如,那种类型会告诉你休斯顿离奥斯汀更接近圣安东尼奥。