Pgrouting- A Practical Guide Apr 2026

SELECT * FROM pgr_dijkstra( 'SELECT gid AS id, source, target, cost, reverse_cost FROM roads', 1, -- start vertex 50, -- end vertex directed := true ); : A set of rows with node , edge , cost , and agg_cost (total cost). b) Get the geometry of the path Join the results back to the geometry table:

SELECT * FROM pgr_drivingDistance( 'SELECT gid AS id, source, target, cost FROM roads', 1, -- start vertex 500, -- distance limit false -- undirected ); SELECT * FROM pgr_astar( 'SELECT gid AS id, source, target, cost, reverse_cost, x1, y1, x2, y2 FROM roads', 1, 50, true ); Note : A* requires columns x1, y1, x2, y2 (endpoint coordinates). Add them using: PgRouting- A Practical Guide

Introduction In the world of Geographic Information Systems (GIS), routing and network analysis are critical for applications ranging from GPS navigation to urban planning. While desktop tools like QGIS or ArcGIS offer routing capabilities, they often struggle with large datasets or real-time queries. This is where pgRouting —an extension of PostgreSQL and PostGIS —becomes an indispensable solution. SELECT * FROM pgr_dijkstra( 'SELECT gid AS id,

SELECT pgr_createTopology( 'roads', -- table name 0.001, -- tolerance (in degrees or meters; use small value) 'geom', -- geometry column 'gid' -- unique identifier column ); This populates the source and target columns and creates a vertices_tmp table containing all nodes. pgRouting offers many algorithms. Here are the most practical ones. a) Shortest Path (Dijkstra) – Most common Find the shortest path from node 1 to node 50: While desktop tools like QGIS or ArcGIS offer

-- Assume 'live_traffic' table stores current cost per edge UPDATE roads SET cost = live_traffic.time_sec FROM live_traffic WHERE roads.gid = live_traffic.edge_id; -- Then run Dijkstra SELECT * FROM pgr_dijkstra( 'SELECT gid AS id, source, target, cost, reverse_cost FROM roads', (SELECT source FROM vertices_tmp ORDER BY the_geom <-> ST_SetSRID(ST_Point(-122.4194, 37.7749), 4326) LIMIT 1), (SELECT source FROM vertices_tmp ORDER BY the_geom <-> ST_SetSRID(ST_Point(-122.2711, 37.8044), 4326) LIMIT 1), true );

WITH path AS ( SELECT * FROM pgr_dijkstra( 'SELECT gid AS id, source, target, cost, reverse_cost FROM roads', 1, 50, true ) ) SELECT path.seq, path.node, path.edge, roads.geom FROM path JOIN roads ON path.edge = roads.gid ORDER BY path.seq; Find all nodes reachable within 500 meters from a starting point:

Back
Top