php 禁止电脑访问网站,建设网站报价表,网站建设的实验的结论,白帽seo是什么职业官方文档
函数说明
概要
geometry ST_CoverageInvalidEdges(geometry winset geom, float8 tolerance 0);
描述
一个窗口函数#xff0c;用于检查窗口分区中的多边形是否形成有效的多边形覆盖范围。 它返回线性指示器#xff0c;显示每个多边形中无效边#xff08;如果…官方文档
函数说明
概要
geometry ST_CoverageInvalidEdges(geometry winset geom, float8 tolerance 0);
描述
一个窗口函数用于检查窗口分区中的多边形是否形成有效的多边形覆盖范围。 它返回线性指示器显示每个多边形中无效边如果有的位置。
如果满足以下条件则一组有效多边形是有效的覆盖范围 Non-overlapping-多边形不重叠它们的内部不相交 Edge-Matched-沿共享边的顶点相同
作为窗口函数为每个输入多边形返回一个值。 对于违反一个或多个有效性条件的多边形返回值是包含有问题边的 MULTILINESTRING。 覆盖范围有效的面返回值 NULL。 非多边形或空几何图形也会产生 NULL 值。
只要周围的多边形边缘匹配这些条件就允许有效的覆盖范围包含孔多边形之间的间隙。 然而非常窄的间隙通常是不希望的。 如果使用非零距离指定公差参数则形成较窄间隙的边缘也将被返回为无效。
正在检查覆盖范围有效性的多边形也必须是有效的几何图形。 这可以使用ST_IsValid 进行检查。
可用性3.4.0
需要GEOS 3.12.0 由重叠和不匹配顶点引起的无效边
WITH coverage(id, geom) AS (VALUES(1, POLYGON ((10 190, 30 160, 40 110, 100 70, 120 10, 10 10, 10 190))::geometry),(2, POLYGON ((100 190, 10 190, 30 160, 40 110, 50 80, 74 110.5, 100 130, 140 120, 140 160, 100 190))::geometry),(3, POLYGON ((140 190, 190 190, 190 80, 140 80, 140 190))::geometry),(4, POLYGON ((180 40, 120 10, 100 70, 140 80, 190 80, 180 40))::geometry)
)
SELECT id, ST_AsText(ST_CoverageInvalidEdges(geom) OVER ())FROM coverage;id | st_astext
-------------------------------------------1 | LINESTRING (40 110, 100 70)2 | MULTILINESTRING ((100 130, 140 120, 140 160, 100 190), (40 110, 50 80, 74 110.5))3 | LINESTRING (140 80, 140 190)4 | null
解析
这个方法有2个功能。1是检测多边形集合是否有效。2是把多边形集合无效(例如相交、重叠)的部分给依次列举出来。
我把数据插入到表中。因为最终使用都会在表中使用。 --新建表create table t2(id serial primary key,geom geometry(POLYGON,4326))--插入数据insert into t2 values(1, POLYGON ((10 190, 30 160, 40 110, 100 70, 120 10, 10 10, 10 190))::geometry),(2, POLYGON ((100 190, 10 190, 30 160, 40 110, 50 80, 74 110.5, 100 130, 140 120, 140 160, 100 190))::geometry),(3, POLYGON ((140 190, 190 190, 190 80, 140 80, 140 190))::geometry),(4, POLYGON ((180 40, 120 10, 100 70, 140 80, 190 80, 180 40))::geometry)
我把示例中的4条数据插入到了数据库下图是4条数据的集合。
数据可视化 你会发现有些多边形有重叠的部分我们把数据在详细展开。拿id1和id2为例。 数据分析
通过数据可视化我们发现id1和id2的数据有相交的对于多边形数组来说是无效的。
则一组有效多边形是有效的覆盖范围 Non-overlapping-多边形不重叠它们的内部不相交 Edge-Matched-沿共享边的顶点相同 相交抛分
通过查询我们可以得到id1和id2相交的部分。 select id,geom,ST_AsText(ST_CoverageInvalidEdges(geom) OVER ()),ST_GeomFromText(ST_AsText(ST_CoverageInvalidEdges(geom) OVER ()),4326)from t2 where id1 or id2 图1是第1条数据相交部分图2是第2条数据相交部分 如果数据集合没有相交则会返回NULL。见下图。 id4的数据与前面2条数据不相交所以通过函数返回NULL。
场景
本函数适用于校验多边形是否有效并返回错误的几何的位置有助于去辨别修改。
ST_IsValid函数只是判定是否有效且不能鉴别定位。