SmartRouting est un moteur de calcul d’itinéraires et de recherche de proximité performant. Les calculs d’itinéraire sont basés sur un fichier décrivant le réseau routier appelé graphe. Ce fichier peut être créé à partir du SIG Geoconcept et d’une base de navigation routière, comme celle de Navteq. Il est possible de définir des profils de vitesses (piéton, poids lourds) et de prendre en considération diverses règles de ciculation (sens interdits, interdictions de tourner, …). SmartRouting Server permet d’effectuer diverses opérations :
- caclul d’un itinéraire entre deux points,
- calcul d’un itinéraire entre un point et plusieurs points,
- création d’une feuille de route,
- recherche d’entités à proximité d’un point de référence (Search Around).
SmartRouting permet d’obtenir un itinéraire complet avec la description de la route (y compris le chemin que la route suit entre deux intersections), la durée de parcours de chaque segment et la distance.
Cette documentation présente ce composant et est décomposée en deux parties distinctes :
- SmartRouting JEE : il s’agit d’un composant destiné à l’intégration du moteur de calcul d’itinéraires SmartRouting à la plate-forme Java Enterprise Edition (JEE) et ses sous-ensembles comme le moteur de servlet Tomcat.
- SmartRouting Command Line : il s’agit d’un composant destiné à calculer des itinéraires en ligne de commande.
Le graphe : toute fonction de calcul nécessitant un parcours de réseau nécessite l’utilisation d’un graphe. Le graphe constitue une vue logique du réseau. Il contient et décrit toutes les informations relatives aux connectivités entre les tronçons, aux coûts et aux contraintes. Il est construit et organisé de façon que les calculs s’effectuent de manière performante. C’est un fichier au format SITI.
Astuce | |
---|---|
Ce format SITI correspond à la seconde génération de graphes développée pour Geoconcept (à partir de Geoconcept 6.5). Il intègre potentiellement de nombreuses caractéristiques supplémentaires (multiples profils de vitesses, nombreuses règles de gestion …). |
Merci de vous reporter au guide de référence de la solution Geoconcept pour les règles de création d’un graphe.
Lors des calculs, les points de départs, les étapes et les arrivées sont reliés au réseau constitué par le graphe, même si les objets sont distants de celui-ci (points situés à une certaine distance du réseau) : c’est l’accrochage au graphe. Cette opération vise à rechercher autour de ces points les tronçons les plus proches. Ensuite, ces tronçons sont utilisés pour déterminer les débuts de solution possibles.
L’itinéraire calculé intègre alors une distance parcourue entre ces points et le graphe, appelée distance d’accrochage au graphe. Pour optimiser les performances, il existe une option permettant de fixer une distance maximale d’accrochage au graphe, exprimée en mètres (max graph snap distance). Cela évite de parcourir tout le réseau pour trouver les tronçons les plus proches.
En outre, la vitesse d’accrochage au graphe, vitesse de parcours de la distance séparant les départs, étapes ou arrivées du graphe peuvent également être personnalisées (graph snap speed).
Un métagraphe consiste dans la possibilité d’intégrer à la création du graphe un graphe simplifié ou allégé d’une partie de son contenu. L’utilisation du métagraphe vise essentiellement à accélérer le parcours du graphe, lors de calculs d’itinéraires s’effectuant sur de longues distances.
Note | |
---|---|
Si un itinéraire doit être calculé entre deux villes distantes de plusieurs centaines de kilomètres, il est préférable de privilégier un parcours du graphe sur les niveaux de routes principaux (tendant vers le niveau logique 1, considéré comme le niveau le plus important). Autour des points de départs, étapes éventuelles et arrivées, les niveaux logiques non présents dans le métagraphe sont bien empruntés, mais pour la liaison de ville à ville, les niveaux du métagraphe sont privilégiés. |
Le métagraphe est un fichier accompagnant le graphe SITI. Il est constitué de l’association d’un fichier au format MG et d’un fichier MGLIST. Le fichier MG est chargé en mémoire.
Il s’agit du niveau logique sur lequel le calcul d’itinéraires va se faire principalement. Deux cas sont possibles :
- en utilisant un métagraphe : il s’agit du cas « normal », le métagraphe étant spécifiquement construit pour accélérer le calcul d’itinéraires sur de longues distances (seules les routes importantes seront sélectionnées sur les longs trajets). Il est nécessaire de renseigner le niveau logique défini dans le métagraphe pour optimiser le temps de calcul,
- sans utilisation de métagraphe : le calcul d’itinéraires sera optimisé en interrogeant prioritairement les tronçons du niveau spécifié dans le graphe directement.
Avertissement | |
---|---|
Autour des points de passage (départ, étapes, arrivée), toutes les routes seront prises en compte, peu importe le niveau logique choisi. |
Avertissement | |
---|---|
Un niveau logique trop élevé peut dégrader le calcul d’itinéraires car de nombreuses routes ne seront pas prises en compte. |
Intégration JEE
SmartRouting JEE est un composant d’intégration à la plate-forme JEE, il offre un service de calcul d’itinéraires aux modules JEE déployés sur un serveur d’applications (au sens large, moteur de servlet type Tomcat compris).
Le module consommateur peut être de n’importe quel type (webapp, ejb, etc). De même à l’intérieur du module JEE, le consommateur peut être de n’importe quel type (servlet, jsp, pojo, etc).
Mode d’accès
L’application utilisant le calcul d’itinéraires référence le fournisseur via un nom logique de l’annuaire JNDI (Java Naming and Directory Interface) du serveur d’applications. La manière de monter le fournisseur sera décrite plus loin.
Traditionellement, le nom logique utilisé est « geoconcept/smartrouting/default » du contexte « java:comp/env » mais il est possible d’utiliser un autre nom, un autre contexte ou de monter plusieurs fournisseurs de types différents.
Par soucis de simplicité, le cas d’utilisation le plus courant (un seul fournisseur primaire local avec nommage par défaut) sera décrit dans un premier temps.
Organisation du composant : Adaptation de ressource JEE et éléments externes
smartrouting-jee se compose de plusieurs parties. Pour des questions de performances et de réutilisation, le moteur (aussi appelé noyau) est écrit en C++ et est donc diffusé sous forme de librairies natives. La partie intégration (adaptateur de ressource) réalise le lien avec le moteur en gérant sa mise en oeuvre par chargement de ses librairies natives. En terme de déploiement de fichiers cela concerne donc deux arborescences distinctes :
En terme d’exécution, les librairies natives seront chargées en mémoire dans le processus de l’instance du serveur d’application (ou sa partition éventuelle selon les modèles) au démarrage. La partie adaptateur de ressource expose une interface java et gère le moteur instancié en mémoire directement via JNI.
Aucun module additionnel n’est indispensable au bon fonctionnement de l’adaptateur de ressource et leur déploiement est optionnel.
smartrouting-admin
smartrouting-admin est une webapp permettant la vérification de la bonne installation du produit, sa configuration et le test de bon fonctionnement.
Configuration de mise en oeuvre
Un graphe (fichier .siti) publié constitue une source de données (datasource).
Le fichier service.xml situé dans %smartrouting%/conf définit la configuration générale du fournisseur de service de calcul d’itinéraires. Celui ci contient notamment une configuration par défaut pour les sources de données (default‑datasource). Il est possible de définir une configuration spécifique à une source de données. Pour connaître les paramètres, vous pouvez consulter le chapitre sur les options.
Si aucune configuration spécifique n’a été définie alors la configuration par défaut (default-datasource) s’applique à la mise en oeuvre de cette source de données.
Par ailleurs il est possible de définir certains paramètres lors de l’appel (via CalculateRouteOptions). Ainsi la valeur concrète que prend un paramètre peut provenir (dans l’ordre) :
- de l’appel si il est affecté dans CalculateRouteOptions (cette affectation est optionnelle)
- de la valeur indiquée au niveau de la configuration de datasoure particulière (si une configuration de datasource particulière a été définie)
-
de la valeur indiquée au niveau de la configuration de datasoure par défaut (
default-datasource
).
Configuration détaillée d’une source de données
Il est possible de définir la configuration de mise en oeuvre d’un graphe de manière très détaillée.
Cette définition peut répondre à des besoins particuliers, elle n’est pas indispensable car la configuration par défaut convient pour la grande majorité des cas.
Certains paramètres sont définissables au moment de l’appel, d’autres sont fixés à la création de l’instance de source de données et non modifiables par la suite.
Les paramètres que l’on peut définir aussi au moment de l’appel seront décrits dans la section CalculateRouteOptions.
Datasource identification
Cette partie permet l’identification d’une source de données dans l’administration.
File : graphe,
Name : alias de nom de la source de données (optionnel).
Les options disponibles sont celles décrites dans le guide de référence de SmartRouting.
Elles sont accessibles visuellement à travers l’application de test smartrouting-admin.war, qui présente chacune une entrée pour voir son comportement dans le résultat.
Coordonnées en entrée et en sortie
Si les coordonnées en entrée ne sont pas dans le même système de coordonnées que le graphe, il est nécessaire de les spécifier
via le paramètre input coordinate system
(sous la forme epsg:4326 par exemple).
Les coordonnées en sortie seront dans le même système que le système de coordonnées du graphe, sauf si le paramètre output coordinate system
est renseigné du code EPSG (sous la forme epsg:27572 par exemple).
Les résultats en sortie
Il est possible, outre les segments composants l’itinéraire calculé, de recevoir comme résultat des attributs des-dits segments, grâce aux champs fields et language.
- fields : permet de sélectionner les champs qu’on souhaite retourner (par défaut, tous les champs sont retournés si l’option est activée. Le nom des champs doit être écrit en anglais),
- language : permet de retourner ces champs dans la langue souhaitée.
Calculate locations
Cette option permet de trouver un point sur l’itinéraire calculé à partir du point de départ. La valeur Calculate locations en secondes permet de trouver ce point à partir du début de l’itinéraire.
Consolidate segments
Cette option permet de regrouper, dans le résultat du calcul d’itinéraires, les segments qui portent le même nom et qui sont proches en un seul segment (utile pour la navigation).
Options avancées
Le fichier %smartrouting%/smartrouting/conf/service.xml
permet de spécifier la configuration pour tous les graphes.
Vous pourrez trouver la configuration des graphes que vous possédez dans la page Datasources configuration, en cliquant sur le lien info. L’utilisation ou non d’un métagraphe dans le graphe est affichée en bas de la page.
SmartRoutingCommandLine, ou SRCmdLine est un programme indépendant dont le principe est inspiré de UGCCmdLine, qui permet de calculer une série de d’itinéraires en une seule fois.
Les itinéraires à calculer sont présents dans un fichier en entrée (txt) :
-
Une ligne par itinéraire, avec dans l’ordre :
- X Départ
- Y Départ
- X Arrivée
- Y Arrivée
- TypeDeCalcul(« 1 » ou « Shortest » pour un calcul au plus court chemin, « 2 » ou « Fastest » pour un calcul au plus rapide)
- Chacune de ces valeurs doit être séparée d’un ‘ ;’
- La dernière valeur, TypeDeCalcul, est optionnelle (si non spécifié, SRCmdLine prend la valeur spécifiée dans sa config : voir plus bas)
Les résultats des calculs d’itinéraire sont écrits dans un fichier résultat :
-
Une ligne par itinéraire, avec dans l’ordre :
- La distance en mètres de l’itinéraire,
- Le temps en secondes de l’itinéraire,
- Le temps en millisecondes du calcul d’itinéraire (le traitement),
- Si aucun itinéraire n’a pu être calculé, les valeurs seront remplacées par des « N.A. »
- Chacune de ces valeurs est séparée d’un « ; »
SRCmdLine est un outil qui se lance en ligne de commande depuis command line.
- Pour afficher l’aide : « SRCmdLine.exe –help »
- Pour afficher la version du produit : « SRCmdLine.exe –version »
- On doit ou on peut spécifier une série de paramètres (certains sont obligatoires, d’autres juste optionnels) qui seront utilisés pour configurer SmartRouting et donc l’ensemble des calculs d’itinéraires.
- Les valeurs de ces paramètres peuvent être soit définis dans un fichier de configuration au format XML, soit définis directement dans la ligne de commande.
- On spécifie le fichier de config de la manière suivante : SRCmdLine –config <CheminCompletVersLeFichier>
-
Voici la liste des paramètres qui peuvent être spécifiés :
-
Fichier d’entrée (obligatoire) :
- Ligne de commande : -in <CheminCompletVersLeFichierDEntrée>
- XML : <smartrouting-configuration><smartrouting-input><path>
-
Fichier de sortie (ou de résultats) (obligatoire) :
- Ligne de commande : -out <CheminCompletVersLeFichierDeSortie>
- XML : <smartrouting-configuration><smartrouting-output><path>
-
Graphe (obligatoire) :
- Ligne de commande : -graph <CheminCompletVersLeFichierGraphe>
- XML : <smartrouting-configuration><smartrouting><connection-distance>
-
Distance maximale de recherche d’accrochage (optionnel) :
- Ligne de commande : -connectionDistance <value>
- XML : <smartrouting-configuration><smartrouting><connection-distance>
-
Vitesse d’accrochage (optionnel) :
- Ligne de commande : -connectionSpeed <value>
- XML : <smartrouting-configuration><smartrouting><connection-speed>
-
Niveau de reference (optionnel) :
- Ligne de commande : -refLevel <value>
- XML : <smartrouting-configuration><smartrouting><reference-level>
-
Type de calcul d’itinéraire (optionnel) :
- Ligne de commande : -itiMode <value>
- XML : <smartrouting-configuration><smartrouting><iti-mode>
- Pour un calcul au plus court : value=1 ou value=Shortest
- Pour un calcul au plus rapide : value=2 ou value=Fastest
-
Chargement complet du graphe (optionnel) :
- Ligne de commande : -fullLoadGraph <value>
- XML : <smartrouting-configuration><smartrouting><full-load-graph>
- Chargement complet : value=1
- Chargement partiel : value=0
-
Système de coordonnée en entrée (optionnel) :
- Ligne de commande : -inputProj <codeEPSG>
- XML : <smartrouting-configuration><smartrouting><input-projection>
-
Exemple d’appel au programme :
-
SRCmdLine -graph "data/graph.siti" -in "data/input.csv" -out "output.csv" -config "config.xml"
- Si un paramètre est défini à la fois dans le fichier de config et dans la ligne de commande, la valeur spécifiée dans la ligne de commande l’emporte.
- Si le type de calcul d’itinéraire (plus rapide ou plus court) est défini à la fois dans le fichier d’entrée et dans le fichier de config ou la ligne de commande, la valeur spécifiée dans le fichier d’entrée l’emporte.
<?xml version="1.0" encoding="utf-8"?> <smartrouting-configuration> <!-- Smart Routing configuration --> <smartrouting> <!-- Graph file path--> <!-- <graph-path>E:\SmartRouting-cmdline\SRCmdLine\navteq_maps_for_geoconcept_Q311_france_v2.siti</graph-path> --> <graph-path>E:\SmartRouting-cmdline\graphe.siti</graph-path> <!-- Mode of routing. 1:Distance, 2:Time --> <iti-mode>1</iti-mode> <!-- Set connection distance --> <connection-distance>150.</connection-distance> <full-load-graph>1</full-load-graph> <reference-level>3</reference-level> </smartrouting> <!-- Input configuration (text file format) --> <smartrouting-input> <!-- Path of the input file. --> <path>E:\SmartRouting-cmdline\SRCmdLine\input.csv</path> </smartrouting-input> <!-- Ouput configuration (text file format) --> <smartrouting-output> <!-- Path of the output file. --> <path>E:\SmartRouting-cmdline\SRCmdLine\output.csv</path> </smartrouting-output> </smartrouting-configuration>