Université de Douala Master 2 Géomatique « Informatique Appliquée aux Systèmes d’Information Géographique » (IASIG) Rapport de Projet Personnel de Géomatique Implémentation des fonctionnalités de routage dans un réseau routier en se basant sur la bibliothèque Opensource "pgRouting" qui est une extension de la base de données spatiale "Postgis/postgreSQL" Présenté par : Taponjou Kenfack Carlos Gael Année académique 2014-2015 1 Master2 IASIG Douala 2014-2015 – par Taponjou Kenfack Carlos Gael Résumé Les problèmes liés au déplacement dans un réseau routier est une problématique de plus en plus ancrer dans des recherches scientifiques ces dernières années. Notamment dans les possibilités de déplacement des véhicules que celui du déplacement des piétons. Ce rapport présente des implémentations des algorithmes de routages dans des réseaux routiers en se basant sur la bibliothèque pgRouting. Les algorithmes de Dijksta, A-Etoile et Shooting-Star sont donc dans ce domaine largement utilisé pour la détermination des itinéraires de coût minimal dans des réseaux routiers de plus en complexe pour leurs souplesses et analyses dans le traitement des données. Toutefois, ces algorithmes ont des particularités en ce qui concerne le traitement des données, la création des topologies de réseaux et le choix des variables. Les données routières traitées dans cette thématique sont généralement issues des bases de données propriétaires ou des services cartographiques en ligne tel que OpenStreetMap, GoogleMap et bien d’autre. Abstract Problems related to the movement in a road network is an issue increasingly anchored in scientific research in recent years. Especially in cars traveling opportunities than the pedestrian movement. This report provides implementations of routing algorithms in road networks based on pgRouting library. Algorithms Dijksta, A-Star and Shooting Star are widely used in this area to determine the minimum cost routes in road networks of more complex for their suppleness and analysis in the data processing. However, these algorithms have features regarding the processing of data, creation of network topologies and the selection of variables. Road data processed in this theme are usually derived from proprietary databases or online map services such as OpenStreetMap, GoogleMap and many other. 2 Master2 IASIG Douala 2014-2015 – par Taponjou Kenfack Carlos Gael Sommaire Introduction………………………………………………………………………………. 4 1- PRESENTATION DE POSTGIS/POSTGRESQL………………………………... 5 1.1- Postgis…………………………………………………………………………... 5 1.2- PostgreSQL……………………………………………………………………….. 5 1.3- Installation de PostgreSQL et Postgis………………………………………... 5 2- PRESENTATION DE pgRouting…………………………………………………….. 5 2.1- Librairie pgRouting……………………………………………………………… 5 2.2- Installation de pgRouting……………………………………………………….. 5 3- FONCTIONNALITES DE ROUTAGES SUR UN RESEAU ROUTIER…………………………………………………………………………………. 6 3.1- Présentation…………………………………………………………………....... 6 3.2- Problématique du plus court chemin dans un réseau routier…………..... 7 3.3- Principe de l’algorithme du plus court chemin dans le cas général…………………………………………………………………………………….. 7 3.4- Implémentation de quelques algorithmes de routage……………………. 7 3.4.1- Algorithme de Dijkstra…………………………………………………… 7 3.4.1.1- Prérequis de cet algorithme .……………………………………. 7 3.4.1.2- Fonction avec paramètres………………………………………… 8 3.4.2- Algorithme A-Etoile……………………………………………………… 8 3.4.2.1- Prérequis de cet algorithme...……………………………………. 8 3.4.2.2- Fonction avec paramètres………………………………………… 9 3.4.3- Shooting-Star………………………………………………………………… 9 3.4.3.1- Prérequis de cet algorithme .……………………………………... 9 3.4.3.2- Fonction avec paramètres………………………………………. 10 3.5- requêtes de routage…………………………………………………………….. 10 3.5.1- Coûts pondérés……………………………………………………………… 10 3.5.2- Restriction d’accès…………………………………………………………… 11 4- Application dans un réseau routier……………………………………………….. 11 4.1- Exemple de réseau routier……………………………………………………... 11 4.2- Fonctionnalité shortest_path_astar()………………………………………… 11 CONCLUSION…………………………………………………………………………… 16 BIBLIOGRAPHIE……………………………………………………………………….. 17 3 Master2 IASIG Douala 2014-2015 – par Taponjou Kenfack Carlos Gael Introduction Les progrès scientifiques ont bouleversés depuis quelques décennies la manière d’appréhender le déplacement des Hommes dans un réseau routier. Notamment dans le domaine de l’informatique, les applications qui ont été développées proposent des calculs des itinéraires de déplacements optimaux, et la gestion du trafic routier dans des réseaux de plus en plus complexe des grandes métropoles. Ces applications proposent des possibilités de déplacement d’un point à l’autre dans un réseau en utilisant des données issues du grand projet de développement tel que : OpenStreetMap, googleMap et bien d’autres. C’est ainsi que, dans le cadre de notre formation il m’a été proposé d’implémenté des fonctionnalités de routage dans un réseau routier en se basant sur la bibliothèque pgRouting, qui est une extension de la base de données Postgis/PostgreSQL. Dans la suite de cet ouvrage, nous présenterons d’un premier temps la base de données Postgis/postgreSQL et la librairie pgRouting, ensuite nous montrerons comment importé les données d’un réseau routier et nous allons appliquer nos algorithmes de routage sur ce réseau pour optimiser le trajet d’un point à l’autre. 4 Master2 IASIG Douala 2014-2015 – par Taponjou Kenfack Carlos Gael 1-PRESENTATION DE Postgis/PostgreSQL 1.1-Postgis Postgis est une extension de la base de données PostreSQl. Elle ajoute à postgreSQL une cartouche spatiale permettant de traiter les données géographiques. 1.2-PostgreSQL Disponible sous licence BSD (Berkeley Software Distribution License) PostgreSQL est un SGBDR (Système de Gestion de Base de Données Relationnelle) très populaire, libre et très performant. Ce Système dont de nombreuses entreprises professionnelles l’utilisent, permet le stockage et la gestion des grandes quantités d’informations. 1.3-Installation de PostgiSQL/pgRouting L’installation de PostgreSQL sous Windows est une opération très simpliste. Une fois PostgreSQL installé, nous pouvons intègres sa cartouche spatial Postgis, ou téléchargé sa version exécutable à l’adresse http://www.postgis.org/download. Pour cela rendons nous a l’adresse suivante pour télécharger l’application spostgreSQL: http://www.postgresql.org/download/ et suivons les instructions d’installation. 2-PRESENTATION DE pgRouting 2.1- Librairie pgRouting pgRouting est une extension de PostGIS qui ajoute les fonctionnalités de routage au couple PostGIS/PostgreSQL. pgRouting avant appelé pgDijkstra, est un développement antérieur à pgDijkstra .Plus tard d’autres fonctionnalités se sont ajoutées et la bibliothèque fut renommée. Cette librairie contient désormais l’implémentation des algorithmes suivants : Plus court chemin Dijkstra Plus court chemin A-Etoile Plus court chemin Shooting-Star Problème du voyageur de commerce (TSP) Distance de pilotage (Isolines) 2.2- Installation de pgRouting L’installation de pgRouting sur Windows est extrêmement simple du fait de la disponibilité des fichiers compressés dans la plate-forme Winnie. Téléchargeons le fichier compressé de pgRouting correspondant à notre système d’exploitation depuis winnie.postgis.net - /download/windows/pg93/buildbot/. 5 Master2 IASIG Douala 2014-2015 – par Taponjou Kenfack Carlos Gael Décompressons le fichier et vérifions qu’il contient les dossiers bin, lib et share et deux fichiers text. Copions ces dossiers et fichiers dans le répertoire C:\Program Files\PostgreSQL\9.2, ainsi l’installation est faite Tapons la commande CREATE EXTENSION pgrouting; pour créer l’extension pgrouting Pour vérifier que pgRouting s’est bien installé : Taper la commande SELECT pgr_version(),et vous auriez un message similaire a ceci : "(2.0.0-dev,v2.0.0-beta,18,a3be38b,develop,1.46.1)", tout dépendra de notre version 3- FONCTIONNALITES DE ROUTAGES SUR UN RESEAU ROUTIER 3.1-Présentation La problématique de routage a fait l’objet de plusieurs recherches dans le monde scientifique, il a été étudié dans de très nombreux problèmes, allant du fameux « voyageur de commerce » au plus court chemin, notamment en passant par la gestion de trafic dans une approche purement dynamique et très complexe (réseaux de télécommunication, réseaux routiers, réseaux électriques…). La problématique du voyageur de commerce est l’un des plus anciens dans ce domaine, sa première formulation mathématique connue remonte à 1930. La plupart des problèmes de routage sont de complexité polynômiale et ont conduit depuis a de très nombreuses recherches, tant sur des aspects purement théoriques, que sur des heuristiques spécialisées. De manière générale, nous pouvons distinguer deux types d’algorithmes : ceux cherchant une réponse en garantissant le principe d’optimalité et ceux cherchant une solution acceptable sans garantir l’optimalité de la solution. Ces approches s’appuient sur la théorie des graphes. Pour des problèmes les mois difficiles (algorithme de complexité polynomiale), des algorithmes séquentiels et dynamiques sont alors utilisés de façon efficace. Les plus connus sont : Dijskstra : Cet algorithme permet de rechercher le chemin le plus court dans un graph A* : est une extension de de l’algorithme de Dijkstra et basé sur des graphs de petites distances Problem du plus court chemin :Shooting-Star Problème du voyageur de commerce (TSP) Distance de pilotage (Isolines) 6 Master2 IASIG Douala 2014-2015 – par Taponjou Kenfack Carlos Gael 3.2-PROBLEMATIQUE DU PLUS COURT CHEMIN dans un Réseaux Routier La problématique qui nous intéresse peut être simplement décrite par la question suivante Comment déterminer l’itinéraire le plus rapide dans un réseau routier donnée ? Dans le cadre de notre travail, nous allons utiliser les fonctionnalités de pgRouting et les données provenant d’OpenStreetMap pour un réseau de route donnée pour implémenter notre solution au problème posé dans la suite de notre projet avec un exemple bien précis. 3.3 Principe de l’algorithme du plus court chemin dans le cas général Soit le graphe valué G= (S, A, V) et X0 le sommet, nous voulons connaitre pour chaque sommet S la distance et un plus court chemin de X0 à S. Les problématiques de recherches de distances et de plus court chemin dans l’implémentation des algorithmes sur des graphes valués fonctionne en générale de la façon suivante. Nous pouvons calculés les distances d(X0, S) par approximation successives. A un niveau donné de l’algorithme, on dispose d’estimation d(S) (éventuellement égales a +∞) pour ces distances, et de la donnée d’un prédécesseur P(S) pour les plus courts chemins. Dans étape, nous considérons un sommet X et successeur Y de X. On peu alors comparer la valeur d(Y) à celle que l’on obtiendrait en passant par X, c’est –à-dire d(X) + V(Y) Si cette deuxième valeur est plus petite que d(Y), on remplace l’estimation d(Y) par d(X) + V(X, Y) et le père P(Y) par X. 3.4 Implémentation de quelques algorithmes de routage 3.4.1 Algorithme de Dijkstra L’algorithme de Dijkstra fut la toute première implémentation dans pgRouting, il utilise des graphes orientés ou non ayant des coûts ou valeurs positifs. Cet algorithme est basé sur des sommets et nécessite une utilisation des champs sources et target 3.4.1.1-Prérequis de cet algorithme Dans le cas où nous voulons être en mesure d’utiliser un coût de parcourt inverse, nous devons ajouter une colonne de coût La requête correspondante est la suivante : 7 Master2 IASIG Douala 2014-2015 – par Taponjou Kenfack Carlos Gael ALTER TABLE tronçon_route ADD COLUMN reverse_cost double precision ; UPDATE tronçon_route SET reverse_cost = length; 3.4.1.2-Fonction avec paramètres Shortest_path ( ‘sql’ text; source integer, target integer, directed Boolean, has_reverse_cost Boolean); 3.4.2- Algorithm A-Etoile L’algorithme A-Etoile est une extension de Dijkstra, il est également bien connu dans le domaine de la recherche des itinéraires. Il donne des informations sur la position géographique du début et fin des tronçons, permettant ainsi de faire une rechercher mettant l’accent sur les tronçons proches du point d’arrivée de la recherche. 3.4.2.1- Prérequis de cet algorithme Pour cet algorithme, il est impérativement souhaitable de préparer les tables de réseau et d’ajouter les colonnes/latitude (X1, Y1 et X2, Y2) et de calculer leurs valeurs. Les requêtes correspondantes sont les suivants : ALTER TABLE tronçon_route ADD COLUMN x1double précision; ALTER TABLE tronçon_route ADD COLUMN y1double précision; ALTER TABLE tronçon_route ADD COLUMN x2double précision; ALTER TABLE ways ADD COLUMN y2double precision; UPDATE tronçon_route SET x1 = x (ST_startpoint(the_geom)); UPDATE tronçon_route SET y1 = y (ST_startpoint(the_geom)); UPDATE tronçon_route SET x2 = x (ST_endpoint(the_geom)); UPDATE tronçon_route SET y2 = y (ST_endpoint(the_geom)); UPDATE tronçon_route SET x1 = x (ST_Point (the_geom, 1)); UPDATE tronçon_route SET y1 = y (ST_Point (the_geom, 1)); UPDATE tronçon_route SET x2 = x (ST_Point (the_geom,ST_NumPoints(geom))); UPDATE tronçon_route SET y2 = y (ST_PointN(the_geom,ST_NumPoints(geom))); 8 Master2 IASIG Douala 2014-2015 – par Taponjou Kenfack Carlos Gael 3.4.2.2- Fonction avec paramètres Une grande similitude existe entre l’algorithme de recherche A-Etoile et l’algorithme de Dijkstra, cet algorithme est plus optimale lorsque les tronçons sont plus proche du point d’arriver de la recherche. Ainsi nous pouvons définir les heuristiques de recherche et les utilisateurs de cet algorithme pourront recompiler pgRouting dans le cas d’un éventuel besoin de modification de ces heuristiques. La requête de routage de l’algorithme A-étoile est la suivante : shortest_path_astar( ‘sql’ text, source integer, target integer, directed boolean, has_reverse_cost boolean ) ; 3.4.3 Algorithme de recherche Shooting-Star Cet algorithme est le tout dernier algorithme de recherche de chemin le plus court. Spécialisé dans la recherche du parcours d’un tronçon à un autre, et non d’un sommet à un sommet à l’instar des algorithmes comme celui de Dijkstra et A-Star, elle nous a permis de définir une relation entre les tronçons et cela nous permet de résoudre des problèmes liés aux recherches d’un sommet à un autre. Comme par exemple les tronçons parallèles qui ont des sommets de début et fin équivalents mais de diffèrent coût. 3.4.3.1- Prérequis de cet algorithme Pour l’implémentation de cet algorithme, nous aurions besoin de préparer nos tabes de réseau et d’y ajouter les colonnes rule et to-cost. Comme l’algorithme A* cet algorithme possède également une fonction heuristique qui donne l’avantage aux plus proches tronçons du point d’arrivée. Les requêtes suivantes ajoutent les colonnes rule et to-cost ALTER TABLE ways ADD COLUMN to_cost double precision; ALTER TABLE ways ADD COLUMN rule text; L’algorithme de recherche Shooting-Star introduit des nouvelles attributions 9 Master2 IASIG Douala 2014-2015 – par Taponjou Kenfack Carlos Gael Attribut Description Rule Une chaine de caractères contenant une liste d’identifiants de tronçon séparés par une virgule, qui Décrivent le sens giratoire (si vous venez de ce tronçon, vous pouvez rejoindre le suivant en ajoutant un Coût défini dans la colonne to_cost) Pour passer d’un tronçon a l’autre il faut une certaine dépense en Coût To_cost 3.4.3.2- Fonctions avec paramètres La requête de routage de l’algorithme Shooting-Star : shortest_path_shooting_star( sql text, source integer, target integer, directed boolean, has_reverse_cost boolean ) 3.5- Requêtes de routage Les requêtes de routages dans un réseau routier pour la détermination de chemin le plus cours dans une approche générale sont définis de la manière suivante. Soit la requête : SELECT * FROM shortest_path_shooting_star( ’SELECT gid as id,source,target,length as cost, x1, y1, x2, y2, rule, to_cost, reverse_cost FROM ways’, 6585, 8247, true, true); Généralement, dans la théorie des graphes les longueurs des arcs sont représentés ou définis par des coûts. Ces coûts peuvent être représentés par toutes mesures de valeurs positives ou négatives, cela dépendra de la problématique qu’on se pose, par exemple le temps, la surface, le type de routes, etc... Et donc les paramètres de combinaison sont définis par des coûts pondérés. 3.5.1-Coûts pondérés Diffèrent choix peuvent s’opérer sur la recherche d’un plus court chemin optimale dans un réseau routier, il peut arriver que nous voulions pouvoir rechercher un réseau routier de coût minimal mais de distance longue soit de minimiser la distance et maximiser les coûts. En d’autres termes, nous voulons 10 Master2 IASIG Douala 2014-2015 – par Taponjou Kenfack Carlos Gael calculer le plus court chemin mais pas le chemin le moins cher. En conclusion, nous ne pouvons pas restreindre la définition des coûts dans un réseau. 3.5.2 Restriction d’accès Nous pouvons restreindre l’accès à des routes dans un réseau routier donnée soit en affectant un coût très élevé à un tronçon ayant un certain attribut ou en s’assurant de ne sélectionner aucun des tronçons sélectionnés. La requête suivante permet de mettre à jour les coûts des routes ayant le dénominateur commun motorway. UPDATE classes SET cost=100000 WHERE name LIKE ’motorway%’; On peut également utilisant des sous-requêtes pour “mixer” nos coûts comme cela nous semble et les résultats obtenus seront directement modifiés. Lors des mises à jour des coûts, il sera impératif de reconstruire le réseau pour effectuer des recherches de chemin plus le court dans des requêtes avenirs Nous pouvons à partir de la clause WHERE dans une requête supprimé une certaines classe de tronçon. Requête supprimant un tronçon dans le réseau : SELECT * FROM shortest_path_shooting_star( ’SELECT gid as id, class_id, source, target, length*c.cost as cost, x1,y1,x2,y2,rule,to_cost,reverse_cost*c.cost as reverse_cost FROM way as w, classe as c WHERE class_id=c.id AND class_id!=111’, 6585, 8247, true, true); Nous pouvons utilisés toutes les requête supportées par Postgis/PostgreSQL dans pgRouting. 4- Application dans un réseau routier (tiré de « pgRouting calcul de l’itinéraire » 4.1- Exemple de réseau routier Pour appliquer les fonctionnalités de routage dans notre réseau routier donné, nous pouvons procède de deux manières : Soit nous importons les données routiers à partir d’une source de données, soit nous créons nos propres données correspondant à un réseau routier. Dans le cas de notre application nous allons importer nos données à partir d’OpenStreetMap qui est une source de données routière. 4.1.1-Chargement des données dans notre base 11 Master2 IASIG Douala 2014-2015 – par Taponjou Kenfack Carlos Gael Le schape qui va illustre notre devoir ici est fourni à l’adresse http://www.davidgis.fr/download/troncon_route.zip Une fois le fichier dézippé, comme à l’accoutumée nous pouvons donc l’importé dans Postgis à partir BD manager sous Qis. Les données géométriques du schape en question visualisé sur Qgis Figure1 : le réseau routier d’une ville vue sur Qgis. Pour le moment, on a que des tronçons, et pour la suite, nous devons définir les nœuds du réseau que nous allons utiliser. Ils seront obtenus en utilisant les instructions SQL suvantes : ALTER TABLE tronçon_route ADD COLUMN x1double precision; ALTER TABLE tronçon_route ADD COLUMN y1double precision; ALTER TABLE tronçon_route ADD COLUMN x2double precision; ALTER TABLE tronçon_route ADD COLUMN y2double precision; UPDATE tronçon_route SET x1 = x (ST_startpoint(geom)); 12 Master2 IASIG Douala 2014-2015 – par Taponjou Kenfack Carlos Gael UPDATE tronçon_route SET y1 = y (ST_startpoint(geom)); UPDATE tronçon_route SET x2 = x (ST_endpoint(geom)); UPDATE tronçon_route SET y2 = y (ST_endpoint(geom)); UPDATE tronçon_route SET x1 = x (ST_Point (geom, 1)); UPDATE tronçon_route SET y1 = y (ST_Point (geom, 1)); UPDATE tronçon_route SET x2 = x (ST_Point(geom, ST_NumPoints(geom))); Ainsi on a la figure suivante : Figure 2 : Représentation des nœuds du réseau 4.2- Fonctionnalité shortest_path_astar() Exemple pour les noeuds 38 et 48. Nous allons dans ce cas créer la table allée Pour l'aller (source=38 et target=48) Ainsi, nous pouvont execute la requite suivante CREATE TABLE aller(gid int4) WITH oids; SELECT ST_AddGeometryColumn( 'aller', 'geom', -1, 'MULTILINESTRING', 2 ); 13 Master2 IASIG Douala 2014-2015 – par Taponjou Kenfack Carlos Gael INSERT INTO aller(geom) ( SELECT geom FROM troncon_route WHERE edge_id IN (SELECT edge_id FROM shortest_path_astar('SELECT id,source,target,cost, reverse_cost, x1,y1,x2,y2 FROM troncon_route_edges',38,48,false,true) ) ); END TRANSACTION; Ce qui me donnera le résultat suivant Figure 3 : Parcours à l’aller Pour le retour (source=48 et target=38) Nous pouvons exécute la requete suivante: CREATE TABLE retour(gid int4) WITH oids; SELECT ST_AddGeometryColumn( 'retour', 'geom', -1, 'MULTILINESTRING', 2 ); INSERT INTO retour(geom) ( SELECT geom FROM troncon_route WHERE edge_id IN (SELECT edge_id FROM shortest_path_astar('SELECT id,source,target,cost, reverse_cost, x1,y1,x2,y2 FROM troncon_route',48,38,false,true) ) 14 Master2 IASIG Douala 2014-2015 – par Taponjou Kenfack Carlos Gael ); END TRANSACTION; Ce qui nous donne le résultat suivant : Figure 4 : Parcours au retour 15 Master2 IASIG Douala 2014-2015 – par Taponjou Kenfack Carlos Gael Conclusion Ce rapport présente les recherches effectuées pour l’implémentation des fonctionnalités de routage dans un réseau routier. Nous avons d’un premier temps présenté et installé les outils qui nous ont servis d’étude dans ce projet, et nous avons dans un second temps mis en exergue les problématiques de routage dans les réseaux routiers que nous avons apporté des solutions à partir d’une application dans un réseau données. Toutefois nous nous sommes heurtés à des difficultés tant techniques que tactiques lors des traitements des données et donc nous consacrerons à profit notre temps dans une certaine continuité pour résoudre ces problèmes. 16 Master2 IASIG Douala 2014-2015 – par Taponjou Kenfack Carlos Gael Bibliographie 1. A. Juttner, B.Szviatovszki, I. Mec, and Z.Rajko, “Lagrange relaxation based methode for the Qos routing problem,” 2001. 2. Daniel Kastl , Frédéric Junod, Travaux Pratiques – Routage FOSS4G avec pgRouting, le réseau routier d’OpenStreetMap et GeoExt version 2 3.OpenMoko.org,“GTA02outlinefootprints,” Webographie En ligne <http://Travaux pratiques - Routage FOSS4G avec les outils de pgRouting, le reseau routier d’OpenStreetMap et GeoExt.html>. Consulté le 20 Mais 2015 17 Master2 IASIG Douala 2014-2015 – par Taponjou Kenfack Carlos Gael