Building on the work of previous posts looking at building routable networks and finding the shortest path in a network, this post will look at creating buffers around nodes based on a cost attribute specifed by the user.
The driving distance function, which comes with pg routing 2.0, creates an alpha shape around a node, normally based on the distance someone could travel from that node, or how far someone could go in a time interval.
For this example, we are looking at where someone could travel in 1km along the network from a central node. The following query selects all the nodes that are within 1 km of node 2000.
Once a routable network has been set up we can start to find the shortest path (using Dijkstra’s algorithm) between two points. From here on, I will be using the OSM data for the London road network.
The query use’s a ‘cost’ column – which could be anything thing you like – to calculate the shortest cost from one node to another. In this example I decided to use travel time (rather than distance).
First, I changed the distance of each vertex (the way table) from km to miles, and then calculated the time it would take to traverse each vertex whether walking, cycling or driving. To make this more accurate, I updated the max speed (forward and backward) along each vertex dependent on its class (as listed in the class table).
As an open source alternative to ESRI’s Network Analyst, PG routing provides a very solid platform to perform routing queries. This post, in tandem with posts on shortest distance algorithms and driving distance calculations, will highlight certain basic functionalities within pg routing that I have been playing around with over the past few weeks. I should add that most of this would not have been possible without the help of Anita Graser’s blog, which contains many wonderful posts on the seemingly unlimited capabilities of QGIS!
Pg routing can be downloaded here. Copy the bin, lib and share folders over to your postgres installation folder. Test that it is been installed properly by creating a pg routing enabled database using
CREATE extension pg_routing
and then running pgr_version() which should result in details of the pg routing you installed.