Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Generating graph data from BD TOPO to use for a Chinese Postman problem #55

Open
mapperfr opened this issue Apr 18, 2023 · 1 comment
Open

Comments

@mapperfr
Copy link

mapperfr commented Apr 18, 2023

(Version française en fin de ticket!)


I am trying to create a route that passes through the lanes contained within a polygon (IRIS), to create a map that will support a field survey (a pedestrian team survey route).

  • The route must pass through each route at least once;
  • The route should be as short as possible.
  • The route can eventually leave the polygon and use the adjacent lanes to return to the polygon by another route if this allows optimisation.

This corresponds to the problem of the Chinese postman: https://fr.wikipedia.org/wiki/Probl%C3%A8me_du_postier_chinois

pgRouting seems to be able to calculate these routes: https://docs.pgrouting.org/latest/en/chinesePostmanProblem-family.html.
The data I want to work with is the troncon_de_route layer of the BD TOPO. If I'm not mistaken, I'll have to use route-graph-generator to generate the graphs.

I followed the r2gg README and already made progress. Here is what I've done so far:

  • The troncon_de_route layer has been imported into a PostGIS database, on which the postgres_fdw and pgRouting extensions have also been installed;
  • The procedures https://github.com/IGNF/pgrouting-procedures are also installed;
  • I have adapted the general config file config.json to fit my project. My version is available here: https://mapper.space/tests/r2gg/config.json
  • The other config files have also been customized (for log management, database connection management, and cost calculation);
  • I finally tried to customize bduni_convert.sql but without much success and this is where I get stuck. Running r2gg-pivot2pgrouting config.json gets me numerous SQL errors. Completely modifying the SQL conversion script without errors seems to be beyond my skills at the moment.

I have several questions:

  • Am I on the right track?
  • Do you have any guidance on what to include in the SQL script? I don't need to get the attribute data from road_section, geometry and georeferencing info would be enough.
  • Do you know of any other solution, if possible simpler, to achieve what I am trying to do? (I have already tried the Chinese Postman plugin from QGIS but the plugin has outdated dependencies. I filed a ticket a week ago, with no news yet, and I haven't tried to modify the plugin to fix the dependency issues. It could be a a solution but for the moment I'm focused on r2gg).

Thanks in advance for your feedback :)


Je cherche à créer un itinéraire qui passe par les voies contenues au sein d'un polygone (IRIS), pour créer une carte qui servira d'appui à une enquête de terrain (itinéraire d'enquête d'une équipe piétonne).

  • L'itinéraire doit passer par chaque voie au moins une fois;
  • L'itinéraire doit être le plus court possible.
  • L'itinéraire peut éventuellement sortir du polygone et emprunter les voies adjacentes pour revenir dans le polygone par un autre chemin si ça permet d'optimiser.

Ça correspond au problème du postier chinois: https://fr.wikipedia.org/wiki/Probl%C3%A8me_du_postier_chinois

pgRouting semble être en mesure de calculer ces itinéraires: https://docs.pgrouting.org/latest/en/chinesePostmanProblem-family.html.
Les données à partir desquelles je souhaite travailler correspondent à la couche troncon_de_route de la BD TOPO. Si je ne fais pas erreur, il faut donc que je passe par route-graph-generator pour générer les graphes à partir de la BD TOPO.

J'ai suivi le README et déjà avancé. Voilà où j'en suis:

  • Les données troncon_de_route sont importées dans une base PostGIS, sur laquelle les extensions postgres_fdw et pgRouting ont été également installées;
  • Les procédures https://github.com/IGNF/pgrouting-procedures sont installées elles aussi;
  • J'ai adapté le fichier de config générale config.json pour correspondre à mon projet. Ma version est consultable ici: https://mapper.space/tests/r2gg/config.json
  • Les autres fichiers de config ont également été personnalisés (pour la gestion des logs, la gestion des connexions aux bases de données, et pour le calcul des coûts);
  • J'ai enfin tenté de personnaliser bduni_convert.sql mais en tatonnant, et c'est ici que ça bloque. Lorsque je lance r2gg-pivot2pgrouting config.json, j'ai de nombreuses erreurs lors de l'éxécution du SQL. La modification complète et sans erreur du script de conversion SQL semble être au-delà de mes compétences pour l'instant.

Je me pose donc plusieurs questions:

  • Est-ce que je suis sur la bonne voie?
  • Auriez-vous des indications sur ce qu'il faut indiquer dans le script SQL? Je n'ai pas besoin de récupérer les données attributaires de troncon_de_route, la géométrie et le géoréférencement suffiraient.
  • Auriez-vous connaissance d'une autre solution, si possible plus simple, pour réaliser ce que j'essaye de faire?
    (J'ai déjà essayé le plugin Chinese Postman de QGIS mais le plugin a des problèmes de dépendances obsolètes. J'ai déposé un ticket il y a une semaine, sans nouvelles pour l'instant, et je n'ai pas essayé de modifier le plugin pour en corriger les problèmes de dépendances. C'est une solution mais pour le moment je me suis concentré sur r2gg.)

Merci d'avance pour vos retours :)

@azarz
Copy link
Member

azarz commented Apr 20, 2023

(Version française à la fin)


Hi!
First of all, thank you for your interest in our project! :)

I think you are on the right track.

The fist advice I'll have is to use directly the SQL script provided for BD Topo, bdtopo_v3.3.sql, which is I think more adapted to what you need to achieve. If you want to remove the fields that are useless to you, you also need to remove them in the _pivot_to_pgr.py file.

One question I have is whether r2gg-pivot2pgrouting config.json returns an error. The logs of this first step are important when trying to solve this kind of issue.

I'd also like to see the errors you get when trying to do the second conversion step.

For you third question, I haven't found any easy solution...

Cheers,


Bonjour !
Tout d'abord, merci pour l'intérêt que vous portez à notre projet ! :)

Je pense que vous êtes sur la bonne voie.

Le premier conseil que j'aurais serait d'utiliser directement le script SQL que nous avons adapté pour une conversion à partir de la BD Topo : bdtopo_v3.3.sql. Pour enlever les champs qui ne vous sont pas utiles, il faut également les enlever du fichier _pivot_to_pgr.py.

Une question que j'ai est de savoir si la commande r2gg-pivot2pgrouting config.json renvoie une erreur. Pour régler ce genre de problème (ça nous est souvent arrivés), parfois la solutions était dans les logs de cette commande.

J'aimerais également voir les erreurs que vous obtenez en lançant la seconde commande.

Enfin, pour votre troisième question, je n'ai pas trouvé d'autre solution qui serait plus facile...

Cordialement,

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants