ST_CoverageClean — Beräknar en ren (kantmatchad, icke-överlappande, gap-cleared) polygontäckning, givet en icke ren indata.
geometry ST_CoverageClean(
geometry winset geom, float8 snappingDistance = -1, float8 gapMaximumWidth = 0, text overlapMergeStrategy = 'MERGE_LONGEST_BORDER')
;
En fönsterfunktion som ändrar kanterna på en polygonal täckning för att säkerställa att ingen av polygonerna överlappar varandra, att små luckor är bortklippta och att alla delade kanter är exakt identiska. Resultatet är en ren täckning som kommer att klara valideringstester som ST_CoverageInvalidEdges
GapMaximumWidth
styr rensningen av mellanrum mellan polygoner. Luckor som är mindre än denna tolerans kommer att stängas.
SnappingDistance
styr nodsnäppningssteget, när närliggande hörn snäpps ihop. Standardinställningen (-1) tillämpar ett automatiskt snapping-avstånd baserat på en analys av indata. Ställ in till 0.0 för att stänga av all snapping.
OverlapMergeStrategy
styr den algoritm som används för att avgöra vilka angränsande polygoner som överlappande områden ska slås samman till.
MERGE_LONGEST_BORDER
väljer polygonen med den längsta gemensamma gränsen
MERGE_MAX_AREA
väljer polygon med maximal area
MERGE_MIN_AREA
väljer polygon med minsta yta
MERGE_MIN_INDEX
väljer polygon med minsta ingångsindex
Tillgänglighet: 3.6.0 - kräver GEOS >= 3.14.0
-- Populate demo table CREATE TABLE example AS SELECT * FROM (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) ) AS v(id, geom); -- Prove it is a dirty coverage SELECT ST_AsText(ST_CoverageInvalidEdges(geom) OVER ()) FROM example; -- Clean the coverage CREATE TABLE example_clean AS SELECT id, ST_CoverageClean(geom) OVER () AS GEOM FROM example; -- Prove it is a clean coverage SELECT ST_AsText(ST_CoverageInvalidEdges(geom) OVER ()) FROM example_clean;