osm-bzh / ar_redadeg

Ressources pour le partenariat avec Ar Redadeg
0 stars 0 forks source link

Étudier le principe d'avoir une base Bzh entièrement routable et calculer des routes via des points intermédiaires #6

Open MaelREBOUX opened 2 years ago

MaelREBOUX commented 2 years ago

Disposer d'une base Bzh entièrement routable -> faisable.

Mais comment pour calculer une route entre 2 nœuds via des nœuds intermédiaires avec une seule requête ?

On trouve la fonction pgr_dijkstraVia qui semble répondre à ce besoin (https://docs.pgrouting.org/latest/en/pgr_dijkstraVia.html) mais ce n'est pas une fonction officielle.

De toute façon, pour chaque secteur, il faut gérer une table de points de passage avec un ordre.

MaelREBOUX commented 2 years ago

Purée : ça fonctionne en version 3.2.1 !

pgr_dijkstraVia('SELECT id, source, target, cost, reverse_cost 
FROM osm_roads_pgr', ARRAY[2443, 2360])

image

pgr_dijkstraVia('SELECT id, source, target, cost, reverse_cost 
FROM osm_roads_pgr', ARRAY[2443,2437,2360])

image

pgr_dijkstraVia('SELECT id, source, target, cost, reverse_cost 
FROM osm_roads_pgr', ARRAY[2443,2437,2425,2360])

image

pgr_dijkstraVia('SELECT id, source, target, cost, reverse_cost 
FROM osm_roads_pgr', ARRAY[2443,2437,2425,2419,2360])

image

MaelREBOUX commented 2 years ago

Bien bien bien.

Il reste à traiter le pb des ronds-points mais logiquement ceux-ci identifiés par le tag junction=roundabout. Sauf que actuellement cette information ne remonte pas dans la couche osm_road_pgr. cf https://github.com/osm-bzh/ar_redadeg/blob/5b4dcdd49b9fdea04ffe3bde1f6781e74d48ba82/scripts_v2/create_osm_roads.sh#L99-L117

Reste à voir comment indiquer à PgRouting que seuls les ronds-points sont orientés.

Ensuite, pour privilégier les routes automobiles il va falloir introduire un nouvel attribut penality et mettre un plus gros poids sur les modes doux. Voir exemple ici

MaelREBOUX commented 2 years ago

Note de https://www.camptocamp.com/en/news-events/pgrouting-as-a-decision-making-aid

Dijkstra It is THE shortest path algorithm. Unfortunately, it’s not really efficient on a large graph.