首页 > 解决方案 > PostGIS 会在插入 WKT 时自动转换吗?

问题描述

我对 PostGIS 很陌生,所以请耐心等待。

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

CREATE TABLE gtest (name varchar, geom geometry);

起初,要插入,我正在做类似的事情:

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

然后我发现它仍然可以通过这样做:

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

当我在不将 geom 值转换回 WKT 的情况下进行查询时,它们都被正确编码。如果我将列转换为 EWKT,一切都会正确显示。

幕后是否有转换?如果我不调用ST_GeomFromText()就插入,使用该列的所有其他功能都可以正常工作吗?

谢谢

标签: postgresqlpostgiswkt

解决方案


有几种自动转换geometry类型。

您可以输入\dCPostgreSQL,您将看到所有可用的演员表,包括:

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

文档或本教程中也提供了此信息。

由于隐式转换,这意味着您不必指定它来使用它。请注意,您可以使用“强制”它::geometry

select st_asText('SRID=4326;POLYGON((0 0,1 0,1 1,0 1,0 0))'::geometry);
           st_astext
--------------------------------
 POLYGON((0 0,1 0,1 1,0 1,0 0))
(1 row)

关于列可用性,该列是类型geometry,因此该列中的任何内容都是 ageometry并且可以被任何需要 a 的函数使用geometry。数据如何到达那里(自动转换、转换、从另一个几何体中提取等)不再相关。


推荐阅读