我正在使用Hibernate,Postgre,PostGIS和Grails。
要搜索给定半径内的所有用户,我正在使用HibernnateSpetial,并且一切正常。
def criteria = sessionFactory.currentSession.createCriteria(User)
criteria.createAlias('location', 'location')
criteria.add(SpatialRestrictions.within("location.point", boundingPolygon))
criteria.list()
现在,我还希望在相同条件下执行所有用户到给定点的距离。
def criteria = sessionFactory.currentSession.createCriteria(User)
criteria.createAlias('location', 'location')
criteria.add(SpatialRestrictions.within("location.point", boundingPolygon))
String[] columnAlias = new String[1]
columnAlias[0] = "distance"
org.hibernate.type.Type[] types = new StandardBasicTypes[1]
types[0] = StandardBasicTypes.DOUBLE
criteria.setProjection(Projections.sqlProjection("ST_Distance(point, ST_GeomFromText('POINT(-84.3346473 33.9462125)', 4326)) as distance", columnAlias, types))
criteria.list()
它返回我存储在数据库中的Geometry(点)与SQL中提供的点之间的距离,但是忽略了User域的属性。标准执行后,我得到了类似的内容-[0.0,0.20430178027717,0.0]。
我想知道是否可以从给定的经度/经度中获得每个用户的所有用户+距离。我可以使用Groovy / Java代码来计算结果上的距离,但是我需要标准执行中的排序结果,以便也可以应用分页。
最佳答案
如果您只想来回溯距离,似乎可以直接在常规代码中计算出距离,例如:giveMeAllHitsFromGIS().each{
it.distance = it.point1.distanceTo( it.point2 )
}
您的代码已经有点低级的休眠/空间内容,如果您增加空间查询的复杂性,它的可读性就会降低
关于hibernate - 使用Hibernate和PostGIS在同一查询中获取距离和域属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22108449/