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()
函数中使用检查约束!
我有一个 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()
函数中使用检查约束!