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


Sur le même sujet

Apprenez à utiliser kubeadm

Magazine
Marque
GNU/Linux Magazine
Numéro
236
|
Mois de parution
avril 2020
|
Domaines
Résumé

Combien de fois m'avez-vous entendu dire « nous allons utiliser kubeadm pour faire ceci ou faire cela », et puis boum, un kubeadm init plus tard, tout est prêt ? Souvent ? Très souvent ? Trop souvent ? Alors pour une fois, pourquoi ne pas consacrer un article entier à ce merveilleux projet ?

Le DevOps dans le monde réel

Magazine
Marque
Linux Pratique
Numéro
118
|
Mois de parution
mars 2020
|
Domaines
Résumé

Cela fait environ cinq ans que les demandes de « DevOps » sont de plus en plus nombreuses dans le milieu professionnel. Souvent, lors des entretiens, on s'aperçoit que chaque client, ou presque, a sa propre définition du mot. Nous allons essayer de donner ici notre vision, tirée de notre expérience de terrain, de cette fonction.

KeeRest : mettez du DevOps dans votre KeePass

Magazine
Marque
MISC
Numéro
108
|
Mois de parution
mars 2020
|
Domaines
Résumé

Nous avions vu dans MISC n°103 comment déployer une base KeePass en mode SaaS ciblant les particuliers ou de petits périmètres professionnels. Dans un autre monde, les pratiques DevOps se démocratisent et demandent d’augmenter l’agilité des développements tout en réduisant les délais de mise en production. Cet article est le fruit d’une collaboration entre un DevOps et un ingénieur SSI pour voir de quelle manière il est possible de tirer profit de KeePass dans ces environnements.

LXC : les options avancées utiles en production

Magazine
Marque
Linux Pratique
Numéro
118
|
Mois de parution
mars 2020
|
Domaines
Résumé

La présentation de LXC faite dans le précédent numéro [1] nous a permis de mettre en œuvre les fonctionnalités de base et de créer rapidement des conteneurs fonctionnels. Cependant, les capacités de LXC ne s’arrêtent pas là et nous allons pouvoir étudier ici plusieurs options bien utiles en production.

Les alternatives à Git

Magazine
Marque
GNU/Linux Magazine
HS n°
Numéro
107
|
Mois de parution
mars 2020
|
Domaines
Résumé

Dans le petit monde des gestionnaires de versions concurrentes, il n'existe pas que Git. D'autres projets permettent également de conserver les différentes versions d'un code et cet article permettra d'en faire un petit tour d'horizon.

Git, un tour d’horizon

Magazine
Marque
GNU/Linux Magazine
HS n°
Numéro
107
|
Mois de parution
mars 2020
|
Domaines
Résumé

Le vocabulaire et les concepts-clés de Git ayant été définis dans le précédent article, nous allons maintenant nous intéresser à la manière dont les concepts présentés se réalisent à l’aide des commandes de l’outil. Bref, passons à la pratique !

Par le même auteur

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.

Installer son propre serveur de tuiles

Magazine
Marque
GNU/Linux Magazine
Numéro
188
|
Mois de parution
décembre 2015
|
Domaines
Résumé
D'un côté, le projet OpenStreetMap (ou OSM) fournit des données, de l'autre il y a les différentes cartes. Qu'y a-t-il entre les deux ? Le serveur de tuiles ! Et si on en installait un ?

Le nouveau système de queueing de Packet Filter

Magazine
Marque
GNU/Linux Magazine
HS n°
Numéro
74
|
Mois de parution
septembre 2014
|
Domaines
Résumé
Si vous avez déjà joué avec un BSD, vous devez certainement connaître (et apprécier) Packet Filter (PF), le firewall développé sur OpenBSD. Si ce n'est pas le cas, on a déjà sûrement dû vous en vanter la syntaxe claire par rapport à celle incompréhensible d'iptables (certes, au bout de la 15ème fois qu'on utilise une commande, on commence à se rappeler à quoi sert l'obscure option -machin). Mais quid du queueing avec PF ?