Nous faisons du routage (routage) sur OpenStreetMap. introduction

Je voudrais partager l'expérience de la création de systèmes de routage PostgreSQL / PgRouting sur OpenStreetMap. Il s'agira de développer des solutions [commerciales] avec des exigences complexes, pour des projets plus simples, il suffit probablement de consulter la documentation. Autant que je sache, des éléments tels que la prise en charge complète des routes à sens unique et des itinéraires routiers, le routage rapide vers des milliers d'adresses (de l'ordre de quelques secondes sur un ordinateur portable ordinaire, par exemple un Macbook Pro 13 "2013), la création d'un graphique routier avec des propriétés spécifiées, la méta-optimisation des itinéraires Comme d'habitude, toutes les données et résultats sont disponibles dans mon référentiel GitHub d' OSM Routing Tricks , que j'ajouterai au fur et à mesure de ma publication.





330 OpenStreetMap ( 5 ). , , 5000 ? , , ( ).





, , , . : , , , , , ( )! PgRouting PostgreSQL OpenStreetMap.



, . , , - . , PgRouting . , , , .



, .





PgRouting 3.0 PostgreSQL 12, PgRouting 2.6 PostgreSQL 9 . , MacOS ( ) Debian/Ubuntu ( ) PgRouting pgr_TSP() , , , , "" MacOS , , , , . MacOS Debian/Ubuntu.



OpenStreetMap PostgreSQL



, GDAL, , . , , OpenStreetMap PostgreSQL SQL , . GDAL: PostgreSQL SQL Dump. , . GDAL. OSM (germany-latest.osm.pbf) PostgreSQL (osmrouting):



ogr2ogr \
    -f PGDUMP \
    /vsistdout/ "germany-latest.osm.pbf" \
    -nln "osm_lines" \
    -nlt LINESTRING \
    -progress \
    --config PG_USE_COPY YES \
    --config GEOMETRY_NAME the_geom \
    --config OSM_COMPRESS_NODES YES \
    --config OSM_CONFIG_FILE "osmconf.ini" \
    -sql "select * from lines where highway is not null" \
    -lco FID=id \
    | psql osmrouting


OpenStreetMap OpenStreetMap Data Extracts.



OpenStreetMap



. (), — . , , (). , ? , — , , , , . , , . PgRouting.



( ) , (, , ) . , . , . , .





. , , . , () , .



( ) , , . , . , 10 100 .



, , «» ? — () , (, , ) . . , 10 100 , , — ! , — . , , () , . .



PostgreSQL



"osmrouting", , PostgreSQL SQL , . load.sh ( PgRouting PostGIS).



, , ( start_id end_id , , , length):



--      (  )
-- id -   
-- the_geom -     
-- oneway -   
-- highway -    (      )
-- pedestrian -    (   )
-- start_id -      
-- end_id -      
-- length -   (        .)
osmrouting=# \d osm_network
                       Table "public.osm_network"
   Column   |           Type            | Collation | Nullable | Default 
------------+---------------------------+-----------+----------+---------
 id         | integer                   |           |          | 
 the_geom   | geometry(LineString,4326) |           |          | 
 type       | text                      |           |          | 
 oneway     | boolean                   |           |          | 
 highway    | boolean                   |           |          | 
 pedestrian | boolean                   |           |          | 
 start_id   | bigint                    |           |          | 
 end_id     | bigint                    |           |          | 
 length     | double precision          |           |          | 


:



--     
-- id -   
-- the_geom -     
osmrouting=# \d osm_nodes
                     Table "public.osm_nodes"
  Column  |         Type         | Collation | Nullable | Default 
----------+----------------------+-----------+----------+---------
 id       | bigint               |           |          | 
 the_geom | geometry(Point,4326) |           |          | 


, :



osmrouting=# \d osm_buildings
                   Table "public.osm_buildings"
  Column  |         Type         | Collation | Nullable | Default 
----------+----------------------+-----------+----------+---------
 id       | character varying    |           |          | 
 the_geom | geometry(Point,4326) |           |          | 
...


.





route.sql 330 PgRouting pgr_TSP(). , , ( , . PgRouting). pgr_dijkstraCostMatrix(). , directed=false, pgr_TSP() (, , ). pgr_dijkstraSymmetrizeCostMatrix() pgr_dijkstraValidateCostMatrix() , . , ( — ) pgr_dijkstraVia() .



randomize=false , randomize=true, . SQL "route" , QGIS. QGIS , . route.qgs .



:





, — , 245,246,247 . «» — , , . ( ), , .





— , PgRouting. , ( , ), , . .




All Articles