【问题标题】:Implicitly convert Geometry to WKT string in PostGIS在 PostGIS 中将 Geometry 隐式转换为 WKT 字符串
【发布时间】:2019-07-02 02:15:30
【问题描述】:

假设我有一个如下定义的表:

CREATE TABLE gtest (name varchar, geom geometry);

要插入,我可以简单地这样做:

INSERT INTO gtest
VALUES (
    'Polygon',
    'SRID=4326;POLYGON((0 0,1 0,1 1,0 1,0 0))'
);

我不必将 WKT 字符串包装在函数 ST_GeomFromText() 中,因为 PostGIS 具有这样做的隐式转换。 @JGH here 很好地解释了这一点

通过使用 Postgres 命令\dC,可以列出定义的强制转换,包括:

                                     List of casts
     Source type         |         Target type         |      Function      |   Implicit?
-------------------------+-----------------------------+--------------------+---------------
text                     | geometry                    | geometry           | yes
geometry                 | text                        | text               | yes

我想这样做,以便我可以简单地执行 SELECT * FROM gtest 并将几何列的结果隐式转换为 WKT。目前,它只会将它们显示为 WKB。

首先,我尝试按如下方式创建新演员:

CREATE CAST (geometry AS text) WITH FUNCTION st_astext(geometry) AS IMPLICIT;

这会返回一个错误,因为从几何到文本的转换已经存在(如表中所示)。

然后我尝试了ALTER EXTENSION postgis DROP CAST (geometry as text);DROP CAST (geometry as text);,然后能够创建新演员:

                                     List of casts
     Source type         |         Target type         |      Function      |   Implicit?
-------------------------+-----------------------------+--------------------+---------------
geometry                 | text                        | st_astext          | yes

但这仍然不起作用,因为当我进行选择时,我仍然会在 WKB 中获得结果。

首先,这可能吗?我只是做错了什么吗? 其次,添加这种隐式转换会破坏任何几何函数吗?

【问题讨论】:

    标签: postgresql type-conversion postgis wkt


    【解决方案1】:

    当数据转换为字符串或以文本模式发送到客户端时,调用类型输出函数。在这种情况下不应用任何类型转换。

    此函数是用 C 编写的,您必须破解 PostGIS 才能更改它。此外,您还必须更改类型输入函数以接受文本格式。

    我希望你在测试机器上做这个实验,因为 ALTER EXTENSION 破坏了 PostGIS 扩展。

    【讨论】:

    • 有道理,谢谢。此外,扩展是否仅在数据库级别进行了更改,还是我必须重新安装 PostGIS?
    • 这只是在数据库级别。如果您删除并重新创建扩展程序,一切都会像新的一样好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-17
    • 1970-01-01
    • 2020-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多