Java Hibernate Spatial:如何在大量条目上确定封套

Java Hibernate Spatial:如何在大量条目上确定封套,java,envelope,hibernate-spatial,Java,Envelope,Hibernate Spatial,我已提出以下建议: 包含城市、街道、门牌号和几何图形的地址的数据库 @Id @Column(name = "fid", unique = true) private Integer fid; @Column(name = "city") private String city; @Column(name = "street") private String street; @Column(name = "houseNumber") private String houseNumber; @jav

我已提出以下建议:

包含城市、街道、门牌号和几何图形的地址的数据库

@Id
@Column(name = "fid", unique = true)
private Integer fid;
@Column(name = "city")
private String city;
@Column(name = "street")
private String street;
@Column(name = "houseNumber")
private String houseNumber;
@javax.persistence.Column(name = "GEOM")
private Geometry geom;
我希望用户输入(部分)街道名称和/或城市名称,并搜索匹配的地址(SQL:“
SELECT*FROM address WHERE street LIKE%%”和city LIKE%%”
”)

最后,地图将缩放到包含所有匹配地址的信封。在地图上向下搜索

由于地址表相当大(小县城:有许多100000个地址),因此检索所有地址并处理坐标以确定信封的性能非常差

伪代码:

envelope = emptyEnvelope;
foreach (address in foundAddresses) {
    envelope.expandToInclude(address.geometry);
}
这可能适用于找到的某些地址(多达数百个),但如果用户尚未深入到其中任何地址(整个数据库),则不适用

我现在需要的是告诉hibernate spatial返回可能对象中的最大和最小坐标的方法

sql for oracle(仅在mysql、postgis等中使用,访问方式不同):

通过这种方式,可以使用数据库索引来即时检索信封

有没有一种方法可以使用hibernate spatial查询一堆条目的信封?
它是如何执行的?

首先,Hibernate在实体上工作。您的最终查询不适合任何实体,因为它是自定义数据。但是你可以像这样搜索,你可以得到你的结果我认为您的最终查询对于性能来说是最好的,但是如果您想使用hibernate空间查询,请考虑访问实体。您可以执行4种不同的查询并获取角点图元,然后手动访问角点坐标。您可以根据需要构建查询。

您是否可以提供收集“角点”(最小/最大值或类似值)的可能性?您只需使用
按距离
功能对文本搜索查询进行排序即可。根据查询的角落,从纬度和经度给出
。例如,对于左上角,您可以从纬度(-1*Double.MAX\u值)
以及经度(Double.MAX\u值)
给出
,然后将结果限制为一并获得第一行。这是离左角最近的图元。这样做4角结束从这些实体获取坐标。
SELECT 
    MIN(b.GEOM.sdo_point.x) AS minX, MAX(b.GEOM.sdo_point.x) AS maxX,
    MIN(b.GEOM.sdo_point.y) AS minY, MAX(b.GEOM.sdo_point.y) AS maxY
FROM 
    addresses b
WHERE street LIKE ... AND city LIKE ...;