gpt4 book ai didi

hibernate - 使用Hibernate和PostGIS在同一查询中获取距离和域属性

转载 作者:行者123 更新时间:2023-12-02 14:52:43 24 4
gpt4 key购买 nike

我正在使用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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com