存储可以按距离查询的位置的最佳方法是什么?

时间:2013-04-20 17:13:32

标签: mysql hibernate location

我想实现一个功能,可以按照距离用户位置的距离来显示附近场地的列表。我现在的方法是将lat和lon值存储为浮点数,并创建一个查询用户位置的+/-值的查询(搜索一个向北,向南,向东和向西延伸的方块)用户)。然后我对结果集进行快速计算,确定距离并在业务逻辑中排序。现在我从主要使用关系数据库(应用程序使用Hibernate运行MySQL)的人的角度来看待这个问题,但是有更好的方法(在不同的数据库中,比如Neo4J或者有更好的列类型吗?)

此外,我所采用的方法还有一个半复杂的解决方法,用于0或0或0附近的查询。

至于我对最佳工作的定义,我正在寻找可扩展到10英里范围内数百个场馆和总共数十万个场馆的方法。换句话说大约是SimpleGEO的1%,所以如果这个问题的规模不需要最优解,那么“你没事”也会是一个有趣的答案,尽管我会知道为什么会这样做<) / p>

3 个答案:

答案 0 :(得分:1)

MongoDB本地支持地理空间索引和查询语言扩展,以支持许多不同的查询地理空间文档的方式。

但如果您正在寻找关系数据库,请尝试PostgreSQL和PostGIS。

答案 1 :(得分:1)

您是否关注Hibernate Spatial?

Hibernate Spatial是Hibernate处理地理数据的通用扩展。 HS有MySQL提供商。

http://www.hibernatespatial.org/

答案 2 :(得分:1)

你可以看看Lucene / Solr。 Lucene supported location-aware search至少从v2.9开始。

如果您担心Lucene的复杂性,那么Hibernate Search就是要透明地将所有数据库更改复制到Lucene。