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 @ 37

Revision 37, 7.3 KB checked in by nbozon, 13 years ago (diff)

Section 0 to 8 corrected

RevLine 
[1]1.. _geometries_exercises:
2
[37]3Partie 9 : Exercices sur les géométries
[21]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
12 * :command:`ST_SRID(geometry)` retourne l'identifiant du systÚme de références spatiales
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)
21 * :command:`ST_ExteriorRing(polygon)` retourne le contour exterieur (ligne) d'un polygon
22 * :command:`ST_InteriorRingN(polygon, integer)` retourne le contour intérieur (ligne) d'un polygone
23 * :command:`ST_Perimeter(geometry)` retourne la longueur de tout les contours
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
41 * ``nyc_census_blocks`` 
42 
43   * name, popn_total, boroname, the_geom
44 
45 * ``nyc_streets``
46 
47   * name, type, the_geom
48   
49 * ``nyc_subway_stations``
50 
51   * name, the_geom
52 
53 * ``nyc_neighborhoods``
54 
55   * name, boroname, the_geom
56
[37]57Exercices
[1]58---------
59
[37]60 * **"Quelle est l'aire du quartier 'West Village'?"**
[1]61 
62   .. code-block:: sql
63
64     SELECT ST_Area(the_geom)
65       FROM nyc_neighborhoods
66       WHERE name = 'West Village';
67       
68   :: 
69
70     1044614.53027344
71
72   .. note::
73
[37]74      L'aire est donnée en metres carrés. Pour obtenir l'aire en hectare, divisez par 10000. Pour obrenir l'aire en acres, divisez par 4047.
[1]75
[37]76 * **"Quelle est l'aire de Manhattan en acres ?"** (Astuce: ``nyc_census_blocks`` et ``nyc_neighborhoods`` on toutes deux le champ ``boroname``.)
[1]77 
78   .. code-block:: sql
79
80     SELECT Sum(ST_Area(the_geom)) / 4047
81       FROM nyc_neighborhoods
82       WHERE boroname = 'Manhattan';
83
84   :: 
85   
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
96   :: 
97   
98     14572.1575543757
99
100
[37]101 * **"Combien de blocs de la ville de New York ont des trous ?"**
[1]102 
103   .. code-block:: sql
104
105     SELECT Count(*)
106       FROM nyc_census_blocks
107       WHERE ST_NRings(the_geom) > 1;
108
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 
115    .. code-block:: sql
116
117     SELECT Sum(ST_Length(the_geom)) / 1000
118       FROM nyc_streets;
119
120   :: 
121   
122     10418.9047172
123
[37]124 * **"Quelle est la longueur de 'Columbus Cir' (Columbus Circle) ?"**
[1]125 
126     .. code-block:: sql
127 
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 ?"**
[1]137 
138   .. code-block:: sql
139
140     SELECT ST_AsGeoJSON(the_geom)
141       FROM nyc_neighborhoods
142       WHERE name = 'West Village';
143
144   ::
145     
146      {"type":"MultiPolygon","coordinates":
147       [[[[583263.2776595836,4509242.6260239873],
148          [583276.81990686338,4509378.825446927], ...
149          [583263.2776595836,4509242.6260239873]]]]}
150
[21]151La géométrie de type "MultiPolygon", interressant !
[1]152   
153     
[21]154 * **"Combien de polygones sont dans le multi-polygone 'West Village' ?"**
[1]155 
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
165       
166   .. note::
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.
[1]169       
170       
[21]171 * **"Quel est la longueur des rues de la ville de New York, suivant leur type ?"**
[1]172 
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   ::
181   
182                            type                       |      length     
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
206   
207   .. note::
208
[37]209      La clause ``ORDER BY length DESC`` ordonne le résultats 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
211 
212 
213 
[21]214       
Note: See TracBrowser for help on using the repository browser.