With preparations in place, now we are ready to create the Voronoi diagram. First, we will create the table that will contain the MultiPolygon:
DROP TABLE IF EXISTS chp04.voronoi_diagram; CREATE TABLE chp04.voronoi_diagram( gid serial PRIMARY KEY, the_geom geometry(MultiPolygon, 3734) );
Now, to calculate the Voronoi diagram, we use ST_Collect in order to provide a MultiPoint object for the ST_VoronoiPolygons function. The output of this alone would be a GeometryCollection; however, we are interested in getting a MultiPolygon instead, so we need to use the ST_CollectionExtract function, which when given the number 3 as the second parameter, extracts all polygons from a GeometryCollection:
INSERT INTO chp04.voronoi_diagram(the_geom)(
SELECT ST_CollectionExtract(
ST_SetSRID(
ST_VoronoiPolygons(points.the_geom),
3734),
3)
FROM (
SELECT
ST_Collect(the_geom) as the_geom
FROM chp04.voronoi_test_points
)
as points);
If we import the layers for voronoi_test_points and voronoi_diagram into a desktop GIS, we get the following Voronoi diagram of the randomly generated points:

Now we can process much larger datasets. The following is a Voronoi diagram derived from the address points from the Improving proximity filtering with KNN – advanced recipe, with the coloration based on the azimuth to the nearest street, also calculated in that recipe:
