有效搜索最近的地理位置

时间:2010-10-17 21:10:24

标签: search geospatial

我在SO上搜索并没有真正找到答案,但这似乎是一个常见的问题。

我在数据库中有数十万个位置,每个位置都有地理编码(lat / long)。如果它很重要,它们遍布美国现在,我有一个客户端应用程序,我希望用户给我他们的纬度/长度和半径(比如5mi,10mi,25mi等)我想要返回所有的匹配的记录。我只关心通过比如Haversine公式而不是最短的道路距离可以获得的距离值。但是,鉴于此,我希望它尽可能准确。

此数据库大部分是只读的。在美好的一天,可能有10个插入。现在,我将拥有数百个客户,也许将有成千上万的客户使用该软件。我希望用户在几秒钟内获得结果,但如果单个查询需要10-20秒,那么当遇到大量客户端时它会抓取。

如何尽可能高效地提供结果?我知道我可以将它们存储在MySQL或PostgreSQL中(Oracle和MS SQL Server都是这样的,但是其他一些开源数据存储可能没问题)并且只将Haversine公式放在WHERE子句中,但我不认为将产生有效的结果。

3 个答案:

答案 0 :(得分:2)

PostgreSQL支持广泛的地理空间查询,只要它安装了PostGIS个扩展名即可。最近或半径或边界框搜索特别容易。

答案 1 :(得分:1)

我使用Solr(基于Lucene的搜索服务器)进行半径搜索。我们编写了一个属性门户,允许用户根据半径搜索属性。

我们为数据库编制索引,因此搜索速度非常快。

答案 2 :(得分:0)

我开始觉得自己是Sphinx的官方发言人。本文介绍如何为地理空间搜索配置它:http://www.god-object.com/2009/10/20/geospatial-search-using-sphinx-search-and-php/

澄清一下:数据将存储在mysql / postgres中,但会通过Sphinx索引并搜索。