假设我让用户在地图上选择long和lat。我有以下列的数据库:
zip
state
latitude
longitude
city
full_state
如何使用hibernate HQL查询检索long和lat最接近的匹配?
答案 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)')
????