Utilisation pyroute et affichage

Extraire des données OSM, créer sa carte, uMap, utiliser sur un GPS ou un smartphone...
NicoC

Utilisation pyroute et affichage

Message par NicoC » lun. juil. 22, 2013 12:23 pm

Bonjour à tous,

Je débute actuellement un projet concernant la visualisation géographique de données, et disons le, je suis un peu paumé.

Plus explicitement, il existe à Bordeaux un réseau de vélos en libre service. Je souhaite calculer le trajet le plus court entre chaque station (le plus court ou environ, un algo A* ferait très bien l'affaire), en supposant si besoin que je puisse obtenir les coordonnées de chaque station.

Une fois ceci fait, je voudrais afficher une carte de l'agglomération bordelaise, avec toutes les stations de vélos en libre service, et modifier la couleur/taille du trait reliant chaque station entre elles selon la fréquentation supposée du chemin (si je sais qu'au cours de l'année 2012, 14.000 personnes sont allés de la station 1 à la station 2, et seulement 2.000 de la station 2 à la station 3, je voudrais faire un trait rouge assez large reliant la station 1 et 2, et un petit trait jaune reliant la station 2 et 3, traits suivants l'itinéraire le plus court calculé préalablement).
Je précise qu'il serait bien que l'affichage de la carte ne nécessite pas d'avoir un site web, mais puisse se faire directement sur l'ordinateur, et que le code éventuel puisse se faire en python (oui, j'en demande beaucoup).

Concernant la première partie de mon problème, j'ai récupéré le fichier .osm de Bordeaux, et je m'essaye à pyroute pour faire des calculs d'itinéraires, mais je ne me débrouille pas très bien (comprenez que j'ai découvert osm la semaine dernière, cela n'arrange pas les choses).
Comment utilise-t-on cet outil pour, à partir de deux nœuds (id osm ou lat/lon), exhiber la liste des nœuds par lequel passe le chemin le plus court ? (je n'obtiens pour ma part qu'une sortie graphique, qui n'a pas encore grand intérêt à cette étape du projet)

Concernant l'affichage de la carte, avez vous certains outils osm ou librairies python sous la main que vous pensez pertinents pour mener à bien mon projet ? (si mon projet semble trop ambitieux, j'ajoute qu'il n'est pas absolument nécessaire d'obtenir un affichage esthétique, je peux me contenter de l'affichage des nœuds de Bordeaux, des routes les reliant, et de la mise en évidence des routes reliant les stations, sans "fond de carte")

Voila, toute aide est la bienvenue, n'hésitez pas à me donner vos idées ou astuces ;)
(et je m'excuse par avance des parties du message qui ne concerne pas osm et ses outils stricto sensu)

Bonne journée à vous !

Ab_fabe

Re: Utilisation pyroute et affichage

Message par Ab_fabe » lun. juil. 22, 2013 1:49 pm

Bonjour,

Je ne connais pas bien le sujet, mais en consultant la page wiki de Pyroute [1], je trouve un lien vers son pendant non graphique "PyrouteLib" [2]
Il part du fichier .osm, et peut produire au choix un itinéraire sous la forme d'un fichier .gpx ou d'un nouveau fichier .osm

Pour l'affichage ou l'impression d'une carte, tu peux utiliser Maperitive.
Comme tu t'intéresses à une zone relativement petite, il est tout à fait indiqué.
Sur ce site [1], tu trouveras un guide pas à pas pour produire une carte. Elle utilise un fichier de style déjà prêt à l'emploi.
Si tu souhaites le simplifier, ce n'est pas très compliqué

Tiens-nous au courant de tes avancées, de tes soucis, et de la conclusion de ton travail !

-----------------
[1] http://wiki.openstreetmap.org/wiki/Pyroute
[2] http://wiki.openstreetmap.org/wiki/PyrouteLib
[3] http://www.apicy.fr/carte/realiser-une-carte-similaire

NicoC

Re: Utilisation pyroute et affichage

Message par NicoC » mar. juil. 23, 2013 10:43 am

Oui je parlais effectivement de Pyroutelib, non pas de Pyroute ;)

Je suis cependant extrêmement étonné qu'il y ai si peu de documentation sur le sujet, Pyroutelib ne me semble pas si simple d'utilisation.
J'ai pu malgré tout obtenir quelques résultats probant avec pyroute.py. Si la sortie graphique n'a qu'un intérêt limité, il est affiché dans le terminal la liste des nœuds par lesquels passe le plus court chemin reliant les deux nœuds renseignés, ce qui je pense me sera utile, et surtout, construit un fichier route.osm contenant les nodes, et le way les reliant.

Il y a ceci dit un gros problème concernant pyroute.py, c'est que très régulièrement, il me retourne une erreur "KeyError : node_id" (node_id étant l'un des deux nœuds renseignés). Il y a donc de très nombreux nœuds que je ne peux pas relier à cause de cette erreur (je précise que ce sont pourtant des node_id que je lie directement dans le fichier .osm que je donne à pyroute.py, je ne vois pas pourquoi ils ne conviennent pas, et mon problème semble assez exotique vu le peu d'informations disponibles sur le net à ce sujet).
Si quelqu'un avait une solution/explication à me proposer sur ce point, je suis preneur ^^

Pour certains trajets, un autre problème survient. Au lieu de retourner dans le terminal la liste des nœuds sur le trajet, la seule sortie est "Queue now xx items long", xx étant un nombre relativement élevé (supérieur à 80), et la sortie graphique contient les points rouges/bleus habituels, mais le chemin le plus court n'est pas tracé.

Si j'utilise route.py plutôt que pyroute.py : l'affichage des coordonnées des nœuds se trouvant sur le plus court chemin que pyroute.py affiche est parfaitement réalisé, une erreur "failed (no_such_node)" survient pour remplacer l'erreur "KeyError : node_id" de pyroute.py, et une erreur "failed (gave up)" remplace "Queue now xx items long".
routeAsOsm.py réagit comme route.py

Tout porte à croire, pour la première erreur, que pyroute pense que le nœud que je lui renseigne n'existe pas. J'ai pourtant vérifié les valeurs de nombreuses fois, et beaucoup de valeurs me renvoient à ce problème.

Je pense que Pyroutelib peut grandement m'aider dans mon projet, mais je le trouve bien récalcitrant pour le moment !
Dernière édition par NicoC le mar. juil. 23, 2013 11:49 am, édité 1 fois.

Ab_fabe

Re: Utilisation pyroute et affichage

Message par Ab_fabe » mar. juil. 23, 2013 11:13 am

Pour l'erreur "KeyError : node_id", ça pourrait provenir de noeuds dans le fichier osm qui portent un numéro > 2 147 483 647 (limite des entiers codés en 32 bit)
C'est un problème récurrent pour les programmes et les scripts liés à osm qui n'ont pas été mis à jour depuis quelques mois (avant que cette limite soit franchie)

Ce n'est peut être pas trop compliqué à corriger dans le code source.
Mais tu es mieux placé que moi pour le savoir :-)

A noter, ce billet d'un utilisateur osm, annonçant un nouvel outil de routage. Pas de chance pour toi, c'est du java
http://www.openstreetmap.org/user/karussell/diary/19678

Bonne journée

NicoC

Re: Utilisation pyroute et affichage

Message par NicoC » mar. juil. 23, 2013 11:38 am

Ton idée m'a donné un peu d'espoir, mais le dernier nœud testé qui me retourne cette erreur est le 1 667 024 586.
Il s'agit donc d'autre chose :(

En admettant que je résolve ce soucis (ou que quelqu'un me donne la solution :p ), je m'intéresse maintenant un petit peu à Maperitive, qui peut être prometteur.
L'idée est de "superposer" la carte de Bordeaux avec les way que j'obtiens (classiquement les fichiers route.osm que me construit pyroute.py), mais il faudrait ensuite que je les mette en évidence (et théoriquement, tous d'une façon différente), saurais-tu par hasard si cela est envisageable ? Les ruleset permettraient-ils ça ?

Edit : j'ai trouvé pour ce second point, il suffit d'ajouter un tag "name" au way, et d'utiliser un ruleset qui ne concerne que les objets ayant ce nom précis.

Répondre

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 4 invités