Namn

CG_PolygonRepair — Reparera en ogiltig polygon eller multipolygon.

Synopsis

geometry CG_PolygonRepair(geometry geom, text rule);

Beskrivning

Reparera en ogiltig polygon eller multipolygon med CGAL:s 2D-algoritm för reparation av polygoner. Returnerar en MultiPolygon.

Parametern rule styr reparationsstrategin:

  • EVEN_ODD (standard) — områden som täcks ett udda antal gånger behålls. Tillgängligt med CGAL 6.0+.

  • NON_ZERO — områden med varvningsnummer som inte är noll behålls. Kräver CGAL 6.1+.

  • UNION — union av alla indatapolygoner. Kräver CGAL 6.1+.

  • INTERSECTION — skärning av alla indatapolygoner. Kräver CGAL 6.1+.

Tillgänglighet: 3.7.0 – kräver SFCGAL >= 2.3.0 och CGAL >= 6.0.

Denna metod behöver SFCGAL-backend.

Denna funktion stöder polyedriska ytor.

Exempel

Reparera en självskärande flugknutspolygon med standardregeln EVEN_ODD.

Kod
WITH data AS (
  SELECT 'POLYGON((0 0,2 2,2 0,0 2,0 0))'::geometry AS input_polygon
)
SELECT input_polygon AS input_polygon,
       CG_PolygonRepair(input_polygon) AS repaired_polygon
FROM data;
Utdata
POLYGON((0 0,2 2,2 0,0 2,0 0)) | MULTIPOLYGON(((0 0,1 1,0 2,0 0)),((1 1,2 0,2 2,1 1)))
Figur
Geometry figure for visual-cg-polygonrepair-01

Med regeln UNION behålls all varvad area. Denna regel kräver CGAL 6.1 eller senare.

Kod
WITH data AS (
  SELECT 'POLYGON((0 0,2 2,2 0,0 2,0 0))'::geometry AS input_polygon
)
SELECT input_polygon AS input_polygon,
       CG_PolygonRepair(input_polygon, 'UNION') AS repaired_polygon
FROM data;
Utdata
POLYGON((0 0,2 2,2 0,0 2,0 0)) | MULTIPOLYGON(((0 0,1 1,0 2,0 0)))
Figur
Geometry figure for visual-cg-polygonrepair-02