I'm looking for the best workflow for mapping postcodes and calculated territories, but being relatively new to mapping I'm struggling on a few details and also the best practices for displaying these maps via a browser.

I have access to the Code-Point Open postcode data from Ordnance Survey and my intention is to generate layers based on this data based on a series of dissolving aggregations (Postcode Sector into Group1 into Group2 into Group3) etc.

I think I need to aggregate this data in each level using Voronoi regions - what I don't understand is whether I need to generate polygons or can draw these polygons in a live manner?

I have access to Windows (WAMP) and Red Hat 6 (LAMP+PostGres+PostGis) - where can I find out more about generating voronoi and the advantages/disadvantages of pre-rendered polygons?

On a side note, our regions change quarterly and so for all but the lowest level this data will need recalibrating 4 times a year - we would probably regroup postcode sectors at the same time (as Code-Point is also updated quarterly and well, we might as well update everything).

  • Welcome to GIS-SE! I'm going to add a tag for Postgis because it sounds like that is the only GIS component in your stack at present, and also one for voronoi, so that will help put your question in front of the appropriate experts.
    – PolyGeo
    Commented May 13, 2013 at 10:55

4 Answers 4


OK, so I moved away from generating this polygon data directly in PostGIS and used qGis instead as it was better for my learning curve to see this happen visually, and the voronoi polygons contained far less errors and overlapping regions over the same sample than the various postgis algorithms I tested - here are the steps I took:

  1. Added a PostGIS layer for my point data, including sector attributes.
  2. Created Voronoi polygons in new layer based on the point data (Vector > Geometry Tools > Voronoi Polygons)
  3. Dissolved Voronoi layer into sectors layer based on attribute (Vector > Geoprocessing Tools > Dissolve)
  4. Created new outline layer as a mask to trim sectors that disappear to sea and use it as a clip mask to tidy sectors layer.
  5. Imported final shapefile into PostGIS direct from qGIS.
  • 1
    Did you run that on the full postcode set in one hit (all 1.7m)? I'm trying to create sector and district level shape files Commented Apr 18, 2017 at 9:09

We've recently released some open source software - Open Door Logistics Studio - which lets you perform free territory mapping and free territory design, targeted for the UK. We've also generated, using voronoi etc, postcode areas, districts and sector boundaries for the UK for use in our software - also free. You should be able to just use this directly for your workflow.

See http://www.opendoorlogistics.com for details or watch the territory design video at https://www.youtube.com/watch?v=cyIcVwHf524.


Faster Voronoi Diagrams in PostGIS

In python (Python 2.x)

# Voronoi diagram calculator/ Delaunay triangulator
# Translated to Python by Bill Simons
# September, 2005
# Additional changes by Carson Farmer added November 2010
# Converted to pl/pythong function by Darrell Fuhriman, April 2012
# based on code from: 
# https://svn.osgeo.org/qgis/trunk/qgis/python/plugins/fTools/tools/voronoi.py
# Calculate Delaunay triangulation or the Voronoi polygons for a set of 
# 2D input points.

Full SQL https://dl.dropbox.com/u/316947/voronoip3.sql


  • That site says the code produces artifacts. Are you sure it's okay? Commented May 13, 2013 at 15:23
  • Thanks for the tip - I'd already picked up this blog post and bookmarked it but I'd noticed the artifacts (cheers @jakub-kania) bit so thought I'd ask here first. Commented May 14, 2013 at 9:55
  • I have tested this with Windows 7 x64, PostgreSQL 9.2 x64, PostGIS 2.0.1 x64, Python 3.2 x64 and ran the sql script which successfully loaded the Vornoi function and then run against codept open and it returns no values. In some of the comments at the bottom of that blog post below do say the Python 3 version still has some problems. If anyone gets this to work I would be interested to know how
    – tjmgis
    Commented May 14, 2013 at 13:23
  • 1
    @tjmgis I've actually been using the following vorovoi generator (which is PL/R not python) - ammending to work with postgis2 seems to work well. punkish.org/Voronoi-Diagrams-In-PostGIS Commented May 14, 2013 at 14:00
  • @kieran_delaney just got R and PL/R setup and just kicked off the query. Quick question tho - should I do a simple SELECT * FROM r_voronoi('codept_open','geom','gid'); or is best to create a new table?
    – tjmgis
    Commented May 14, 2013 at 15:15

If you are using QGis there is a good and detailed (with illustrations) solution to this here which i've tested and would recomend

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.