0

我将 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有一个与此相关的问题的解决方案,但也使用了持久化器。

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

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

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

我真的必须创建一个自定义数据类型并在服务器端进行转换而不是在数据库上进行吗?还是有使用本机数据库功能的解决方案?

4

1 回答 1

0

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

看到我只使用矩形,我决定制作一个矩形数据类型。由于javaToSqlArg ,这在插入和更新上工作正常,因为我的实现正在返回

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

哪个叶子选为问题。我发现解决这个问题的唯一方法有点脏。

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

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

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

于 2013-09-17T13:51:04.553 回答