Postgis 允许添加无效的几何图形

Postgis allows to add invalid geometry

我有一个 table layer 和一个几何列 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)

因此,如您所见,这个几何列没有什么特别之处。但有趣的是,它允许我向 table:

添加不正确的几何图形
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)
);

问题是这不是具有 "hole" 的多边形。这是两个不同的多边形,它们分开。这是为什么?为什么 Postgis 允许添加不正确的几何图形?

编辑

我用 ST_IsValid 检查了这个几何图形,它是错误的。所以,这一切看起来像是 Postgis 中的一个错误。

您可以从任何闭合线创建多边形,例如

ST_GeomFromText('POLYGON((0 0, 0 1, 1 0, 1 1, 0 0))')

尽管这不是有效的多边形。

st_isvalid() 函数中使用检查约束!