Service de calcul d'itinéraire

GNU/Linux Magazine n° 189 | janvier 2016 | Daniel Jakots
Creative Commons
  • Actuellement 0 sur 5 étoiles
0
Merci d'avoir participé !
Vous avez déjà noté cette page, vous ne pouvez la noter qu'une fois !
Votre note a été changée, merci de votre participation !
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.

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