繁体   English   中英

在 postgis 中将数据插入空间数据库

[英]Insert data to a spatial database in postgis

我创建了一个包含 3 个字段的表:id(integer)、name(char) 和 surface(polygon)。 当我尝试通过执行在此表中插入新行时:

INSERT INTO public."Area" ("ID", "Name", "Surface") VALUES(0, 'myArea', POLYGON((0 0, 1 0, 1 1, 0 1, 0 0)));

我收到此错误:

SQL 错误 [42601]:错误:“0”位置或附近的语法错误:84

我在 postgis 等文档中进行了搜索,但没有找到如何定义该字段(点和线串相同)。

我也尝试过这样的事情:

INSERT INTO public."Area" ("ID", "Name", "Surface") VALUES(1, 'myArea', ST_GeomFromText('POLYGON((8 4, 10.5 4, 10.5 1.5, 8 1.5, 8 4)) '));

但结果是:

SQL 错误 [42804]:错误:列“表面”的类型为多边形,但表达式的类型为几何 提示:您需要重写或转换表达式。 职位:76

你能帮我找出我的错误吗?

非常感谢您的宝贵时间!

尝试ST_PolygonFromText而不是 ST_GeomFromText。

或者将该列声明为通用 GEOMETRY,而不是 POLYGON 类型。

错误消息告诉该列是类型polygon ,它是本机 postgres 类型 使用这种类型可以做的事情非常有限,如果您正在处理空间数据,请使用 Postgis 及其geometry类型。

要使用投影4326创建包含多边形类型的几何图形的列,您可以

CREATE TABLE test (my_poly geometry(polygon,4326));

然后,您可以使用ST_GeomFromText加载数据。

由于您的列是geometry类型,因此会自动从text转换为geometry ,或者您可以强制它。 与您的第一个查询不同,请注意多边形定义必须用引号括起来。

insert into test values ('polygon((0 0, 0 1, 1 1, 1 0, 0 0))'::geometry)

最后,在技术上可以创建 Postgis geometry并将其转换为 Postgres 原生polygon类型( SELECT ST_GeomFromText('POLYGON((0 0, 0 1, 1 1, 1 0, 0 0))')::polygon; ),但是这样做带来的好处很少,因为您仍然无法访问大多数 Postgis 功能(计算距离、重新投影、计算交叉点等)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM