Spring JPA - 如何将 EWKT 字符串插入 PostGis 数据库?

问题描述 投票:0回答:1

我们可能会转向 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);

有哪些可能的解决方案?

spring-data-jpa postgis jts
1个回答
0
投票

只需创建一个简单的方法:

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 语句。

© www.soinside.com 2019 - 2024. All rights reserved.