我有以下简单的表格:
CREATE TABLE tbl_test
(
id serial NOT NULL,
poly polygon NOT NULL
)
WITH (OIDS=FALSE);
然后我尝试用多边形插入一行:
insert into tbl_test values(1, PolyFromText('POLYGON((0 0, 10 10, 10 0, 0 0))'))
并遇到此错误:
列“poly”属于多边形类型,但表达式属于几何类型
这是蹩脚的。所以我的第一个问题是:
- 我真的必须投吗?
无论如何,铸造后它可以工作。现在我正在尝试做一个简单的 ST_Contains 查询:
select id, poly from tbl_test where ST_Contains(poly, Point(GeomFromText('POINT(9 2)')))
这给出了错误:
ERROR: function st_contains(polygon, point) does not exist
LINE 1: select id, poly from tbl_test where ST_Contains(poly, Point(...
^
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
我应该做些什么?
以下作品:
select st_contains(st_geomfromtext('POLYGON((0 0, 10 10, 10 0, 0 0))'), st_geomfromtext('POINT(0 0)'))
但这可能是因为这两个参数都是几何类型的。针对表数据的实际查询不起作用。
回答:
多伊!问题是我创建的数据库不是基于postgis模板数据库(因此没有相关的功能和几何列表等)。最后,我可以说一下,PostGIS 要求您向数据库添加数百个函数、行和几个表的方式只是为了让您获得 GIS 支持,这完全是蹩脚的。它使模式的备份变得更加复杂并且非常容易出错(如果您忽略调用 AddGeometryColumn 而只是自己添加一个几何列,那么天堂是禁止的)。