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/joins_exercises.rst @ 29

Revision 24, 4.2 KB checked in by djay, 13 years ago (diff)

Traduction de la section 13

RevLine 
[1]1.. _joins_exercises:
2
[23]3Partie 13 : exercice jointures spatial
4=======================================
[1]5
[24]6Voici un petit rappel de certaines des fonctions vues précédemment. Astuce: elles pourraient être utiles pour les exercices !
[1]7
[23]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
[1]10* :command:`ST_Area(geometry)` returns the area of the polygons
11* :command:`ST_AsText(geometry)` returns WKT ``text``
[23]12* :command:`ST_Contains(geometry A, geometry B)` retourne vrai si la géométrie A contient la géométrie B
13* :command:`ST_Distance(geometry A, geometry B)` retourne la distance minimum entre deux géométries
14* :command:`ST_DWithin(geometry A, geometry B, radius)` retourne vrai si la A est distante d'au plus radius de B
[1]15* :command:`ST_GeomFromText(text)` returns ``geometry``
16* :command:`ST_Intersects(geometry A, geometry B)` returns the true if geometry A intersects geometry B
17* :command:`ST_Length(linestring)` returns the length of the linestring
[23]18* :command:`ST_Touches(geometry A, geometry B)` retourne vrai si le contour extérieur de A touche B
19* :command:`ST_Within(geometry A, geometry B)` retourne vrai si A est hors de B
[1]20
[23]21Souvenez-vous des tables à notre disposition :
22
[1]23 * ``nyc_census_blocks`` 
24 
25   * name, popn_total, boroname, the_geom
26 
27 * ``nyc_streets``
28 
29   * name, type, the_geom
30   
31 * ``nyc_subway_stations``
32 
33   * name, routes, the_geom
34 
35 * ``nyc_neighborhoods``
36 
37   * name, boroname, the_geom
38
[23]39Exercices
[1]40---------
41
[23]42 * **"Quelle station de métros se situe dans le quartier 'Little Italy' ? Quelle est l'itinéraire de métros à emprunter ?"**
[1]43 
44   .. code-block:: sql
45 
46     SELECT s.name, s.routes
47     FROM nyc_subway_stations AS s
48     JOIN nyc_neighborhoods AS n
49     ON ST_Contains(n.the_geom, s.the_geom) 
50     WHERE n.name = 'Little Italy';
51
52   :: 
53 
54       name    | routes
55    -----------+--------
56     Spring St | 6
57     
[23]58 * **"Quels sont les quartiers desservis pas le train numéro 6 ?"** (Astuce: la colonnes ``routes`` de la table ``nyc_subway_stations`` on les valeurs suivante 'B,D,6,V' et 'C,6')
[1]59 
60   .. code-block:: sql
61 
62    SELECT DISTINCT n.name, n.boroname
63    FROM nyc_subway_stations AS s
64    JOIN nyc_neighborhoods AS n
65    ON ST_Contains(n.the_geom, s.the_geom) 
66    WHERE strpos(s.routes,'6') > 0;
67   
68   ::
69 
70            name        | boroname 
71    --------------------+-----------
72     Midtown            | Manhattan
73     Hunts Point        | The Bronx
74     Gramercy           | Manhattan
75     Little Italy       | Manhattan
76     Financial District | Manhattan
77     South Bronx        | The Bronx
78     Yorkville          | Manhattan
79     Murray Hill        | Manhattan
80     Mott Haven         | The Bronx
81     Upper East Side    | Manhattan
82     Chinatown          | Manhattan
83     East Harlem        | Manhattan
84     Greenwich Village  | Manhattan
85     Parkchester        | The Bronx
86     Soundview          | The Bronx
87
88   .. note::
89 
[23]90     Nous avons utilisé le mot clef ``DISTINCT`` pour supprimer les répétitions dans notre ensemble derésultats où il y avait plus d'une seule station de métros dans le quartier.   
91 * **"AprÚs le 11 septembre, le quartier de 'Battery Park' était interdit d'accÚs pendant plusieurs jours. Combien de personnes ont dût être évacués ?"**
[1]92 
93   .. code-block:: sql
94 
95     SELECT Sum(popn_total)
96     FROM nyc_neighborhoods AS n
97     JOIN nyc_census_blocks AS c
98     ON ST_Intersects(n.the_geom, c.the_geom) 
99     WHERE n.name = 'Battery Park';
100   
101   :: 
102
103     9928
104   
[23]105 * **"Quelle est la densité de population (personne / km^2) des quartier de 'Upper West Side' et de 'Upper East Side' ?"** (Astuce: il y a 1000000 m^2 dans un km^2.)
[1]106 
107   .. code-block:: sql
108   
109     SELECT
110       n.name,
111       Sum(c.popn_total) / (ST_Area(n.the_geom) / 1000000.0) AS popn_per_sqkm
112     FROM nyc_census_blocks AS c
113     JOIN nyc_neighborhoods AS n
114     ON ST_Intersects(c.the_geom, n.the_geom)
115     WHERE n.name = 'Upper West Side'
116     OR n.name = 'Upper East Side'
117     GROUP BY n.name, n.the_geom;
118     
119   ::
120   
121           name       |  popn_per_sqkm   
122     -----------------+------------------
123      Upper East Side | 47943.3590089405
124      Upper West Side | 39729.5779474286
125
[23]126     
Note: See TracBrowser for help on using the repository browser.