使用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)格式。
2条答案
按热度按时间ztyzrc3y1#
在Postgresql中添加postgis扩展。根据以下查询在特定模式中添加扩展。
并将冬季方言改为空间方言
gjmwrych2#
我发现了这个Stack overflow post,可以使用
point
数据类型来存储纬度和经度值。此数据类型组合了(x,y),可以是纬度、经度。如果需要更高的精度,可以添加两个类型为float
或double precision
的列。您还可以使用PostGIS,它为您提供了额外的数据类型
geometry
和geography
。这些数据类型为一个点占用一列32字节。您可以参考PostGIS手册