I have several dozen points plotted across the UK. Each point represents a facility that serves local people. To estimate the catchment areas of each facility I created Voronoi polygons around them, and clipped the polygons to the UK borders (using a UK shapefile). I then coloured each polygon according to an attribute of the point data.

A cropped part of the map is here: (Wales and Devon/Cornwall) enter image description here

Is there any way to make the Voronoi respect the natural borders of the UK (i.e. limit them to my shapefile during Voronoi creation)? The white on my map is the sea, and some polygons have crossed the Bristol Channel. This is implausible for a catchment area.

Is this possible, or is there any alternative? I have used QGIS so far, but am open to any option, code or GUI, preferably free.

Edit: There are some questions Constructing a Voronoi diagram using a complicated travel time metric and Is there a described GIS method for creating catchment areas based on nearest driving distance? that talk about building catchment areas from driving times. That is a possibility that I am considering if this is not possible, but a Voronoi algorithm that respects borders would be simpler.

1 Answer 1


The buzzwords are shortest path voronoi diagram, voronoi tessellation with constraints, conforming tesselation or restricted tesselation. CGAL could help you to combine a constrained triangulation with the construction of the voronoi diagram. You could also read a this presentation about "voronoi diagrams with obstacles" from the UPC Research Group on Discrete, Combinatorial and Computational Geometry.

  • A lot to read there! So it does seem possible. Thank you Commented Sep 8, 2017 at 9:41
  • Yes it is the fantastic world of complex computual geometry stuff.
    – huckfinn
    Commented Sep 8, 2017 at 11:16

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.