我使用的是Hibernate,Postgre,PostGIS和Grails。使用Hibernate和PostGIS获取同一查询中的距离和域属性
要搜索给定半径内的所有用户,我正在使用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()
它返回存储在数据库中的几何(点)和SQL中提供的点之间的距离,但忽略用户域的属性。标准执行后,我得到了这样的东西 - [0.0,0.20430178027717,0.0]。
我想知道是否可以从给定的经度/纬度得到每个用户的所有用户距离。我可以使用Groovy/Java代码来计算结果的距离,但是我需要执行条件执行的排序结果,以便我也可以应用分页。
嗨manish,我没有回答你的问题,但我试图使用PostGIS与grails没有成功。你能否指出最新的资源来展示如何做到这一点? –