postgresql 如何使用spring Boot JPA在Postgres中存储几何点?

8yparm6h  于 2023-06-22  发布在  PostgreSQL
关注(0)|答案(2)|浏览(210)

使用spring Boot jpa将经度和纬度作为几何位置存储为Postgres中的Point。
在应用下面的代码后,它抛出:列“location”是point类型,但expression是bytea类型。
此外,当获取数据时,它会抛出:无法反序列化;嵌套异常为org.hibernate.type.SerializationException:无法反序列化
在pom.xml中添加依赖项

<dependency>
    <groupId>com.vividsolutions</groupId>
    <artifactId>jts</artifactId>
    <version>1.13</version>
</dependency>
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-spatial</artifactId>
    <version>5.4.1.Final</version>
</dependency>

在实体类中添加列。

@Column(columnDefinition = "POINT")
private Point location;

用于将数据存储到数据库

GeometryFactory geometryFactory = new GeometryFactory();

            Coordinate coordinate = new Coordinate();
            coordinate.x = 2;
            coordinate.y = 5;

            Point myPoint = geometryFactory.createPoint(coordinate);
            user.setLocation(myPoint);

我需要在Postgres中将数据存储为(30.5,53.123)格式。

ztyzrc3y

ztyzrc3y1#

在Postgresql中添加postgis扩展。根据以下查询在特定模式中添加扩展。

CREATE EXTENSION postgis;

并将冬季方言改为空间方言

gjmwrych

gjmwrych2#

我发现了这个Stack overflow post,可以使用point数据类型来存储纬度和经度值。此数据类型组合了(x,y),可以是纬度、经度。如果需要更高的精度,可以添加两个类型为floatdouble precision的列。
您还可以使用PostGIS,它为您提供了额外的数据类型geometrygeography。这些数据类型为一个点占用一列32字节。您可以参考PostGIS手册

相关问题