postgresql - 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()
就插入,使用该列的所有其他功能都可以正常工作吗?
谢谢
解决方案
有几种自动转换geometry
类型。
您可以输入\dC
PostgreSQL,您将看到所有可用的演员表,包括:
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
。数据如何到达那里(自动转换、转换、从另一个几何体中提取等)不再相关。
推荐阅读
- reactjs - 使用带有 ReactTable 的查询参数
- powershell - 仅在 PowerShell 电子邮件中附加最近的文件
- gradle - 使用特定配置运行插件任务
- canvas - 将 THREE.CanvasTexture 与 WebGL 绘制的画布一起使用
- c - 次和 CLOCK_PER_SEC 计算错误的时间
- asp.net-core - 在 Web Api 中返回 json 对象的动态列表
- python - 尝试创建子图但不断收到 ValueError 消息
- sql - 具有嵌套数据的行的 Big Query 重复数据删除
- firebase - 为什么 Google Analytics Firebase 从不显示自定义事件的参数?
- python - 在python中比较字符串的嵌套列表理解理解