Skip to content

Instantly share code, notes, and snippets.

@BWibo
Created Oct 12, 2018
Embed
What would you like to do?
SFCGAL constraint delaunay triangulation

Constraint Delaunay Triangulation for PostGIS using SFCGAL

As discussed in this StackExchange question, there is a function available in SFCGAL that performs a Constrained Delaunay Triangulation. Some explanation and examples are available here.

Setup

There is a secret function available in SFCGAL that just needs to be exposed to use it. Make sure to set the correct PostGIS version in '$libdir/postgis-2.4.

CREATE OR REPLACE FUNCTION public.st_triangulate2dz(geometry)
  RETURNS geometry AS
 '$libdir/postgis-2.4', 'sfcgal_triangulate'
  LANGUAGE c IMMUTABLE STRICT
  COST 100;

Usage example

The example code below creates a triangulation for a set of points and a polygon. The edges of the polygon are not cut by the triangulation.

SELECT st_triangulate2dz(ST_GeomFromText(
  'GEOMETRYCOLLECTION(
      POLYGON Z((5 5 -20, 10 5 -20, 10 10 -20, 5 10 -20, 5 5 -20)),
      POINT Z(0 0 0),
      POINT Z(1 2 1),
      POINT Z(4 5 8),
      POINT Z(6 0 3),
      POINT Z(6 -5 2),
      POINT Z(5 1 3),
      POINT Z(10 4 2),
      POINT Z(11 0 8),
      POINT Z(12 3 8),
      POINT Z(12 6 9),
      POINT Z(15 7 9),
      POINT Z(10 11 9),
      POINT Z(12 11 8),
      POINT Z(18 0 5),
      POINT Z(9 16 3),
      POINT Z(6 11 6),
      POINT Z(-3 0 3),
      POINT Z(-2 8 5),
      POINT Z(4 18 9),
      POINT Z(18 23 5),
      POINT Z(20 12 6)
  )'
));

Resulting triangulation in 2D. The polygon is highlighted green. 2d

Resulting triangulation in 3D. The polygon is highlighted purple. 3d

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment