【问题标题】:Using PostGIS with ormLite将 PostGIS 与 ormLite 一起使用
【发布时间】:2013-02-07 12:41:48
【问题描述】:

我将 ormlite 与 jdbc 连接到一个 postgresql 数据库。我的数据结构是预定义的,包含一个称为几何的 Postgis 数据类型。此数据类型可以包含 GIS 应用程序的不同几何结构(点、线串、多边形……)。原生 Postgis 可以将此数据类型转换为 geoJson 或任何其他字符串类型的 gis 相关格式。

当我直接将 ormLite 与 Postgis(作为字符串)一起使用时,它给了我一个二进制格式。所以我想使用 postgis 函数将此二进制格式转换为例如geoJson,KML。

在 SQL 中是这样的:

select ST_AsGeoJson(geometrycolumn) from table;

update table set geometrycolumn = ST_GeomFromGeoJSON('{"type":"Point","coordinates":[-5.5,7.2]}')

在模型中,此几何列应作为字符串访问(读/写)。

我尝试使用 ormlite 持久化器,但为时已晚。此时,使用持久化器(通过resultToSqlArgparseDefaultString),查询已发送到数据库,我无法编辑从 postgres 请求的列。 Mrog 有一个 solution 用于解决与此相关但也使用持久性的问题。

我也尝试用 jdbc 覆盖特定的类。但不知道如何“注入” sql-functions。

或者我可以使用原始 SQL 查询。但是我需要使用表中的许多其他属性。而且我必须对数据库使用两次查询(一次用于常规属性,一次用于几何列)。而且我的 orm 感觉是不要使用原始的 sql 语句。

另一种解决方案是在数据库端创建一个 geoJson 列。 ormLite 可以从中读取并使用 sql-trigger 将其写入原始列。但这是一个糟糕的解决方案。

我真的必须创建自定义数据类型并在服务器端进行转换,而不是在数据库上进行吗?或者有没有使用原生数据库功能的解决方案?

【问题讨论】:

    标签: java jdbc postgis ormlite


    【解决方案1】:

    我也在尝试解决这个问题,尽管设置略有不同。我一直专注于从 MSSQL 中获取 WKT 中的多边形。

    看到我只使用矩形,我决定创建一个矩形数据类型。由于javaToSqlArg,当我的实现返回时,这对插入和更新工作正常

    return String.format("geometry::STGeomFromText('POLYGON ((%d %d, %d %d, %d %d, %d %d, %d %d))',0)",etc...)
    

    留下选择作为问题。我发现解决这个问题的唯一方法有点脏。

    我在表中创建了另一列作为几何类型的基于字符串的表示。然后我添加了一个触发器以使它们保持同步。当一个更新另一个得到转换和更新。

    如果我没有将数据库几何函数用于相交等。我可能只是将字段设为文本。

    也许还值得一看:WKB4J 它可能能够读取从 ormlite 返回的二进制数据并使它们更加有形。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-24
      • 2021-11-18
      • 2013-02-24
      • 1970-01-01
      • 1970-01-01
      • 2014-07-10
      • 1970-01-01
      相关资源
      最近更新 更多