PostGIS 是否会在插入 WKT 时自动转换?
Does PostGIS automatically convert upon inserting WKT?
我对 PostGIS 还很陌生,所以请多多包涵。
假设我有一个table定义如下:
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()
的情况下插入,使用该列的所有其他函数都可以正常工作吗?
谢谢
geometry
类型有几种自动转换。
您可以在 PostgreSQL 中键入 \dC
,您将看到所有可用的转换,包括:
List of casts
Source type | Target type | Function | Implicit?
-------------------------+-----------------------------+--------------------+---------------
text | geometry | geometry | yes
此信息也可在 doc or in this tutorial 中找到。
由于隐式转换,这意味着您无需指定即可使用它。请注意,您可以 "force" 使用 ::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
的函数使用。数据如何到达那里(自动转换、转换、从另一个几何体中提取等)不再相关。
我对 PostGIS 还很陌生,所以请多多包涵。
假设我有一个table定义如下:
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()
的情况下插入,使用该列的所有其他函数都可以正常工作吗?
谢谢
geometry
类型有几种自动转换。
您可以在 PostgreSQL 中键入 \dC
,您将看到所有可用的转换,包括:
List of casts
Source type | Target type | Function | Implicit?
-------------------------+-----------------------------+--------------------+---------------
text | geometry | geometry | yes
此信息也可在 doc or in this tutorial 中找到。
由于隐式转换,这意味着您无需指定即可使用它。请注意,您可以 "force" 使用 ::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
的函数使用。数据如何到达那里(自动转换、转换、从另一个几何体中提取等)不再相关。