Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
osrm [Le 05/07/2015, 16:53]
zococo [Compiler]
osrm [Le 11/09/2022, 11:04] (Version actuelle)
moths-art Suppression des espaces en fin de ligne (détecté et corrigé via le bot wiki-corrector (https://forum.ubuntu-fr.org/viewtopic.php?id=2067892)
Ligne 1: Ligne 1:
-{{tag>Trusty ​SIG openstreetmap ​itinéraires ​BROUILLON}}+{{tag>Bionic ​SIG openstreetmap BROUILLON}}
 ---- ----
    
 ====== OSRM  ====== ====== OSRM  ======
    
-OSRM est un moteur de calculateur ​d’itinéraire open source très légertrès efficace ​et utilise les données Openstreetmap. ​Il se démarque des autres moteurs de calculateurs ​d’itinéraires en utilisant l’algorithme Contraction hiérarchies moins répandu ​(pour les experts) ​que le A* par exemple.+OSRM est un moteur de calcul ​d’itinéraire open source très léger ​et très efficace ​qui utilise les données Openstreetmap. ​Pour les experts, on peut ajouter qu'​OSRM ​se démarque des autres moteurs de calcul ​d’itinéraires en utilisant l’algorithme Contraction hiérarchies moins répandu que le A* par exemple.
    
 OSRM peut être utilisé en ligne mais également installé sur un serveur ou une station de travail personnelle,​ ce que vous propose cette page. OSRM peut être utilisé en ligne mais également installé sur un serveur ou une station de travail personnelle,​ ce que vous propose cette page.
Ligne 15: Ligne 15:
 [[http://​router.project-osrm.org/​viaroute?​loc=48.57636,​7.80027&​loc=48.38453,​-4.49472&​instructions=true|Itinéraire entre le pont de l'​Europe à Strasbourg (point 48,57636 - 7,80027) et le pont de Recouvrance à Brest (point 48,38453 / -4,​49472)]]. [[http://​router.project-osrm.org/​viaroute?​loc=48.57636,​7.80027&​loc=48.38453,​-4.49472&​instructions=true|Itinéraire entre le pont de l'​Europe à Strasbourg (point 48,57636 - 7,80027) et le pont de Recouvrance à Brest (point 48,38453 / -4,​49472)]].
 Syntaxe du lien : <​http://​router.project-osrm.org/​viaroute?​loc=48.57636,​7.80027&​loc=48.38453,​-4.49472&​instructions=true>​ Syntaxe du lien : <​http://​router.project-osrm.org/​viaroute?​loc=48.57636,​7.80027&​loc=48.38453,​-4.49472&​instructions=true>​
 +</​note>​
  
 Vous allez pouvoir installer cette application sur votre propre ordinateur. Vous allez pouvoir installer cette application sur votre propre ordinateur.
  
-Le résultat ​peur apparaître un peu difficile à lire. Voir en bas de page une suggestion de script pour y voir plus clair. +Le résultat ​du calcul OSRM peut apparaître un peu difficile à lire. Voir en bas de page une suggestion de script pour y voir plus clair.
-</​note>​+
  
-===== Pré-requis ===== +=====Pré-requis=====
-  +
-  * Disposer des [[:​sudo|droits d'​administration]]. +
-  * Disposer d'une connexion à Internet configurée et activée. +
-  * Avoir [[:​tutoriel:​comment_installer_un_paquet|installé les paquets]] **[[apt>​build-essential|build-essential]]** **[[apt>​git|git]]** **[[apt>​cmake|cmake]]** **[[apt>​pkg-config|pkg-config]]** **[[apt>​libprotoc-dev|libprotoc-dev]]** **[[apt>​libprotobuf8|libprotobuf8]]** **[[apt>​protobuf-compiler|protobuf-compiler]]** **[[apt>​libprotobuf-dev|libprotobuf-dev]]** **[[apt>​libosmpbf-dev|libosmpbf-dev]]** **[[apt>​libpng12-dev|libpng12-dev]]** **[[apt>​libbz2-dev|libbz2-dev]]** **[[apt>​libstxxl-dev|libstxxl-dev]]** **[[apt>​libstxxl-doc|libstxxl-doc]]** **[[apt>​libstxxl1|libstxxl1]]** **[[apt>​libxml2-dev|libxml2-dev]]** **[[apt>​libzip-dev|libzip-dev]]** **[[apt>​libboost-all-dev|libboost-all-dev]]** **[[apt>​lua5.1|lua5.1]]** **[[apt>​liblua5.1-0-dev|liblua5.1-0-dev]]** **[[apt>​libluabind-dev|libluabind-dev]]** **[[apt>​libluajit-5.1-dev|libluajit-5.1-dev]]** **[[apt>​libtbb-dev|libtbb-dev]]**. +
-<​code>​ +
-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 +
-</​code>​ +
-  +
-===== Installation ===== +
-  +
-==== Télécharger les sources ​====+
  
-<code> +[[:​tutoriel:​comment_installer_un_paquet|Installer les paquets]] : **[[apt>build-essential,​git,​cmake,​pkg-config,​libprotoc-dev,​libprotobuf9v5,​protobuf-compiler,​libprotobuf-dev,​libosmpbf-dev,​libpng12-dev,​libbz2-dev,​libstxxl-dev,​libstxxl-doc,​libstxxl1v5,​libxml2-dev,​libzip-dev,​libboost-all-dev,​lua5.2,liblua5.2-dev,libtbb-dev,​doxygen,​checkinstall]]**.
-git clone https://​github.com/Project-OSRM/osrm-backend.git +
-</​code>​+
  
-==== Compiler ==== 
  
-Se placer dans le réperoire à l'​intérieur duquel les sources ont été téléchargées : +===== Installation =====
-<​code>​ +
-cd osrm-backend +
-</​code>​+
  
-Puis lancer la compilation : +  * Télécharger les sources : <​code>​git clone https://​github.com/​Project-OSRM/​osrm-backend.git</​code>​ 
- +  * Compiler en se plaçant dans le répertoire à l'​intérieur duquel les sources ont été téléchargées : <​code>​cd osrm-backend</​code>​ 
-<​code>​ +  * Puis lancer la compilation : <​code>​mkdir -p build
-mkdir -p build+
 cd build cd build
 cmake .. cmake ..
 make make
-sudo checkinstall+sudo checkinstall ​--pkgname osrm-backend
 </​code>​ </​code>​
  
Ligne 59: Ligne 41:
 <​code>​ <​code>​
 cd <​répertoire build> cd <​répertoire build>
-ln -s ../​profiles/​car.lua ​profile.lua+mkdir profiles 
 +cd profiles 
 +ln -s ../../​profiles/​car.lua 
 +cd ..
 ln -s ../​profiles/​lib/​ ln -s ../​profiles/​lib/​
 </​code>​ </​code>​
-Le serveur est installé. ​+Le serveur est installé.
    
 ===== Configuration ===== ===== Configuration =====
Ligne 75: Ligne 60:
 et télécharger le fichier provence-alpes-cote-d-azur-latest.osm.pbf et télécharger le fichier provence-alpes-cote-d-azur-latest.osm.pbf
  
 +==== Création du fichier .stxxl ====
 +
 +La création de la base de données interne produit un fichier assez volumineux. Par défaut, ce fichier est installé sur la partition racine, au risque de  saturer l'​espace disque disponible si votre système, comme cela est recommandé,​ est installé sur une partition séparée. Il est donc conseillé de créer dans le répertoire <​build>​ d'osrm un fichier <​.stxxl>​ qui comporte les instructions nécessaires à l'​installation des données dans un autre répertoire,​ situé dans une autre partition.
 +
 +La syntaxe de l'​instruction est la suivante :
 +disque=nom_complet_du_disque,​capacité,​méthode_d’accès
 + *  nom_complet_du_disque : chemin complet d’accès au disque depuis la racine : /tmp/stxxl, /mnt/disk0, /​media/​utilisateur/​mon_disque par exemple.
 + *  capacité : capacité maximale du disque en mégaoctets. Sur le site osrm la valeur 25000 est souvent conseillée,​ plusieurs posts de forums suggèrent de porter cette valeur à 100000 pour le fichier de la planète entière.
 + *  méthode_d'​accés : à choisr parmi les différentes implémentations d’accès au disque.
 + *  syscall : appels en lecture/​écriture au système qui permettent des transferts directs du disque vers la mémoire paginée de l'​utilisateur en évitant les copies superflues (généralement la méthode la plus rapide)
 + *  mmap : les transferts disques sont réalisés à travers des appels système à mmap et munmap
 + *  simdisk : simule l'​horloge (timings ?) du disque IBM IC35L080AVVA07. nom_complet_du_disque doit pointer sur un fichier situé sur une partition RAM disposant d'un espace disque suffisant.
 +
 +Il est généralement conseillé d'​installer le fichier de la planète entière sur une partition séparée afin de prévenir un grand nombre d’accès disque en lecture/​écriture qui ralentissent le fonctionnement.
 +
 +Exemple de création d'un fichier <​.stxxl>​
 +<​code>​
 +cd build
 +echo "​disk=/​tmp/​stxxl,​25000,​syscall"​ > .stxxl
 +</​code>​
 +
 +<note tip>​Lorsque la taille du fichier stxxl excède l'​espace disponible sur la partition, l'​erreur <"​External memory block allocation error">​ est affichée.</​note>​
 +
 +Pour plus d'​information (en anglais) : [[https://​github.com/​Project-OSRM/​osrm-backend/​wiki/​Running-OSRM|Projet OSRM]]
 ==== Retraitement du fichier pbf ==== ==== Retraitement du fichier pbf ====
-Le retraitement du fichier pbf permettra l'​élimination des données inutiles pour le routage et leur reformattage ​aux normes utilisées par Osrm.+Le retraitement du fichier pbf permettra l'​élimination des données inutiles pour le routage et leur reformatage ​aux normes utilisées par Osrm.
  
 <​note>​ <​note>​
Ligne 86: Ligne 95:
  ​./​osrm-extract provence-alpes-cote-d-azur-latest.osm.pbf ​  ​./​osrm-extract provence-alpes-cote-d-azur-latest.osm.pbf ​
 </​code>​ </​code>​
 +
 +<​note>​
 +Attention : si vous obtenez l'​erreur "TBB Warning: Exact exception propagation is requested by application but the linked library is built without support for it" c'est que votre machine manque de RAM... vous pouvez y remédier en ajoutant plus de swap :
 +<​code>​
 +fallocate -l 64G memory.swap
 +chmod 600 memory.swap
 +mkswap memory.swap
 +sudo chown root: memory.swap
 +sudo swapon memory.swap
 +</​code>​
 +</​note>​
 +
 il est ensuite nécessaire de hiérarchiser ces données : il est ensuite nécessaire de hiérarchiser ces données :
 <​code>​ <​code>​
-./osrm-prepare ​provence-alpes-cote-d-azur-latest.osrm+./osrm-contract ​provence-alpes-cote-d-azur-latest.osrm
 </​code>​ </​code>​
  
Ligne 95: Ligne 116:
 ===== Utilisation ===== ===== Utilisation =====
 ==== Démarrage du serveur ==== ==== Démarrage du serveur ====
-Le démarrage du serveur s'​effectue en ligne de commande. Il suffit de lancer l'​executable osrm-routed suivi du chemin vers le fichier .osrm créé avec osrm-extract et osrm-prepare. Exemple :+Le démarrage du serveur s'​effectue en ligne de commande. Il suffit de lancer l'​executable osrm-routed suivi du chemin vers le fichier .osrm créé avec osrm-extract et osrm-contract. Exemple :
 <​code>​ <​code>​
 ./​osrm-routed ../​donnees_carto/​provence-alpes-cote-d-azur-latest.osrm ./​osrm-routed ../​donnees_carto/​provence-alpes-cote-d-azur-latest.osrm
Ligne 103: Ligne 124:
 <​code>​ <​code>​
 [info] running and waiting for requests [info] running and waiting for requests
 +</​code>​
 +
 +<​note>​En fonction de la taille de votre carte et des performances de votre machine, ce message peut mettre du temps avant d'​apparaitre : tant qu'il n'est pas affiché, inutile de lancer une requête pour tester si ça fonctionne !</​note>​
 +
 +==== Arrêt du serveur ====
 +L'​arrêt du serveur se fait par ctrl + C dans le terminal ou bien par la fermeture du terminal.
 +
 +Si le lancement est effectué en ligne de commande, passer par kill :
 +<​code>​
 +kill $(ps -x | grep osrm | grep -v grep | awk '​{print $1;}')
 </​code>​ </​code>​
 ==== Lancement des requêtes ==== ==== Lancement des requêtes ====
 L'​utilisation d'Osrm se fait dans le navigateur interne en saisissant localhost:​5000 comme adresse. L'​utilisation d'Osrm se fait dans le navigateur interne en saisissant localhost:​5000 comme adresse.
  
-La fonctionnalité utilisée pour obtenir un itinéraire est viaroute. ​+/!\ Documentation complète de l'API disponible sur la page du projet 
 + 
 +http://​project-osrm.org/​docs/​v5.15.2/​api/#​nearest-service 
 + 
 +http://​project-osrm.org/​docs/​v5.15.2/​api/#​general-options 
 + 
 +NB : la forme et les options d'​appels de l'API ont un peu évolué par rapport aux exemples cités ci-après 
 + 
 +La fonctionnalité utilisée pour obtenir un itinéraire est viaroute, suivi des coordonnées des points à relier.
  
 <note important>​Les coordonnées sont saisies en faisant précéder la longitude par la latitude, les résultats d'une inversion de données peuvent être fantaisistes puisque mettant en relation deux points bien différents des points recherchés. Les latitudes nord sont positives, les latitudes sud sont négatives. Les longitudes est sont positives, les longitudes ouest sont négatives (selon le méridien de Greenwich évidemment).</​note>​ <note important>​Les coordonnées sont saisies en faisant précéder la longitude par la latitude, les résultats d'une inversion de données peuvent être fantaisistes puisque mettant en relation deux points bien différents des points recherchés. Les latitudes nord sont positives, les latitudes sud sont négatives. Les longitudes est sont positives, les longitudes ouest sont négatives (selon le méridien de Greenwich évidemment).</​note>​
Ligne 119: Ligne 158:
 http://​router.project-osrm.org/​viaroute?​loc=43.29528,​5.37439&​loc=43.52339,​5.44452&​instructions=true http://​router.project-osrm.org/​viaroute?​loc=43.29528,​5.37439&​loc=43.52339,​5.44452&​instructions=true
  
-Les résultats ne seront pas forcément identiques entre les deux serveurs selon les données figurant dans chacune des bases de donnée mais c'est excessivement proche. ​+Les résultats ne seront pas forcément identiques entre les deux serveurs selon les données figurant dans chacune des bases de donnée mais c'est excessivement proche. 
 + 
 +<note tip>Pour connaître les coordonnées géographiques d'un point particulier,​ le site [[https://​tile.openstreetmap.fr/​|https://​tile.openstreetmap.fr/​]] permet de faire apparaître en bas à droite de l'​écran les coordonnées du point survolé par le curseur de la souris. Utile pour un usage occasionnel,​ probablement pas si vous avez fait le choix d'​installer OSRM. En effet, dans ce cas on peut supposer que vous disposez déjà d'un nombre conséquent de coordonnées géographiques organisées en base de données.</​note>​
  
 ==== Retraiter les données ==== ==== Retraiter les données ====
Ligne 132: Ligne 173:
    
 ===== Voir aussi ===== ===== Voir aussi =====
-  + 
-  * **(en)** [[http://​project-osrm.org/​|Projet OSRM]] +    * [[nominatim|Nominatim]] 
-  ​* ​ + 
-  * **(fr)** [[http://​dogeo.fr/​osrm-installation/|Dogeo]] +   * **(en)** [[http://​project-osrm.org/​|Projet OSRM]] 
-  ​* ​ + 
-  * **(fr)** [http://​openstreetmap.fr/​osrm-10M|OSRM sur openstreetmap]]+  * **(fr)** [[https://blog.dogeo.fr/2015/02/23/​osrm-installation.html|Dogeo]] 
 + 
 +  * **(fr)** ​[[http://​openstreetmap.fr/​osrm-10M|OSRM sur openstreetmap]]
    
 ---- ----
-//​Contributeurs principaux : [[utilisateurs:​votre_identifiant|votre nom ou pseudonyme]],​ [[utilisateurs:​autre_identifiant|nom ou pseudo autre]].//+//​Contributeurs principaux : [[zococo|Zococo]].//
    
 //Basé sur [[https://​github.com/​Project-OSRM/​osrm-backend/​wiki/​Building%20OSRM|« Building OSRM »]] parDaniel J. H.// //Basé sur [[https://​github.com/​Project-OSRM/​osrm-backend/​wiki/​Building%20OSRM|« Building OSRM »]] parDaniel J. H.//
  • osrm.1436108012.txt.gz
  • Dernière modification: Le 05/07/2015, 16:53
  • par zococo