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-foss4g/geometries_exercises.rst @ 76

Revision 62, 7.2 KB checked in by thomasg, 13 years ago (diff)

Fin correction typo et orthographe V2 du document

RevLine 
[1]1.. _geometries_exercises:
2
[37]3Partie 9 : Exercices sur les géométries
[62]4=======================================
[1]5
[37]6Voici un petit rappel de toutes les fonction que nous avons abordé jusqu'à présent. Elles devraient être utiles pour les exercices !
[1]7
[21]8 * :command:`sum(expression)` agrégation retournant la somme d'un ensemble
9 * :command:`count(expression)` agrégation retournant le nombre d'éléments d'un ensemble
10 * :command:`ST_GeometryType(geometry)` retourne le type de la géométrie
11 * :command:`ST_NDims(geometry)` retourne le  nombre de dimensions
[62]12 * :command:`ST_SRID(geometry)` retourne l'identifiant du systÚme de référence spatiale
[21]13 * :command:`ST_X(point)` retourne la coordonnée X
14 * :command:`ST_Y(point)` retourne la coordonnée Y
15 * :command:`ST_Length(linestring)` retourne la longueur d'une ligne
16 * :command:`ST_StartPoint(geometry)` retourne le premier point d'une ligne
17 * :command:`ST_EndPoint(geometry)` retourne le dernier point d'une ligne
[37]18 * :command:`ST_NPoints(geometry)` retourne le nombre de points d'une ligne
[21]19 * :command:`ST_Area(geometry)` retourne l'aire d'un polygone
20 * :command:`ST_NRings(geometry)` retourne le nombre de contours (1 ou plus si il y a des trous)
[62]21 * :command:`ST_ExteriorRing(polygon)` retourne le contour extérieur (ligne) d'un polygone
[21]22 * :command:`ST_InteriorRingN(polygon, integer)` retourne le contour intérieur (ligne) d'un polygone
[62]23 * :command:`ST_Perimeter(geometry)` retourne la longueur de tous les contours
[21]24 * :command:`ST_NumGeometries(multi/geomcollection)` retourne le nombre de composantes dans une collection
25 * :command:`ST_GeometryN(geometry, integer)` retourne la niÚme entité de la collection
26 * :command:`ST_GeomFromText(text)` retourne ``geometry``
27 * :command:`ST_AsText(geometry)` retourne WKT ``text``
28 * :command:`ST_AsEWKT(geometry)` retourne EWKT ``text``
29 * :command:`ST_GeomFromWKB(bytea)` retourne ``geometry``
30 * :command:`ST_AsBinary(geometry)` retourne WKB ``bytea``
31 * :command:`ST_AsEWKB(geometry)` retourne EWKB ``bytea``
32 * :command:`ST_GeomFromGML(text)` retourne ``geometry``
33 * :command:`ST_AsGML(geometry)` retourne GML ``text``
34 * :command:`ST_GeomFromKML(text)` retourne ``geometry``
35 * :command:`ST_AsKML(geometry)` retourne KML ``text``
36 * :command:`ST_AsGeoJSON(geometry)` retourne JSON ``text``
37 * :command:`ST_AsSVG(geometry)` retourne SVG ``text``
[1]38
[37]39Souvenez-vous aussi des tables disponibles:
[1]40
[62]41 * ``nyc_census_blocks``
42
[1]43   * name, popn_total, boroname, the_geom
[62]44
[1]45 * ``nyc_streets``
[62]46
[1]47   * name, type, the_geom
[62]48
[1]49 * ``nyc_subway_stations``
[62]50
[1]51   * name, the_geom
[62]52
[1]53 * ``nyc_neighborhoods``
[62]54
[1]55   * name, boroname, the_geom
56
[37]57Exercices
[1]58---------
59
[37]60 * **"Quelle est l'aire du quartier 'West Village'?"**
[62]61
[1]62   .. code-block:: sql
63
64     SELECT ST_Area(the_geom)
65       FROM nyc_neighborhoods
66       WHERE name = 'West Village';
67
[62]68   ::
69
[1]70     1044614.53027344
71
72   .. note::
73
[62]74      L'aire est donnée en mÚtres carrés. Pour obtenir l'aire en hectare, divisez par 10000. Pour obtenir l'aire en acres, divisez par 4047.
[1]75
[62]76 * **"Quelle est l'aire de Manhattan en acres ?"** (Astuce: ``nyc_census_blocks`` et ``nyc_neighborhoods`` ont toutes les deux le champ ``boroname``.)
77
[1]78   .. code-block:: sql
79
80     SELECT Sum(ST_Area(the_geom)) / 4047
81       FROM nyc_neighborhoods
82       WHERE boroname = 'Manhattan';
83
[62]84   ::
85
[1]86     13965.3201224118
87
88   or...
89
90   .. code-block:: sql
91
92     SELECT Sum(ST_Area(the_geom)) / 4047
93       FROM nyc_census_blocks
94       WHERE boroname = 'Manhattan';
95
[62]96   ::
97
[1]98     14572.1575543757
99
100
[37]101 * **"Combien de blocs de la ville de New York ont des trous ?"**
[62]102
[1]103   .. code-block:: sql
104
[62]105     SELECT Count(*)
[1]106       FROM nyc_census_blocks
107       WHERE ST_NRings(the_geom) > 1;
108
[62]109   ::
110
111     66
112
[21]113 * **"Quel est la longueur totale des rues (en kilomÚtres) dans la ville de New York ?"** (Astuce: l'unité de mesure des données spatiales est le mÚtre, il y a 1000 mÚtres dans un kilomÚtre.)
[1]114
[62]115   .. code-block:: sql
116
[1]117     SELECT Sum(ST_Length(the_geom)) / 1000
118       FROM nyc_streets;
119
[62]120   ::
121
[1]122     10418.9047172
123
[37]124 * **"Quelle est la longueur de 'Columbus Cir' (Columbus Circle) ?"**
[1]125
[62]126   .. code-block:: sql
[1]127
[62]128     SELECT ST_Length(the_geom)
129       FROM nyc_streets
130       WHERE name = 'Columbus Cir';
131
132   ::
133
134     308.34199
135
[21]136 * **"Quelle est le contour de 'West Village' au format JSON ?"**
[62]137
[1]138   .. code-block:: sql
139
140     SELECT ST_AsGeoJSON(the_geom)
141       FROM nyc_neighborhoods
142       WHERE name = 'West Village';
143
144   ::
[62]145
[1]146      {"type":"MultiPolygon","coordinates":
147       [[[[583263.2776595836,4509242.6260239873],
148          [583276.81990686338,4509378.825446927], ...
149          [583263.2776595836,4509242.6260239873]]]]}
150
[62]151La géométrie de type "MultiPolygon", intéressant !
152
153
[21]154 * **"Combien de polygones sont dans le multi-polygone 'West Village' ?"**
[62]155
[1]156   .. code-block:: sql
157
158     SELECT ST_NumGeometries(the_geom)
159       FROM nyc_neighborhoods
160       WHERE name = 'West Village';
161
162   ::
163
164      1
[62]165
[1]166   .. note::
[62]167
[37]168      Il n'est pas rare de trouver des éléments de type multi-polygone ne contenant qu'un seul polygone dans des tables. L'utilisation du type multi-polygone permet d'utiliser une seule table pour y stocker des géométries simples et multiples sans mélanger les types.
[62]169
170
[21]171 * **"Quel est la longueur des rues de la ville de New York, suivant leur type ?"**
[62]172
[1]173   .. code-block:: sql
174
175      SELECT type, Sum(ST_Length(the_geom)) AS length
176       FROM nyc_streets
177       GROUP BY type
178       ORDER BY length DESC;
179
180   ::
[62]181
182                            type                       |      length
[1]183     --------------------------------------------------+------------------
184      residential                                      | 8629870.33786606
185      motorway                                         | 403622.478126363
186      tertiary                                         | 360394.879051303
187      motorway_link                                    | 294261.419479668
188      secondary                                        | 276264.303897926
189      unclassified                                     | 166936.371604458
190      primary                                          | 135034.233017947
191      footway                                          | 71798.4878378096
192      service                                          |  28337.635038596
193      trunk                                            | 20353.5819826076
194      cycleway                                         | 8863.75144825929
195      pedestrian                                       | 4867.05032825026
196      construction                                     | 4803.08162103562
197      residential; motorway_link                       | 3661.57506293745
198      trunk_link                                       | 3202.18981240201
199      primary_link                                     | 2492.57457083536
200      living_street                                    | 1894.63905457332
201      primary; residential; motorway_link; residential | 1367.76576941335
202      undefined                                        |  380.53861910346
203      steps                                            | 282.745221342127
204      motorway_link; residential                       |  215.07778911517
205
[62]206
[1]207   .. note::
208
[47]209      La clause ``ORDER BY length DESC`` ordonne le résultat par la valeur des longueurs dans l'ordre décroissant. Le résultat avec la plus grande valeur se retrouve au début la liste de résultats.
[1]210
Note: See TracBrowser for help on using the repository browser.