Name

ST_CoverageClean — Beräknar en ren (kantmatchad, icke-överlappande, gap-cleared) polygontäckning, givet en icke ren indata.

Synopsis

geometry ST_CoverageClean(geometry winset geom, float8 snappingDistance = -1, float8 gapMaximumWidth = 0, text overlapMergeStrategy = 'MERGE_LONGEST_BORDER');

Beskrivning

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

Exempel

-- 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;