- Timestamp:
- 01/04/2012 22:33:49 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/workshop-routing-foss4g/chapters/advanced.rst
r63 r71 1 1 ============================================================================================================== 2 Advanced Routing Queries2 Requêtes de routage avancées 3 3 ============================================================================================================== 4 4 5 As explained in the previous chapter a shortest path query usualy looks like this:5 Comme expliqué dans le chapitre précédent une requête de recherche de plus court chemine ressemble généralement à ce qui suit : 6 6 7 7 .. code-block:: sql … … 11 11 to_cost, reverse_cost FROM ways', 6585, 8247, true, true); 12 12 13 This is usually called **shortest** path, which means that a length of an edge is its cost. But cost doesn't need to be length, cost can be almost anything, for example time, slope, surface, road type, etc.. Or it can be a combination of multiple parameters ("Weighted costs").13 On parle généralement de **plus court** chemin, ce qui signifie que la longueur d'un arc est son coût. Mais le coût n'est pas nécessairement une longueur, il peut représenter n'importe quoi, par exemple le temps, la surface, le type de routes, etc ... Ou il peut être la combinaison de plusieurs paramÚtres ("coûts pondérés"). 14 14 15 15 .. note:: 16 16 17 If you want to proceed with a routing database containing pgRouting functions, sample data and all required attributes, you can load the following database dump file.17 Si vous souhaitez continuer avec une base de données contenant les fonctions pgRouting, les données exemples ainsi que les attributs nécessaires, vous pouvez charger le fichier de sauvegarded la maniÚre suivante. 18 18 19 19 .. code-block:: bash 20 20 21 # Option al: Drop database21 # Optionel: supprimer la base de données 22 22 dropdb -U postgres pgrouting-workshop 23 23 24 # Load database dump file24 # Charger le fichier de sauvegarde 25 25 psql -U postgres -f ~/Desktop/pgrouting-workshop/data/sampledata_routing.sql 26 26 27 27 ------------------------------------------------------------------------------------------------------------- 28 Weighted costs28 Coûts pondérés 29 29 ------------------------------------------------------------------------------------------------------------- 30 30 31 In real networks there are different limitations or preferences for different road types for example. In other words, we don't want to get the *shortest* but the **cheapest** path - a path with a minimal cost. There is no limitation in what we take as costs.31 Dans un vrai réseau il y a différents types de limitations ou de préférences suivant les types de routes par exemple. En d'autre termes, nous ne voulons pas calculer *le plus court* chemin mais le chemin *le moins cher* - un chemin avec un coût minimum. Il n'y aucune limitation dans ce qui peut êtreutilsié pour définir le coût. 32 32 33 When we convert data from OSM format using the osm2pgrouting tool, we get two additional tables for road ``types`` and road ``classes``: 33 Lorsque nous avons convertis les données au format OSM en utilisant l'outil osm2pgrouting, nous avons deux autres tables permettant de déifinir les ``types`` de routes et les ``classes``. 34 34 35 35 .. note:: 36 36 37 We switch now to the database we previously generated with osm2pgrouting. From within PostgreSQL shell this is possible with the ``\c routing`` command.37 Nous passons maintenant à la base de données que nuos avons générée avec osm2pgrouting. Depuis l'invite de commandes de PostgreSQL ceci est possible avec la commande ``\c routing``. 38 38 39 .. rubric:: Run: ``SELECT * FROM types;``39 .. rubric:: Lancer : ``SELECT * FROM types;`` 40 40 41 41 .. code-block:: sql … … 48 48 3 | tracktype 49 49 50 .. rubric:: Run: ``SELECT * FROM classes;``50 .. rubric:: Lancer : ``SELECT * FROM classes;`` 51 51 52 52 .. code-block:: sql … … 89 89 305 | 3 | grade5 | 90 90 91 The road class is linked with the ways table by ``class_id`` field. After importing data the ``cost`` attribute is not set yet. Its values can be changed with an ``UPDATE`` query. In this example cost values for the classes table are assigned arbitrary, so we execute:91 La classe de route est liée avec la tables des cheminspar le champ ``class_id``. Suite à l'importation des données la valeur de la colonne ``cost`` n'est pas encore attribuée. Sa valeur peut être modifiée à l'aide d'une requête ``UPDATE``. Dans cet exemple les valeurs de coût pour la table des classe sont assigné de façon arbitraire, donc nous exécutons : 92 92 93 93 .. code-block:: sql … … 101 101 UPDATE classes SET cost=0.3 WHERE name IN ('motorway','motorway_junction','motorway_link'); 102 102 103 For better performance, especially if the network data is large, it is better to create an index on the ``class_id`` field of the ways table and eventually on the ``id`` field of the ``types`` table.103 Pour de meilleures performances, tout spécialement si le réseau est important, il est préférable de créer un index sur la colonnes ``class_id`` de la table des chemins et eventuellement le champ ``id`` de la table ``types``. 104 104 105 105 .. code-block:: sql … … 108 108 CREATE INDEX classes_idx ON classes (id); 109 109 110 The idea behind these two tables is to specify a factor to be multiplied with the cost of each link (usually length):110 L'idée de ces deux tables est de les utiliser afin de spécifier un facteur qui sera multiplié par le coût de parcour d'un tronçon (habituellement la longueur) : 111 111 112 112 .. code-block:: sql … … 119 119 120 120 ------------------------------------------------------------------------------------------------------------- 121 Restrict ed access121 Restriction d'accÚs 122 122 ------------------------------------------------------------------------------------------------------------- 123 123 124 Another possibility is to restrict access to roads of a certain type by either setting a very high cost for road links with a certain attribute or by not selecting certain road links at all:124 Une autre possibilité est de restreindre l'accÚs à des routes d'un certains types soit en affectant un coût trÚs élevé à un tronçon ayant un certain attribut soit en s'assurant de ne sélectionner aucun de ces tronçons : 125 125 126 126 .. code-block:: sql … … 128 128 UPDATE classes SET cost=100000 WHERE name LIKE 'motorway%'; 129 129 130 Through subqueries you can "mix" your costs as you like and this will change the results of your routing request immediately. Cost changes will affect the next shortest path search, and there is no need to rebuild your network.130 En utilisant des sous-requêtes vous pouvez "mixer" vos coût comme bon vous semble et cela modifiera le résultat obtenu imédiatement. Les changements de coûts affecteront la prochaine recherche de plus courts chemins, sans avoir à reconstruire le votre réseau. 131 131 132 Of course certain road classes can be excluded in the ``WHERE`` clause of the query as well, for example exclude "living_street" class:132 Bien entendu, certaines classes de tronçon peuvent aussi être exclues à l'aide d'une clause ``WHERE`` dans la requête, par exemple pour exclure la classe "living_street" : 133 133 134 134 .. code-block:: sql … … 140 140 WHERE class_id=c.id AND class_id != 111', 6585, 8247, true, true); 141 141 142 Of course pgRouting allows you all kind of SQL that is possible withPostgreSQL/PostGIS.142 Bien entendu, pgRouting vus permet tout types de requêtes SQL supportées par PostgreSQL/PostGIS. 143 143
Note: See TracChangeset
for help on using the changeset viewer.