pgRouting

Table Of Contents

Previous topic

Shortest Path Shooting Star

Next topic

Traveling Sales Person (TSP)

Make a Donation


Support pgRouting with some donation! Read more about how your donation will help the project.

Links

Google Summer of Code 2013 FOSS4G 2013, Nottingham OSGeo Foundation

Driving Distance calculation

Important

Only valid for pgRouting v1.x. For pgRouting v2.0 or higher see http://docs.pgrouting.org

Function:

The driving_distance function has the following signature:

CREATE OR REPLACE FUNCTION driving_distance(
                        sql text,
                        source_id integer,
                        distance float8,
                        directed boolean,
                        has_reverse_cost boolean)
        RETURNS SETOF path_result

Arguments:

sql: a SQL query, which should return a set of rows with the following columns:

  • id: an int4 identifier of the edge
  • source: an int4 identifier of the source vertex
  • target: an int4 identifier of the target vertex
  • cost: an float8 value, of the edge traversal cost. (a negative cost will prevent the edge from being inserted in the graph).

source_id: int4 id of the start point distance: float8 value of distance in degrees

distance: float8 value in edge cost units (not in projection units - they might be different).

directed: true if the graph is directed

has_reverse_cost: if true, the reverse_cost column of the SQL generated set of rows will be used for the cost of the traversal of the edge in the opposite direction.

Output:

The function returns a set of rows. There is one row for each crossed edge, and an additional one containing the terminal vertex. The columns of each row are:

  • vertex_id: the identifier of source vertex of each edge. There is one more row after the last edge, which contains the vertex identifier of the target path.
  • edge_id: the identifier of the edge crossed
  • cost: The cost associated to the current edge. It is 0 for the row after the last edge. Thus, the path total cost can be computated using a sum of all rows in the cost column.

Examples:

SELECT * FROM driving_distance('SELECT gid AS id,source,target,
             length::double precision AS cost FROM dourol',10549,0.01,false,false);
 vertex_id | edge_id |     cost
-----------+---------+---------------
          6190 |  120220 | 0.00967666852
          6205 |  118671 | 0.00961557335
          6225 |  119384 | 0.00965668162
          6320 |  119378 | 0.00959826176
          ...
          ...
          ...
         15144 |  122612 | 0.00973386526
         15285 |  120471 | 0.00912965866
         15349 |  122085 | 0.00944814966
         15417 |  120471 | 0.00942316736
         15483 |  121629 | 0.00972957546
(293 rows)