Skip to content

GregUK/pgrouting_osm

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

pgrouting_osm

Requirements

TBD

Documentation

See in the documentation of the pgrouting website for more informations: http://pgrouting.org

Installation

  1. Download PBF OSM data from http://download.geofabrik.de/europe.html for your region of interest.
    wget http://download.geofabrik.de/europe/great-britain-latest.osm.pbf
    
  2. Download osm2po. I had originaly planned to use osm2pgrouting. See osm2pgrouting README in externals/osm2pgrouting, however due to memory requirements I have now opted for osm2po
    wget http://osm2po.de/download.php?lnk=osm2po-4.9.1.zip
    
  3. Unzip osm2po
  4. Build/Setup your PostGres database with PostGIS installed.
    There is a VagrantFile included to do a base build and a setup script used by vagrant which can be used if you want to build in a different way see Vagrant-setup/bootstrap_pg.sh
  5. Use osm2po to convert the data for loading into postgres. You will need to accept the licence. More info on osm2po http://osm2po.de/
    java -jar osm2po-4.8.8/osm2po-core-4.8.8-signed.jar prefix=gb great-britain-latest.osm.pbf 
    
    This will create the SQL to load into postgres and start a local webservice for you test with.
  6. Load the data into postgres from the route of the project run:
    psql -U osmuser -d osm -W -q -f "osm2po-4.8.8/gb/gb_2po_4pgr.sql"
    

##Loading routing data. PGRouting workshop

Notes from working through http://workshop.pgrouting.org

  1. After creating tables with base information

    • gid - global id
    • class_id - Road classification
    • length - of road
    • name - Readable name
    • osm_id
    • the_geom - Postgis geometry
  2. Build the topology using pgrouting function via psql or pgadmin.

    tolerance is normally degrees or meters

    --Add columns to hold the source and target vertices 
    ALTER TABLE ways ADD COLUMN "source" integer;
    ALTER TABLE ways ADD COLUMN "target" integer;
    --pgr_createTopology('<table>', float tolerance, '<geometry column', '<gid>')
    pgr_createTopology('ways', 0.00001, 'the_geom', 'gid')
  3. Create indexes so speed up routing. This should be automatically created by the create topology command

    CREATE INDEX ways_source_idx ON ways("source");
    CREATE INDEX ways_target_idx ON ways("target");
  4. Using Djikstra routing requires reverse_cost column add using:

     ALTER TABLE ways ADD COLUMN reverse_cost double precision;
     UPDATE ways SET reverse_cost = length;   

    Cost in this case is based on the length of the way, reverse_cost if not required by default

    Example query for a route:

    SELECT seq, id1 AS node, id2 AS edge, cost FROM pgr_dijkstra('
                 SELECT gid AS id,
                          source::integer,
                          target::integer,
                          length::double precision AS cost
                         FROM ways',
                 30, 60, false, false);
    
  5. Using Shortest path A* alorithm. This includes geopgraphy about source and target links so it can prefer links which are nearby.

     ALTER TABLE ways ADD COLUMN x1 double precision;
     ALTER TABLE ways ADD COLUMN y1 double precision;
     ALTER TABLE ways ADD COLUMN x2 double precision;
     ALTER TABLE ways ADD COLUMN y2 double precision;  
     --Set x1,y1 as the first point in the linestring
     UPDATE ways SET x1 = ST_x(ST_PointN(the_geom, 1));
     UPDATE ways SET y1 = ST_y(ST_PointN(the_geom, 1));
     --Set x2,y2 as the last point in the linestring
     UPDATE ways SET x2 = ST_x(ST_PointN(the_geom, ST_NumPoints(the_geom)));
     UPDATE ways SET y2 = ST_y(ST_PointN(the_geom, ST_NumPoints(the_geom)));

    Example query:

    SELECT seq, id1 AS node, id2 AS edge, cost FROM pgr_astar('
                 SELECT gid AS id,
                          source::integer,
                          target::integer,
                          length::double precision AS cost,
                          x1, y1, x2, y2
                         FROM ways',
                 30, 60, false, false);
    
  6. Calculating multiple shortest paths using kDijisktra

About

Setup of pgrouting using Open StreetMap (OSM) data on vagrant

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages