Prepare routing table for Dijkstra
Add source, target and length column
ALTER TABLE victoria ADD COLUMN source integer; ALTER TABLE victoria ADD COLUMN target integer; ALTER TABLE victoria ADD COLUMN length double precision;
Create network topology
SELECT assign_vertex_id('victoria', 0.001, 'the_geom', 'gid'); UPDATE victoria SET length = length(the_geom);
Create indexes for source, target and geometry column
CREATE INDEX source_idx ON victoria(source); CREATE INDEX target_idx ON victoria(target); CREATE INDEX geom_idx ON victoria USING GIST(the_geom GIST_GEOMETRY_OPS);
Run Shortest Path Dijkstra query
shortest_path( sql text, source_id integer, target_id integer, directed boolean, has_reverse_cost boolean )
(Source and target IDs are node IDs.)
Shortest path core function
SELECT * FROM shortest_path(' SELECT gid as id, source::integer, target::integer, length::double precision as cost FROM victoria', 238, 1455, false, false);
vertex_id | edge_id | cost -----------+---------+------------------ 238 | 76619 | 172.172139617447 1051 | 80792 | 309.209732132692 632 | 22142 | 275.695065878201 ... | ... | ...
Wrapper function without bounding box
SELECT gid, AsText(the_geom) AS the_geom FROM dijkstra_sp('victoria', 238, 1455);
gid | the_geom --------+--------------------------------------------------------------- 484 | MULTILINESTRING((-13735834.0196717 6151280.78177026, ... )) 13944 | MULTILINESTRING((-13734179.5114759 6150720.27269911, ... )) 22142 | MULTILINESTRING((-13733851.6421797 6149933.91231484, ... )) ... | ...
Wrapper function with bounding box
SELECT gid, AsText(the_geom) AS the_geom FROM dijkstra_sp_delta('victoria', 238, 1455, 3000);