我对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()
进行插入,使用该列的所有其他功能是否可以正常工作?
谢谢
答案 0 :(得分:2)
geometry
类型有几种自动转换类型。
您可以在PostgreSQL中键入\dC
,您将看到所有可用的演员表,包括:
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
,因此此列中的任何内容均为geometry
,并且可以由需要geometry
的任何函数使用。数据如何到达那里(自动转换,转换,从其他几何图形中提取等)不再重要。