我们可能会转向 Postgis。 Postgis 支持 EWKT。一个例子是一条曲线:
CIRCULARSTRING(4 0, 4 4, 8 4)
支持的数据类型位于此概述。
如何将此弧插入 Postgis 数据库?我使用 Spring JPA、JTS (locationtech) 和 Postgis。
当然,JTS.WktReader() 不起作用。而且这样的声明是行不通的:
@Query( "Insert into ArcDemo (geometry, remark) VALUES ( ST_GeomFromEWKT(:ewkt), :remark)")
Integer insertArcDemo(String ewkt, String remark);
有哪些可能的解决方案?
只需创建一个简单的方法:
public void insertBySql(final String insertSql) throws SQLException {
try (PreparedStatement stmt = dataSource.getConnection().prepareStatement(insertSql)) {
stmt.execute();
}
}
用带有弧线的SQL语句调用该方法:
myRepo.insertBySql( """
INSERT INTO objectwithgeometries (id,geometry,remarks) VALUES ( 3, ST_SetSRID( ST_CurveToLine('CIRCULARSTRING(29.8925 40.36667,29.628611 40.015000,29.27528 40.31667)'), 4326), 'remark-2');
""");
或者:
objectWithGeometryService.insertBySql("""
INSERT INTO objectwithgeometries (id,geometry,remarks) VALUES ( 4, ST_SetSRID( ST_GeomFromEWKT( ST_CurveToLine( 'CIRCULARSTRING(29.8925 41.36667,29.628611 41.015000,29.27528 41.31667)')), 4326), 'remark-3');
""");
弧线可见,例如通过QGIS:
结果是一个由许多小线组成的 LineString。
另一种方法是使用 WkbWriter 为几何列创建动态创建的 sql 语句。