Postgresql Postgis允许添加无效的几何图形
我有一个表Postgresql Postgis允许添加无效的几何图形,postgresql,gis,postgis,Postgresql,Gis,Postgis,我有一个表层,其中有一个几何列geom。此几何图形列具有以下约束: CONSTRAINT enforce_dims_geom CHECK (st_ndims(geom) = 2), CONSTRAINT enforce_geotype_geom CHECK (geometrytype(geom) = 'POLYGON'::text), CONSTRAINT enforce_srid_geom CHECK (st_srid(geom) = 3857) 因此,正如您所看到的,这个几何体列没有
层
,其中有一个几何列geom
。此几何图形列具有以下约束:
CONSTRAINT enforce_dims_geom CHECK (st_ndims(geom) = 2),
CONSTRAINT enforce_geotype_geom CHECK (geometrytype(geom) = 'POLYGON'::text),
CONSTRAINT enforce_srid_geom CHECK (st_srid(geom) = 3857)
因此,正如您所看到的,这个几何体列没有什么特别之处。但有趣的是,它允许我在表格中添加不正确的几何图形:
insert into layer (geom) values (
ST_GeomFromText('POLYGON((4831087.7172221 7576170.7140277,
4829023.9174584 7556144.212617,
4834450.9464667 7556602.8347867,
4833533.7021273 7575329.9067165,
4831087.7172221 7576170.7140277),
(4815647.4375453 7566616.0854925,
4817864.1113651 7574183.3512927,
4825049.1920219 7573342.5439816,
4821609.5257499 7567609.7668602,
4815647.4375453 7566616.0854925))', 3857)
);
问题是这不是一个有“洞”的多边形。这是两个分开的不同多边形。为什么呢?为什么Postgis允许添加不正确的几何图形
编辑
我用
ST\u IsValid
检查了这个几何体,结果是假的。所以,这看起来就像Postgis中的一个bug。您可以从任何闭合线创建多边形,如
ST_GeomFromText('POLYGON((0 0, 0 1, 1 0, 1 1, 0 0))')
即使这不是一个有效的多边形
对
st\u isvalid()
函数使用检查约束 谢谢!一个小问题:这个约束在表模式中应该是什么样子?类似于约束强制执行有效几何检查(st\u isvalid(geom))
?这是设计的,不是bug。存在无效的几何图形,必须以某种方式存储并理想地固定。如果不希望它们出现在表中,请添加一个检查约束(正如我在注释中看到的那样)。