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

Revision 47, 4.2 KB checked in by nbozon, 13 years ago (diff)

Some more typos corrected -

RevLine 
[1]1.. _joins_exercises:
2
[40]3Partie 13 : Exercices sur jointures spatiales
4=============================================
[1]5
[47]6Voici un petit rappel de certaines des fonctions vues précédemment. Elles seront 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
[38]10* :command:`ST_Area(geometry)` retourbe l'aire d'un polygone
[1]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
[38]17* :command:`ST_Length(linestring)` retourne la longueur d'une 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
[47]21Souvenez-vous aussi des tables à votre disposition :
[23]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
[38]42 * **"Quelle station de métros se situe dans le quartier 'Little Italy' ? Quelle est l'itinéraire de métro à 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     
[47]58 * **"Quels sont les quartiers desservis pas le train numéro 6 ?"** (Astuce: la colonne ``routes`` de la table ``nyc_subway_stations`` dispose des valeurs suivantes: '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 
[38]90     Nous avons utilisé le mot clef ``DISTINCT`` pour supprimer les répétitions dans notre ensemble de résultats où il y avait plus d'une seule station de métro dans le quartier.
91       
92 * **"AprÚs le 11 septembre, le quartier de 'Battery Park' était interdit d'accÚs pendant plusieurs jours. Combien de personnes ont dû être évacuées ?"**
[1]93 
94   .. code-block:: sql
95 
96     SELECT Sum(popn_total)
97     FROM nyc_neighborhoods AS n
98     JOIN nyc_census_blocks AS c
99     ON ST_Intersects(n.the_geom, c.the_geom) 
100     WHERE n.name = 'Battery Park';
101   
102   :: 
103
104     9928
105   
[38]106 * **"Quelle est la densité de population (personne / km^2) des quartiers de 'Upper West Side' et de 'Upper East Side' ?"** (Astuce: il y a 1000000 m^2 dans un km^2.)
[1]107 
108   .. code-block:: sql
109   
110     SELECT
111       n.name,
112       Sum(c.popn_total) / (ST_Area(n.the_geom) / 1000000.0) AS popn_per_sqkm
113     FROM nyc_census_blocks AS c
114     JOIN nyc_neighborhoods AS n
115     ON ST_Intersects(c.the_geom, n.the_geom)
116     WHERE n.name = 'Upper West Side'
117     OR n.name = 'Upper East Side'
118     GROUP BY n.name, n.the_geom;
119     
120   ::
121   
122           name       |  popn_per_sqkm   
123     -----------------+------------------
124      Upper East Side | 47943.3590089405
125      Upper West Side | 39729.5779474286
126
[23]127     
Note: See TracBrowser for help on using the repository browser.