【发布时间】:2016-07-12 08:33:24
【问题描述】:
我有一个表 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)
所以,如您所见,这个几何列没有什么特别之处。但有趣的是,它允许我在表格中添加不正确的几何图形:
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_IsValid 检查了这个几何图形,它是错误的。所以,这一切看起来都像是 Postgis 中的一个错误。
【问题讨论】:
-
这是设计使然,而不是错误。存在无效的几何图形,必须以某种方式存储并且理想地固定。如果您不希望它们出现在表中,请添加检查约束(正如我在评论中看到的那样)。
标签: postgresql gis postgis