Bienvenue sur PostGIS.fr

Bienvenue sur PostGIS.fr , le site de la communauté des utilisateurs francophones de PostGIS.

PostGIS ajoute le support d'objets géographique à la base de données PostgreSQL. En effet, PostGIS "spatialise" le serverur PostgreSQL, ce qui permet de l'utiliser comme une base de données SIG.

Maintenu à jour, en fonction de nos disponibilités et des diverses sorties des outils que nous testons, nous vous proposons l'ensemble de nos travaux publiés en langue française.

source: trunk/workshop-routing-foss4g/docs/chapters/topology.rst @ 78

Revision 76, 8.4 KB checked in by djay, 13 years ago (diff)

Ajout du répertoire web

RevLine 
[63]1==============================================================================================================
[70]2Création de la topologie du réseau
[63]3==============================================================================================================
4
[72]5:doc:`osm2pgrouting <osm2pgrouting>` est un outil pratique, mais c'est aussi une *boîte noire*. Il y a de nombreux cas où :doc:`osm2pgrouting <osm2pgrouting>` ne peut pas être utilisé. Certaines données de réseau sont fournies avec la topologie du réseau qui peut être utilisé par pgRouting tel-quel. Certaines données de réseau sont stockées au format Shape file (``.shp``) et nous pouvons les charger dans une base de données PostgreSQL à l'aide de l'outil de conversion de PostGIS' ``shape2postgresql`. But what to do then?
[63]6
7.. image:: images/network.png
8        :width: 250pt
9        :align: center
10
[70]11Dans ce chapitre vous allez apprendre comment créer une topologie de réseau en partant de rien. Pour ce faire, nous allons commencer par les données qui contiennent les attributs minimum requis pour le routage et comment constituer étape par étape des données pour pgRouting.
[63]12
13-------------------------------------------------------------------------------------------------------------
[70]14Charger les données de réseau
[63]15-------------------------------------------------------------------------------------------------------------
16
[70]17Au début nous allors charger une sauvegarde de base de données à partir du répertoire ``data``des travxu pratiques. Ce répertoire contient un fichier compressé incluant une sauvegarde de base de données ainsi qu'un plus petit ensemble de données de réseau du centre ville de Denver. Si vous n'avez pas encore décompressé, faite le en utilisant la comande :
[63]18
19.. code-block:: bash
20
21        cd ~/Desktop/pgrouting-workshop/
22        tar -xvzf data.tar.gz
23
[70]24La commande suivante permet d'importer la sauvegarde de la base de données. Elle ajoutera les fonctions PostGIS et pgRouting à la base, de la même maniÚre que ce nous avons décrit dans le chapitre précédent. Cela chargera aussi le petit échantillon de données de Denver avec un nombre minimum d'attribut, que vous trouverez habituellement dans l'ensemble des données de réseau :
[63]25
26.. code-block:: bash
27
[70]28        # Optionel: supprimer la base de données
[63]29        dropdb -U postgres pgrouting-workshop
30
[70]31        # Chargement du fichier de sauvegarde
[63]32        psql -U postgres -f ~/Desktop/pgrouting-workshop/data/sampledata_notopo.sql
33
[70]34Regardons quelles tables ont été créées :
[63]35
[70]36.. rubric:: Lancer : ``psql -U postgres -d pgrouting-workshop -c "\d"``
[63]37       
38.. code-block:: sql
39
40                          List of relations
41         Schema |       Name        | Type  |  Owner   
42        --------+-------------------+-------+----------
43         public | classes           | table | postgres
44         public | geography_columns | view  | postgres
45         public | geometry_columns  | table | postgres
46         public | spatial_ref_sys   | table | postgres
47         public | types             | table | postgres
48         public | ways              | table | postgres
49        (6 rows)
50
51       
[70]52La table contenant les données du réseau routier onle nom ``ways``. Elle possÚde les attributs suivants :
[63]53       
[70]54.. rubric:: Lancer : ``psql -U postgres -d pgrouting-workshop -c "\d ways"``
[63]55       
56.. code-block:: sql
57
58                       Table "public.ways"
59          Column  |       Type       | Modifiers
60        ----------+------------------+-----------
61         gid      | integer          | not null
62         class_id | integer          |
63         length   | double precision |
64         name     | character(200)   |
65         the_geom | geometry         |
66        Indexes:
67            "ways_pkey" PRIMARY KEY, btree (gid)
68            "geom_idx" gist (the_geom)
69        Check constraints:
70            "enforce_dims_the_geom" CHECK (ndims(the_geom) = 2)
71            "enforce_geotype_the_geom" CHECK (geometrytype(the_geom) =
72                      'MULTILINESTRING'::text OR the_geom IS NULL)
73            "enforce_srid_the_geom" CHECK (srid(the_geom) = 4326)
74
[70]75Il est habituel dans des données de réseau routier de retrouver au moins les informations suivantes :
[63]76
[70]77* Identifiant de tronçon routier (gid)
78* Classe de tronçon (class_id)
79* Longuer du tronçon routier (length)
80* Nom du tronçon (name)
81* La géométrie du tronçon (the_geom)
[63]82
[70]83Cela permet d'afficher le réseau routier comme une couche PostGIS depuis un logiciel SIG, par exemple dans QGIS. Notez ue les informations ne suffisent pas au calcul de routes étant donné qu'il ne contient aucune information relative à la topolgie du réseau.
[63]84
[70]85La prochaine étape consiste à démarrer l'outil en ligne de commande PostgreSQL
[63]86
87.. code-block:: bash
88
89        psql -U postgres pgrouting-workshop
90       
[70]91... ou d'utiliser PgAdmin III.
[63]92
93
94--------------------------------------------------------------------------------------------------------------
[70]95Calcul de la topologie
[63]96--------------------------------------------------------------------------------------------------------------
97
[70]98Pour avoir vos données importé dans une base de données PostgreSQL requiÚre généralement des étapes supplémentaires pour pgRouting. Vous devez vous assurer que vos données fournissent une topologie correcte du réseau, ce qui correspond aux informations par rapport au début et à la fin d'un tronçon.
[63]99
[70]100Si les données de votre réseau ont une déjà telle information vous devez exécuter la fonctions ``assign_vertex_id``. Cette fonction permet l'assignation des valeurs pour les colonnes ``source`` et ``target`` pour chaque tronçon et il peut prendre en compte le fait qu'un sommet puisse être éloigné d'un autre suivant une certaine tolérance.
[63]101
102.. code-block:: sql
103
104        assign_vertex_id('<table>', float tolerance, '<geometry column', '<gid>')
105       
[70]106PremiÚrement nous devons ajouter les colonnes source et target, pour ensuite utiliser la fonction assign_vertex_id ... et attendre :
[63]107
108.. code-block:: sql
109
[70]110        -- Ajouter les colonnes "source" et "target"
[63]111        ALTER TABLE ways ADD COLUMN "source" integer;
112        ALTER TABLE ways ADD COLUMN "target" integer;
113       
[70]114        -- Utiliser la fonction de contruction de topologie
[63]115        SELECT assign_vertex_id('ways', 0.00001, 'the_geom', 'gid');
116
117.. note::
118
[70]119        Exécuter ``psql -U postgres -d pgrouting-workshop`` depuis votre terminal afin de vous connecter ààl a base de données et lancer des commandes PostgreSQL en ligne. Quiter la session avec la commande ``\q`` .   
[63]120
121.. warning::
122
[70]123        La dimension du paramÚtre tolérance dépends du systÚme de projection de vos données. Habituellement c'est soit "degrés" soit "mÚtres".
[63]124
125
126-------------------------------------------------------------------------------------------------------------
[70]127Ajouter des indexes
[63]128-------------------------------------------------------------------------------------------------------------
129
[70]130Heureusement nous n'avons pas à attendre longtemps étant donné que notre jeu de données est trÚs petit. Mais la quantité de données d'un réseau pourrait être beaucoup plus importante, donc il vaut mieux ajouter des indexes pour les colonnes  ``source`` et ``target``.
[63]131
132.. code-block:: sql
133
134        CREATE INDEX source_idx ON ways("source");
135        CREATE INDEX target_idx ON ways("target");
136
[70]137Suite à ces étapes, notre base de données routing ressemble à ceci :
[63]138
[70]139.. rubric:: Lancer : ``\d``
[63]140       
141.. code-block:: sql
142
143                             List of relations
144         Schema |        Name         |   Type   |  Owner   
145        --------+---------------------+----------+----------
146         public | geography_columns   | view     | postgres
147         public | geometry_columns    | table    | postgres
148         public | spatial_ref_sys     | table    | postgres
149         public | vertices_tmp        | table    | postgres
150         public | vertices_tmp_id_seq | sequence | postgres
151         public | ways                | table    | postgres
152        (6 rows)
153
[70]154.. rubric:: Lancer : ``\d ways``
[63]155       
156.. code-block:: sql
157       
158                       Table "public.ways"
159          Column  |       Type       | Modifiers
160        ----------+------------------+-----------
161         gid      | integer          | not null
162         class_id | integer          |
163         length   | double precision |
164         name     | character(200)   |
165         the_geom | geometry         |
166         source   | integer          |
167         target   | integer          |
168        Indexes:
169            "ways_pkey" PRIMARY KEY, btree (gid)
170            "geom_idx" gist (the_geom)
171            "source_idx" btree (source)
172            "target_idx" btree (target)
173        Check constraints:
174            "enforce_dims_the_geom" CHECK (ndims(the_geom) = 2)
175            "enforce_geotype_the_geom" CHECK (geometrytype(the_geom) =
176                        'MULTILINESTRING'::text OR the_geom IS NULL)
177            "enforce_srid_the_geom" CHECK (srid(the_geom) = 4326)
178               
[70]179Nous sommes fin prêts pour notre premiÚre requête de routage avec `l'algorithme de Dijkstra <shortest_path>` !
Note: See TracBrowser for help on using the repository browser.