ST_CoverageInvalidEdges — Fönsterfunktion som hittar platser där polygonerna inte bildar en giltig täckning.
geometry ST_CoverageInvalidEdges(
geometry winset geom, float8 tolerance = 0)
;
En fönsterfunktion som kontrollerar om polygonerna i fönsterpartitionen bildar en giltig polygontäckning. Den returnerar linjära indikatorer som visar var ogiltiga kanter (om sådana finns) finns i varje polygon.
En uppsättning giltiga polygoner är en giltig täckning om följande villkor uppfylls:
Icke-överlappande - polygoner överlappar inte varandra (deras inre delar skär inte varandra)
Edge-Matched - toppar längs delade kanter är identiska
Som en fönsterfunktion returneras ett värde för varje polygon som matas in. För polygoner som bryter mot ett eller flera av giltighetsvillkoren är returvärdet en MULTILINESTRING som innehåller de problematiska kanterna. Täckningsgilla polygoner returnerar värdet NULL. Icke-polygonala eller tomma geometrier producerar också NULL-värden.
Villkoren tillåter att en giltig täckning innehåller hål (mellanrum mellan polygoner), så länge som de omgivande polygonerna är kantmatchade. Mycket smala luckor är dock ofta inte önskvärda. Om toleransparametern
anges med ett avstånd som inte är noll, kommer kanter som bildar smalare luckor också att returneras som ogiltiga.
De polygoner som kontrolleras för täckningsgiltighet måste också vara giltiga geometrier. Detta kan kontrolleras med ST_IsValid.
Tillgänglighet: 3.4.0
Kräver GEOS >= 3.12.0
Ogiltiga kanter orsakade av överlappning och icke-matchande hörn
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
-- Test entire table for coverage validity SELECT true = ALL ( SELECT ST_CoverageInvalidEdges(geom) OVER () IS NULL FROM coverage );