首页 > 解决方案 > 在 Spring Boot 中使用带有休眠空间 5 的 PostGIS 地理点

问题描述

显然 Hibernate 5 支持 geography 类型。我搜索了很多,但几乎没有发现与地理点相关的任何内容。

我想要做的是以下内容:

  1. 将 Long/Lat 点保存在数据库表中,例如ST_GeomFromText('POINT(6.463471 52.484832)', 4326)

  2. 执行队列以检查点是否在 Long/Lat 矩形中,例如:

    WHERE point && ST_MakeEnvelope (5.440433, 39.480434, 8.464680, 55.486190, 4326)

我正在使用PostgreSQLPostGIS

我只是找不到我必须使用哪种类型的休眠列注释来获取长/纬度点,以及如何执行上述查询。

@Type(type="org.hibernate.spatial.GeometryType")

不是关于 Long/Lat 的问题

是否有关于此的任何文档(注意:不是几何点)。

标签: javahibernatepostgis

解决方案


类型将保持 GeometryType 仅使用十进制的距离,通过下面提到的代码,您可以获得 50 到 110 米内的所有位置,因为我使用 0.001,您可以根据您的要求使用。

GeometryFactory factory = new GeometryFactory(new PrecisionModel(), 4326);
        factory.createPoint(new Coordinate(longitude,latitude));
        Point comparisonPoint = factory.createPoint(new Coordinate(longitude,latitude));
        predicates.add(SpatialPredicates.distanceWithin(cb, geom from db), comparisonPoint, 0.001));

distanceWithin() 函数获取距离,您必须将其转换为地理,但休眠空间不支持,因此还有另一种方法可以通过根据您的要求提供十进制距离来实现这一点。链接在下面提到小数点.

链接https ://en.wikipedia.org/wiki/Decimal_degrees


推荐阅读