我有以下简单的表:
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))'))
碰上这样的错误:
列“聚”是类型的多边形,但表达类型的几何形状
这是瘸子。 所以我的第一个问题是:
- 难道我真的要投?
总之,经过铸造它的作品。 现在我试图做一个简单的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)'))
但是,这可能是因为这两个参数的数据类型的几何形状。 对表数据的实际查询不起作用。
回答:
土井! 问题是,我创建了DB是不是基于PostGIS的模板DB(和为此没有足够的相关职能和几何列表等)。 可我只是此言一出,在结论,即PostGIS的方式需要你数以百计的功能,行和几个表添加到您的数据库只是让你不得不GIS的支持是完全跛脚。 这使得架构这复杂得多,而且非常容易出错(但愿如果忽视打电话AddGeometryColumn,只是添加一个几何列自己)的备份。