通过休眠查找纬度和经度最接近的匹配

时间:2011-04-24 19:34:00

标签: java hql latitude-longitude

假设我让用户在地图上选择long和lat。我有以下列的数据库:

zip
state
latitude
longitude
city
full_state

如何使用hibernate HQL查询检索long和lat最接近的匹配?

3 个答案:

答案 0 :(得分:2)

这个答案不会特别回答你的问题,但是有一些特殊的数据库引擎来处理地理数据,因为否则,正如你所提到的,你需要遍历所有数据并计算每个用户请求的距离。

在使用oracle spatial之前我做过类似的事情...阅读那个wiki页面,我发现Postgres有一个名为PostGis的扩展,它也允许空间查询。

我知道它没有休眠,但我强烈建议你检查那些引擎。

答案 1 :(得分:2)

您可以做的一件简单事情就是编写查询,以便在给定纬度和经度的设定范围内搜索任何内容。例如,您可以搜索以下内容:

纬度<(纬度+<你的边界>) 和纬度>(纬度 - <你的边界>) 和经度<(经度+<你的边界>) 和经度>(经度 - <你的边界>)

我认为1度纬度或经度约为69.11英里。所以要找到50英里范围内的任何东西,你的边界大约为0.8

答案 2 :(得分:0)

为什么不在hibernate中使用简单的Point或Geom?使用这些类型,您可以使用hql和POSTGIS执行所需的所有查询?你可以像这样创建点:

ST_POINTFROMTEXT('POINT(LONGITUDE LATITUDE)')

????