La semaine dernière j’avais présenté un petit script PHP permettant de pousser des données GTFS dans Postgis, aujourd’hui on va donc un peu les représenter, les explorer au travers d’une petite application web assez basique.

L’objectif est juste de lister les services d’une ligne d’une journée puis d’afficher les points d’arrêts du service selectionné avec leurs horaires ainsi que l’itinéraire emprunté.
Pour cette dernière on aurait pu partir de la table ‘shapes‘ qui contient une liste ordonnée de points composant le tracé, mais dans le cas des données utilisées, tous les services n’étaient pas concernés, seul un sens de circulation était présent et c’était surtout bien plus amusant de passer par OSRM pour calculer l’itinéraire.

Oui mais voilà, OSRM possède par défaut des profils pour les autos, les vélos, les piétons …. mais pas pour les bus… La première chose à faire était donc d’adapter le profile car.lua (profil par défaut) pour que les bus puissent emprunter les voies réservées, les couloirs de bus à contre-sens où encore qu’ils puissent passer des barrières spécifiques (j’avoue avoir mis pas mal de temps avant de découvrir la barrière ‘bus_trap‘ qui m’a posé quelques soucis).
Une fois le profil bus.lua créé j’ai l’ancé une nouvelle instance OSRM utilisant ce profil sur le port 5005 (en 3 minutes avec Docker ).
Ainsi, dans l’application, dès que l’on sélectionne un service (hors tram), OSRM calcule l’itinéraire passant par chaque point d’arrêt avant d’être afficher sur la carte.

J’ai profité de mes tests pour corriger quelques petites erreurs dans openstreetmap. Dans l’exemple, on pourra remarquer quelques petites erreurs dans les données sources notamment des arrêts du mauvais côté de la route sur certaines lignes.

L’application utilise Leaflet, AngularJS, Angular Material (pour le style) et un tout petit peu de PHP coté serveur pour requêter la base Postgis.

Le profile bus.lua est ici et par là vous accéderez à la démo avec les données du réseau TAG est ici