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

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

Fin correction typo et orthographe V2 du document

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
[62]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_Area(geometry)` retourne l'aire d'un polygone
11* :command:`ST_AsText(geometry)` retourne un texte WKT
12* :command:`ST_Contains(geometry A, geometry B)` retourne TRUE si la géométrie A contient la géométrie B
[23]13* :command:`ST_Distance(geometry A, geometry B)` retourne la distance minimum entre deux géométries
[62]14* :command:`ST_DWithin(geometry A, geometry B, radius)` retourne TRUE si la A est distante d'au plus radius de B
15* :command:`ST_GeomFromText(text)` retourne une géométrie
16* :command:`ST_Intersects(geometry A, geometry B)` retourne TRUE si la géométrie A intersecte la géométrie B
17* :command:`ST_Length(linestring)` retourne la longueur d'une ligne
18* :command:`ST_Touches(geometry A, geometry B)` retourne TRUE si le contour extérieur de A touche B
19* :command:`ST_Within(geometry A, geometry B)` retourne TRUE si A est hors de B
[1]20
[62]21Souvenez-vous aussi des tables à votre disposition :
[23]22
[62]23 * ``nyc_census_blocks``
24
[1]25   * name, popn_total, boroname, the_geom
[62]26
[1]27 * ``nyc_streets``
[62]28
[1]29   * name, type, the_geom
[62]30
[1]31 * ``nyc_subway_stations``
[62]32
[1]33   * name, routes, the_geom
[62]34
[1]35 * ``nyc_neighborhoods``
[62]36
[1]37   * name, boroname, the_geom
38
[23]39Exercices
[1]40---------
41
[62]42 * **"Quelle station de métro se situe dans le quartier 'Little Italy' ? Quelle est l'itinéraire de métro à emprunter ?"**
43
[1]44   .. code-block:: sql
[62]45
46     SELECT s.name, s.routes
[1]47     FROM nyc_subway_stations AS s
[62]48     JOIN nyc_neighborhoods AS n
49     ON ST_Contains(n.the_geom, s.the_geom)
[1]50     WHERE n.name = 'Little Italy';
51
[62]52   ::
53
54       name    | routes
[1]55    -----------+--------
56     Spring St | 6
[62]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')
[62]59
[1]60   .. code-block:: sql
[62]61
62    SELECT DISTINCT n.name, n.boroname
[1]63    FROM nyc_subway_stations AS s
[62]64    JOIN nyc_neighborhoods AS n
65    ON ST_Contains(n.the_geom, s.the_geom)
[1]66    WHERE strpos(s.routes,'6') > 0;
[62]67
[1]68   ::
[62]69
70            name        | boroname
[1]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::
[62]89
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
[38]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 ?"**
[62]93
[1]94   .. code-block:: sql
[62]95
[1]96     SELECT Sum(popn_total)
97     FROM nyc_neighborhoods AS n
[62]98     JOIN nyc_census_blocks AS c
99     ON ST_Intersects(n.the_geom, c.the_geom)
[1]100     WHERE n.name = 'Battery Park';
101
[62]102   ::
103
[1]104     9928
[62]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.)
[62]107
[1]108   .. code-block:: sql
[62]109
110     SELECT
111       n.name,
[1]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;
[62]119
[1]120   ::
[62]121
122           name       |  popn_per_sqkm
[1]123     -----------------+------------------
124      Upper East Side | 47943.3590089405
125      Upper West Side | 39729.5779474286
126
Note: See TracBrowser for help on using the repository browser.