Vous êtes sur la page 1sur 51

PgRouting

Réalisé par :
• ARIBA SIF ELISLAM
• BARBARA HIBA
• KHAOUNI AICHA
Plan de travail

01 Introduction
02 Traitements

03 Conclusion
Introduction
Le routage est une fonctionnalité importante dans les
Systèmes d'Information Géographique qui permet de calculer
les itinéraires optimaux entre deux ou plusieurs points en
utilisant un réseau de routes ou de chemins.

Définition :
pgRouting étend la base de données géo spatiale
PostGIS/PostgreSQL pour fournir un routage géo spatial et
d'autres fonctionnalités d'analyse de réseau.
 Cette extension permet de :
● effectuer des analyses de réseaux routiers
● Calcul d'itinéraires .
● Recherche de chemins le plus court
● Intégration avec d'autres outils ,... etc
 L'analyse de réseaux routiers est importante pour de
nombreuses applications telles que la navigation GPS, la
planification d'itinéraires pour les livraisons ou les transports
en commun, ou encore la gestion des flottes de véhicules.
 Il existe plusieurs moteurs de routage disponibles qui sont
similaires à pgRouting ,Voici quelques-uns des moteurs de
routage populaires :
GraphHopper : C'est un moteur de routage open-source qui
prend en charge les calculs de chemins pour les voitures, les
vélos, les piétons et les transports en commun.
OSRM: (Open Source Routing Machine) : OSRM est un autre
moteur de routage open-source conçu pour des performances
élevées. Il prend en charge les calculs de chemins pour les
voitures, les vélos et les piétons, et offre des fonctionnalités
avancées telles que le routage basé sur les profils de véhicule
personnalisés.
Traitements
Activation et mise à niveau dans la base de données
Activation et création de la base de données:
• Crée la base de donnes sous le nom ‘Pgrouting ‘ puis exécuter les
requetés suivants :

• Ajouter l’extension hstore : Ce module implémente le hstoretype de


données pour stocker des ensembles de paires clé/valeur dans une seule
valeur PostgreSQL

• Vérification de la version de PostGIS et de pgRouting après les avoir


activés dans la base de données.

• Pour mettre à niveau pgRouting dans la base de données vers la version


3.5.0, utilisez la commande suivante :
Telecharger et Importer les Donnes OSM
ouvrir le site :https://www.openstreetmap.org , cliqué sur exporter déterminer la zone
d’étude . pour notre projet on choisir la zone de bab elouad,Alger . (le fichier sous
l’extension : map.osm ,tu peux télécharger les données sous l’extension < .osm.pbf >

Les fichiers OSM stockent les données


de manière structurée. Les nœuds de
rue sont représentés sous forme de
points, les rues sous forme de lignes
reliant ces nœuds et les relations
stockent les propriétés des rues, des
points et des objets.
Chargez les données dépendra de la forme sous laquelle elles se présentent.
On utilise l’outils : < osm2pgrouting >, d’aprés la commende :

 On peut jouer sur les tables selon les besoin :


Dans la commande présidents ,changer les options ,par exmple
L'option –tags Inclue des informations spécifiques à un objet,
telles que le nom de la rue, la ville, le pays, etc. Ces informations
peuvent être utilisées pour l'affichage des résultats de routage.
• Description des table :
osm_nodes : Cette table stocke les identifiants et les coordonnées des nœuds OSM.
osm_ways : Cette table stocke les données topologiques des routes sous forme de
graphes, en reliant les nœuds avec les arcs.(les arcs sont orientés)
ways : Cette table stocke les identifiants des routes, les noms des rues et d'autres
informations associées.
ways_vertices_pgr : Cette table stocke les coordonnées des sommets des routes.
configuration est une table utilisée par PgRouting pour stocker les paramètres de
configuration et les informations sur les fonctions utilisées pour le calcul du réseau
routier.
osm_relation: est une table utilisée pour stocker les relations définies dans les
données OpenStreetMap (OSM). (telles que des itinéraires de transport en commun,
des frontières administratives)
pointofinteresection :pour stocker des informations sur les points d'intérêt le long du
réseau routier. Ils sont des endroits d'intérêt pour les utilisateurs, tels que les stations-
service, les restaurants, les hôtels, les magasins, etc.
Construire et vérification d’une topologie de routage

• Crée un graphe pour que tous les bords sont connectés aux nœuds.

 OK :après la construction de la topologie du réseau et la création de la table des sommets.


• Vérifier toutes les erreurs possibles telle que chaque segment de route
commence et se termine à un nœud.

 OK :une fois l'analyse terminée.


Utilise la table des sommets : <ways>_vertices_pgr.
Remplit complètement les colonnes ’cnt’ et ‘chkde’ la table des
sommets.
"cnt" est utilisée pour compter le nombre de segments de route
qui contiennent ce nœud et "chk" est utilisée pour marquer les
nœuds qui ont été traités pendant la recherche de l'itinéraire.
L'algorithme de Dijkstra : est un algorithme de
recherche de chemin le plus court dans un graphe pondéré. Il calcule le
chemin le plus court entre un nœud source et tous les autres nœuds du
graphe, d’après les fonctions on :

● Pgr-dijkstra
● Pgr-dijkstraCost
● Pgr-dijkstraCostMatrix
● Pgr-drivingDistance
● Pgr-KSP
 pgr-dijkstra  Pgr-dijkstraCost
 Pgr-dijkstraCostMatrix  Pgr-drivingDistance :
pour calculer les informations sur le bassin versant.
 Affiche la géométrie de la résultat :

 Exécuter un
requête de
jointure entre
la table
« ways » et la
tables »ways_
vertices_pgr ».
 Le tronçon
Blue :est le
chemin le plus
courte de la
source
12(Rampe
Louni Arezki
‫)منحدر أرزقي لوني‬
vers le
60(Boulevard
Touati Saïd) . le chemins les plus courts de la nœud 12 vers 13 .
 Pgr-KSP : Utilise l'algorithme Yen avec pgr-dijkstra pour obtenir les K
chemins les plus courts.
 "K" est le nombre de chemins les plus courts souhaités. Cas de k=2:

le chemins les plus courts de la nœud 12 vers 13 .


 pgr-floydWarshall: Renvoie la somme des coûts du chemin le plus court
pour chaque paire de nœuds du graphe à l'aide de l'algorithme de Floyd-
Warshall. pour les graphes denses.
La requête retourne un ensemble
de résultats qui comprend les
nœuds de départ, les nœuds
d'arrivée et les coûts pour les
chemins les plus courts entre tous
les paires de nœuds dans le
graphe.
Remarque :selon le type de graphe
on choisir la fonction qui convient .
pour les graphes creux on utilise la
fonction
 pgr_johnson( même principe
la différence dans le temps
d'exécution ).
algorithme A* :
L'algorithme A* (prononcé « A Star ») est basé sur l'algorithme de
Dijkstra avec une heuristique qui lui permet de résoudre la plupart
des problèmes de plus court chemin en n'évaluant qu'un sous-
ensemble du graphe global. D’aprés les fonctions :
 Pgr-aStar
 pgr-aStarCost
 Pgr-aStarCostMatrix
 pgr_aStar  Pgr_aStarCost
 pgr_aStarCostMatrix :Récupère la matrice de coût des chemins les plus courts.
Le coût peut être n'importe quoi, par exemple la distance, le temps de trajet ou tout
autre paramètre important pour l'analyse.
Bidirectionnel A*:
Le bidirectionnel A* est une variante de l'algorithme A* qui utilise deux
graphes de recherche pour trouver le plus court chemin entre deux nœuds
d'un graphe. l'algorithme explore simultanément le graphe a partir du
nœud source et du nœud destination. L'algorithme continue jusqu‘a ce
que les deux graphes se rencontrent ou que la solution optimale soit
trouvée. D’après les fonctions :
● Pgr-bdAstar
● Pgr-bdAstarCost
● Pgr-bdAstarCostMatrix
 Pgr-bdAstar :pour obtenir des chemins, Cette estimation est basée sur la
distance en ligne droite entre le nœud actuel et la destination. Cela permet à
l'algorithme de rechercher plus efficacement les itinéraires optimaux en explorant
d'abord les nœuds les plus proches de la destination.
 Pgr-bdAstarCost
 Pgr-bdAstarCostMatrix
Dijkstra bidirectionnel:
Basée sur l'algorithme de Dijkstra, Il exécute deux recherches
simultanées : une en avant à partir de la source et une en arrière à partir de
la cible, s'arrêtant lorsque les deux se rencontrent au milieu.
● Pgr-bdDijkstra :pour les chemins les plus courts.
● Pgr-bdDijkstraCost :pour calculer le coût des chemins les plus courts
● Pgr-bdDijkstraCostMatrix : pour créer une matrice des coûts des
chemins les plus courts.
 Pgr-bdDijkstra :
 Pgr-bdDijkstraCost
 Pgr-bdDijkstraCostMatrix :
Composants : sont des sous-graphes qui sont eux-mêmes
connexes.
● Pgr-connectedComponents
● Pgr-strongComponents
● Pgr-biconnectedComponents
● Pgr-articulationPoints
● Pgr-bridges
 Pgr-connectedComponents  Pgr-strongComponents
 Pgr-biconnectedComponents : : Composants biconnectés d'un graphe non
orienté. Les composants biconnected sont les parties d'un graphe qui ne peuvent
pas être divisées en deux parties connexes distinctes en retirant un seul nœud.

ils permettent de comprendre


la robustesse d'un réseau de
communication, tels que les
réseaux de transport en
commun ou les réseaux de
télécommunication, aussi
utilisés pour identifier les
points de congestion potentiels
et les itinéraires alternatifs
 Pgr-articulationPoints :Points d'articulation d'un graphe non orienté. Les points
d'articulation sont des nœuds d'un graphe dont la suppression divise le graphe
en deux ou plusieurs composantes connexes.
Kruskal:
est un algorithme de recherche d'arbre recouvrant de poids minimum
(ARPM) ou arbre couvrant minimum (ACM). Dans un tel graphe, un
arbre couvrant est un sous-graphe connexe sans cycle . Le poids d'un tel
arbre est la somme des poids des arêtes qui le compose. Un arbre
couvrant minimum est un arbre couvrant dont le poids est inférieur ou
égal à celui de tous les autres arbres couvrants du graphe.
● Pgr-kruskal
● Pgr-kruskalBFS
● Pgr-kruskalDD
● Pgr-kruskalDFS
 Pgr_kruskal :
 Pgr-kruskalBFS
Pgr-kruskalDD "Levelwise Directed DFS" : utilise une structure de données appelée
Union-Find , pour détecter les cycles. Il peut être plus rapide que l'algorithme de
base mais peut nécessiter plus de mémoire. Il est particulièrement utile pour les
graphes denses.
Union(x, y) : qui permet de fusionner les ensembles contenant les sommets x et y.
Find(x) : qui permet de déterminer à quel ensemble appartient le sommet x.
Pgr-kruskalDFS ’Depth-First Search’: Cet algorithme utilise une recherche en
profondeur (DFS) pour détecter les cycles ,utilisant une pile pour stocker les arêtes
triées par poids croissant.
Flux :est une mesure de la quantité de "matière" qui circule à travers les arêtes
du graphe. D'après les fonctions :
 pgr_maxFlow Uniquement le calcul du débit maximum à l'aide de
l'algorithme Push et Relabel (À chaque itération, l'algorithme sélectionne un
sommet avec un excès de flux c'est-à-dire un sommet dont la somme des
flux entrants est supérieure à la somme des flux sortants et tente de le
pousser vers ses voisins.)
 pgr_edmondsKarp Algorithme d'Edmonds et Karp avec détails d'écoulement
sur les arêtes ,(L'idée générale de l'algorithme de Karp est de trouver des
chemins augmentant de longueur de plus en plus grande dans le graphe
jusqu'à ce qu'il n'y en ait plus.)
 pgr_pushRelabel Algorithme push et relabel avec détails de flux sur les
bords.
 La déférence entre ces fonctions est la facteur de complexité de temps.
 pgr_maxFlow:
La capacité peut être exprimée en termes de poids, de distance, de temps ou
d'autres mesures selon le contexte d'utilisation du graphe. Par exemple, pour une
intersection routière, la capacité représente le nombre maximal de voitures pouvant
passer par unité de temps.
Tout d'abord, nous devons créer une colonne "capacity" pour stocker les capacités
des arcs. Nous allons utiliser la colonne length_m"
 pgr_edmondsKarp
 pgr_pushRelabel
 pgr_drivingDistance: Renvoie la distance de conduite à partir d'un nœud de
départ.
Fonctions des développeurs: sont des fonctions pour vous aider à élaborer
un emballage ou une recette
● pgrgetColumnName - pour obtenir le nom de la colonne tel qu'il est
stocké dans les tables .
● pgr_getTableName - pour récupérer le nom de la table
● pgr_isColumnIndexed - pour vérifier si la colonne est indexée.
● pgr_isColumnInTable - pour vérifier uniquement l'existence de la
colonne.
● pgr_pointToId -pour insérer/obtenir l'identifiant du point inséré dans
une table de sommets.
● pgr_version - pour obtenir les informations de version de pgRouting.
● pgr_versionless - pour comparer deux numéros de version.
● pgr_startPoint - pour obtenir le point de départ d'une (multi)ligne.
● pgr_endPoint - pour obtenir le point final d'une (multi)ligne.
Intégration Pgrouting avec L’outils QGIS

Installation de l'extension pgRouting dans l’outils Qgis :


Connexion
Qgis
avec
PostgreSQL
Importer la base de données votre osm_bbelouad
Ouvrir le pgRouting layer :
 Allez a l'outil base de données
cliqué sur pgRouting layer.
 Manipuler les algorithmes de
routage selon votre besoin ,on
insert votre données de propre .
Edges table : la table des rues .
Schéma :
Geometry : la columns geometry dans la
Table des rues
Columns :input de la fonction
 Après le choix de la fonction
faire exécuter : l'exécution sera
faite par 3 méthodes :
 Par une requête SQL dans le gestionnaire de la base de donnes sous Qgis .
 Par une simple séssi .  Par une sélection sur le Map .
 charger la couche de résulta dans Qgis:
Pour charger la
couche dans Qgis,
faire une jointure entre le résultat de l’algorithmecochez la
Pgr-aStar(…),
case Charger en tant
qui ne renvoie pas dans le résultat que les nouvelle
géométries mais
couche,
seulement les identifiants des nœuds (Edges), et laletable
sélectionnez champdes
nœuds, puis avec la table des routes (ways) .
géométrie, puis cliquez
sur le bouton Charger.
En clair, on cherche le nœud correspondant au Edges du résultat
et on récupère le tronçon linéaire qui lui est joint par la
topologie.

 Création de la couche de chemin (en noir et rouge )


Quelque exmple
.  Récupérer la géométrie du chemin le plus court entre un nœud source et un
nœud cible, en considérant un événement spécifique (après insertion et
remplissage de la table évènements),
Ecrire un Wrapper
Un Wrapper est une fonction de PostgreSQL
comme une autre, qui contient des
fonctionnalités de pgRouting et PostGIS sous
une forme plus facile à utiliser que lors de
l’appel des fonctions pgRouting et PostGIS
directement.
De la source 12 vers la
55 en considère
l’evenments 1

une fonction qui prend en


entrée les nœuds source
et cible, et renvoie la
géométrie du chemin le
plus court en considérant
un événement spécifique
De la source 12 vers la
65 en considère
l’evenments ‘Travaux
publics ‘

une fonction qui prend en


entrée les nœuds source
et cible et la description ,
et renvoie la géométrie
du chemin le plus court
en considérant un
événement spécifique
De la source 12 vers la
665 existe l’évenements
de travaux publics
Et de 55 a 65 n’existe
pas

une fonction qui prend en


entrée les nœuds source
et cible et la description ,
et renvoie la geometie de
chemin le plus court
En rouge si existe un
événement spécifique
conclusion

En conclusion, pgRouting reste un outil très utile pour le calcul


d'itinéraires sur des réseaux routiers, et peut être utilisé dans de
nombreuses applications pour améliorer la planification de trajets
et la gestion des flux de trafic…etc.
Merci pour votre
attention

Vous aimerez peut-être aussi