在 PostGIS 中将几何隐式转换为 WKT 字符串
Implicitly convert Geometry to WKT string in PostGIS
假设我有一个table定义如下:
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
很好地解释了这一点
通过使用 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;
这返回了一个错误,因为从几何到文本的转换已经存在(如 table 中所示)。
然后我尝试 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
然而,这仍然没有用,因为当我执行 select 时,我仍然在 WKB 中得到结果。
首先,这可能吗?我只是做错了什么吗?
其次,添加此隐式转换会破坏任何几何函数吗?
当数据转换为字符串或以文本方式发送给客户端时,类型输出函数被调用。在这种情况下不应用强制转换。
此函数是用 C 语言编写的,您必须破解 PostGIS 才能对其进行更改。此外,您还必须更改类型输入功能以接受文本格式。
我希望你在测试机上做过那个实验,因为 ALTER EXTENSION
破坏了 PostGIS 扩展。
假设我有一个table定义如下:
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
通过使用 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;
这返回了一个错误,因为从几何到文本的转换已经存在(如 table 中所示)。
然后我尝试 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
然而,这仍然没有用,因为当我执行 select 时,我仍然在 WKB 中得到结果。
首先,这可能吗?我只是做错了什么吗? 其次,添加此隐式转换会破坏任何几何函数吗?
当数据转换为字符串或以文本方式发送给客户端时,类型输出函数被调用。在这种情况下不应用强制转换。
此函数是用 C 语言编写的,您必须破解 PostGIS 才能对其进行更改。此外,您还必须更改类型输入功能以接受文本格式。
我希望你在测试机上做过那个实验,因为 ALTER EXTENSION
破坏了 PostGIS 扩展。