Service de calcul d'itinéraire

Magazine
Marque
GNU/Linux Magazine
Numéro
189
Mois de parution
janvier 2016
Domaines


Résumé
Il peut être très utile de savoir comment se rendre d'un point A à un point B. C'est encore plus utile quand on connaît le temps de trajet estimé. Installons ça chez nous.

Body


Dans cet article, nous allons installer (en compilant) OSRM qui va nous permettre de calculer des itinéraires. Ensuite, nous verrons comment le configurer, où trouver les données et comment les traiter avec OSRM. Enfin, nous aurons un service Web qui répondra aux requêtes d'itinéraire.

1. Installation

Comme pour le précédent article [2], cet article se base sur l'utilisation d'Ubuntu 14.04.

Pour l'instant il n'y a pas de paquets à ma connaissance pour OSRM donc nous allons le compiler ; c'est un logiciel léger donc ça ne va pas prendre trop de temps, rassurez-vous.

Nous allons commencer par installer les logiciels nécessaires à son installation :

$ sudo apt-get install build-essential git cmake pkg-config libprotoc-dev libprotobuf8 protobuf-compiler libprotobuf-dev libosmpbf-dev libpng12-dev libbz2-dev libstxxl-dev libstxxl-doc libstxxl1 libxml2-dev libzip-dev libboost-all-dev lua5.1 liblua5.1-0-dev libluabind-dev libluajit-5.1-dev libtbb-dev

Le développement a lieu sur GitHub et nous allons télécharger les sources sur ce site. Même si les développeurs ont l'air de faire en sorte que la branche master fonctionne correctement, je trouve plus sûr d'utiliser une release.

Il faut donc aller sur https://github.com/Project-OSRM/osrm-backend/releases afin de trouver la dernière release puis on récupère l'archive tar.gz. À l'heure où ces lignes sont écrites, la dernière version est la v4.7.1. Je vous laisse soit utiliser cette version soit modifier les commandes données pour qu'elles s'appliquent à la version que vous téléchargez. Nous allons créer un répertoire pour mettre les sources. Je vous laisse choisir celui que vous voulez, libre à vous d'utiliser celui que je crée ou non.

$ mkdir ~/osrm-src && cd ~/osrm-src

$ wget https://github.com/Project-OSRM/osrm-backend/archive/v4.7.1.tar.gz 

$ tar xvzf v4.7.1.tar.gz

$ cd osrm-backend-4.7.1

Maintenant, nous allons compiler OSRM. Les commandes sont normalement valables, quelle que soit la version téléchargée. On va créer un répertoire pour compiler OSRM puis générer un makefile à l'aide de cmake. Enfin, on va installer OSRM afin de pouvoir l'utiliser :

$ mkdir build && cd build

$ cmake .. 

$ sudo make install

Maintenant, OSRM devrait être installé si tout s'est déroulé correctement.

2. Configuration

Si vous avez suivi l'installation du serveur de tuiles dans l'article précédent [2], vous devriez déjà avoir les données Openstreetmap dans un fichier pbf. Sinon il faut aller télécharger sur http://download.geofabrik.de/ pour la région que vous souhaitez. Pour changer, je vais utiliser la Bretagne comme exemple pour cet article.

Nous allons créer un répertoire de travail. Encore une fois, vous pouvez utiliser celui que vous voulez.

$ mkdir ~/osrm && cd ~/osrm

OSRM a besoin d'un fichier de profil en Lua pour fonctionner. Rassurez-vous, il y a plusieurs fichiers de profil fournis avec. Ils sont disponibles dans le dossier profiles présent dans l'archive d'OSRM qu'on a téléchargé. Supposons que vous souhaitiez faire du calcul d'itinéraire pour les voitures. On prendra alors le fichier nommé car.lua puis nous créerons un lien symbolique en l'appelant profile.lua :

$ ln -s ~/osrm-src/osrm-backend-4.7.1/profiles/car.lua profile.lua

OSRM est très rapide car il fait une grande partie des calculs avant, ce qu'on appelle du pre-processing. Ce pre-processing utilise une bibliothèque pour gérer l'espace disque [3]. On va donc créer un dossier de travail puis créer un fichier pour dire combien on alloue sous la forme disk=path,capacity,access. J'ai choisi arbitrairement 1G et j'ai laissé les autres options aux valeurs conseillées sur la page précédemment indiquée :

$ echo "disk=/tmp/stxxl,1G,syscall" > .stxxl

Nous allons exécuter deux commandes afin de lancer les calculs du pre-processing. La première commande va préparer les données pour OSRM et la deuxième va calculer les hiérarchies qui permettent au moteur de routage de trouver le chemin le plus court en un temps très rapide.

Puisque ces deux commandes consistent à faire beaucoup de calculs, la rapidité d'exécution de ces commandes dépend de la taille des données en entrée (si vous calculez pour une région de la France, ça ne prendra évidemment pas le même temps que pour toute la planète) et, comme toujours, de la puissance de la machine.

OSRM met les fichiers résultants de son traitement dans le dossier où on lui a donné le fichier source, donc le mieux est de le mettre dans le dossier de travail, qui est dans mon cas ~/osrm :

$ osrm-extract bretagne-latest.osm.pbf

Cette commande a généré un fichier portant le même nom que celui que vous aviez donné en entrée mais qui a comme extension .osrm. C'est ce fichier que nous allons donner à la commande suivante :

$ osrm-prepare bretagne-latest.osrm

Maintenant, OSRM a tout ce dont il a besoin. On va donc utiliser la commande pour lancer le service qui va répondre aux requêtes :

$ osrm-routed bretagne-latest.osrm

Cette commande va alors écouter le port 5000 afin de répondre aux requêtes. Si tout s'est déroulé correctement, la dernière ligne devrait être :

[info] running and waiting for requests

Il suffit alors de prendre son navigateur préféré (donc Firefox :)) pour aller demander un itinéraire afin de vérifier son bon fonctionnement. Je vous invite à vous munir des coordonnées géographiques (en degrés décimaux) de deux points situés dans la zone que vous avez choisie.

On va donc à l'url http://adresse-ip:5000/viaroute?loc=lat1,long1&loc=lat2,long2 en remplaçant les mots lat1 et long1 par la latitude et la longitude du premier point et lat2 et long2 par la latitude et la longitude du deuxième point. Dans mon cas, pour la Bretagne ça donne http://xxx.xx.xx.x:5000/viaroute?loc=48.4574,-4.3650&loc=48.4009,-4.1188 (n'essayez pas d'y voir un quelconque signe des Illuminatis, ce sont deux points au hasard pour vérifier qu'OSRM me donne bien une route).

Conclusion

On a donc installé le service qui permet de faire des calculs d'itinéraire. Il ne reste plus qu'à installer un frontend (tel que osrm-frontend [4]) pour afficher la route directement sur une carte.

Références

[1] Méthode des contractions hiérarchies : https://en.wikipedia.org/wiki/Contraction_hierarchies

[2] JACKOTS D., « Installer son propre serveur de tuiles », GNU/Linux Magazine n°188, novembre 2015.

[3] STXXL : http://stxxl.sourceforge.net/tags/master/install_config.html

[4] Frontend pour OSRM : https://github.com/Project-OSRM/osrm-frontend




Articles qui pourraient vous intéresser...

Générer et manipuler des images ISO

Magazine
Marque
Linux Pratique
Numéro
124
Mois de parution
mars 2021
Domaines
Résumé

Quand bien même leur usage s’est quelque peu atténué au profit d’autres supports de stockage de masse depuis plusieurs années, les CD-ROM et autres DVD-ROM ont toujours une utilité en 2020 : stockage de données, création de disques bootables (pour distributions GNU/Linux entre autres), disques multimédias... S’il est vrai que sa durée de vie a été surestimée à une époque (peut-être pour favoriser son utilisation), la bonne vieille galette n’est pas encore morte, et il lui reste encore de beaux jours à vivre.

Gérez vos projets Git en mode graphique avec GitKraken

Magazine
Marque
Linux Pratique
Numéro
124
Mois de parution
mars 2021
Domaines
Résumé

Je vous ai précédemment présenté GitLab [0], une forge logicielle utilisant Git vous permettant une gestion globale de vos projets en équipe. Comme nous l’avions vu, une connaissance minimale de Git était nécessaire pour l’utilisation de GitLab. Certains de vos collaborateurs ne sont peut-être pas à l’aise avec la ligne de commandes, ne veulent tout simplement pas l’utiliser ou encore ne veulent pas apprendre la syntaxe des commandes Git. GitKraken [1] est fait pour eux. Il leur permettra de réaliser toutes les opérations Git à l’aide d’une interface graphique.

Le DevOps en pratique

Magazine
Marque
Linux Pratique
Numéro
124
Mois de parution
mars 2021
Domaines
Résumé

Aujourd’hui, le terme DevOps est au cœur de la transformation digitale. En effet, lorsqu’on évoque l’agilité dans le cycle de vie de développement logiciel, on est amené à pratiquer des méthodologies permettant d’accélérer d’une part le processus de développement et de fiabiliser la production logicielle d’un autre côté. Parmi ces méthodologies (Scrum, Kanban…), le DevOps est certainement celle qui a été adopté par la plupart des entreprises ayant comme activité principale ou annexe, la digitalisation de leur système d’information pour faire face au défi que représente l’essor des technologies numériques. Dans cet article, nous ferons un premier tour d’horizon de la partie outillage du DevOps. Il existe une panoplie d’outils et il est impossible de les évoquer tous dans un seul article, car chaque outil nécessiterait un ouvrage à part entière.

Créez vos clusters avec Elasticsearch

Magazine
Marque
Linux Pratique
Numéro
124
Mois de parution
mars 2021
Domaines
Résumé

Vous êtes-vous déjà demandé comment Facebook et Google gèrent leurs immenses masses de données tout en fournissant des services rapides ? Quelle serait votre solution pour gérer une base de données avec un trafic de données abondant ? Voici quelques éléments de réponse à ces questions.

Recréer un ancien environnement à l’aide de Docker

Magazine
Marque
GNU/Linux Magazine
HS n°
Numéro
113
Mois de parution
mars 2021
Domaines
Résumé

Docker est un mot à la mode qu’on associe volontiers à microservices et autre Cloud. Cependant, nous allons voir ici qu’il peut aussi rendre des « macroservices » :-) dans un cadre tout à fait différent, voire contraire : celui de la maintenance logicielle !