Index: trunk/workshop-foss4g/joins_advanced.rst
===================================================================
--- trunk/workshop-foss4g/joins_advanced.rst	(revision 54)
+++ trunk/workshop-foss4g/joins_advanced.rst	(revision 62)
@@ -4,5 +4,5 @@
 =======================================
 
-Dans la partie prÃ©cÃ©dente nous avons vu les fonctions :command:`ST_Centroid(geometry)` et :command:`ST_Union([geometry])` ainsi que quelques exemples simples. Dans cette partie nous rÃ©aliseront des choses plus Ã©llaborÃ©es.
+Dans la partie prÃ©cÃ©dente nous avons vu les fonctions :command:`ST_Centroid(geometry)` et :command:`ST_Union(geometry)` ainsi que quelques exemples simples. Dans cette partie nous rÃ©aliserons des choses plus Ã©laborÃ©es.
 
 .. _creatingtractstable:
@@ -11,5 +11,5 @@
 ------------------------------------------------
 
-Dans le rÃ©pertoire ``\data\`` des travaux pratiques, il y a un fichier qui contient des donnÃ©es attributaires, mais pas de gÃ©omÃ©tries, ce fichier est nommÃ© ``nyc_census_sociodata.sql``. La table contient des donnÃ©es sociaux-Ã©conomiques interressantes Ã  propos de New York : revenus financiers, Ã©ducation .... Il y a juste un problÃšme, les donnÃ©es sont rassemblÃ© en "trace de recensement" et nous n'avons pas de donnÃ©es spatiales associÃ©es !
+Dans le rÃ©pertoire ``\data\`` des travaux pratiques, il y a un fichier qui contient des donnÃ©es attributaires, mais pas de gÃ©omÃ©tries, ce fichier est nommÃ© ``nyc_census_sociodata.sql``. La table contient des donnÃ©es sociaux-Ã©conomiques intÃ©ressantes Ã  propos de New York : revenus financiers, Ã©ducation .... Il y a juste un problÃšme, les donnÃ©es sont rassemblÃ©es en "trace de recensement" et nous n'avons pas de donnÃ©es spatiales associÃ©es !
 
 Dans cette partie nous allons
@@ -18,24 +18,24 @@
  * CrÃ©er une table spatiale pour les traces de recensement
  * Joindre les donnÃ©es attributaires Ã  nos donnÃ©es spatiales
- * RÃ©aliser certaines analises sur nos nouvelles donnÃ©es
- 
+ * RÃ©aliser certaines analyses sur nos nouvelles donnÃ©es
+
 Chargement du fichier nyc_census_sociodata.sql
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
  #. Ouvrez la fenÃªtre de requÃªtage SQL depuis PgAdmin
- #. Selectionnez **File->Open** depuis le menu et naviguez jusqu'au fichier ``nyc_census_sociodata.sql``
+ #. SÃ©lectionnez **File->Open** depuis le menu et naviguez jusqu'au fichier ``nyc_census_sociodata.sql``
  #. Cliquez sur le bouton "Run Query"
- #. Si vous cliquez sur le bouton "Refresh" depuis PgAdmin, la liste des table devrait contenir votre nouvelle table ``nyc_census_sociodata``
- 
+ #. Si vous cliquez sur le bouton "Refresh" depuis PgAdmin, la liste des tables devrait contenir votre nouvelle table ``nyc_census_sociodata``
+
 CrÃ©ation de la table traces de recensement
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- 
-Comme nous l'avons dans la partie prÃ©cÃ©dente, nous pouvons construire des gÃ©omÃ©tries de niveau suppÃ©rieur en utilisant nos blocks de base en utilisant une partie de la clef ``blkid``. Afin de calculer les traces de recensement, nous avons besoin de regrouper les blocks en uitlisant les 11 premiers caractÃšres de la colonne ``blkid``. 
- 
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Comme nous l'avons fait dans la partie prÃ©cÃ©dente, nous pouvons construire des gÃ©omÃ©tries de niveau suppÃ©rieur en utilisant nos blocs de base en utilisant une partie de la clef ``blkid``. Afin de calculer les traces de recensement, nous avons besoin de regrouper les blocs en uitlisant les 11 premiers caractÃšres de la colonne ``blkid``.
+
   ::
 
     360610001009000 = 36 061 00100 9000
 
-    36     = State of New York 
+    36     = State of New York
     061    = New York County (Manhattan)
     000100 = Census Tract
@@ -44,18 +44,18 @@
 
 CrÃ©ation de la nouvelle table en utilisant la fonction d'agrÃ©gation :command:`ST_Union` :
- 
-.. code-block:: sql
-   
+
+.. code-block:: sql
+
    -- CrÃ©ation de la table
    CREATE TABLE nyc_census_tract_geoms AS
-   SELECT 
-     ST_Union(the_geom) AS the_geom, 
+   SELECT
+     ST_Union(the_geom) AS the_geom,
      SubStr(blkid,1,11) AS tractid
    FROM nyc_census_blocks
    GROUP BY tractid;
-     
+
    -- Indexation du champ tractid
    CREATE INDEX nyc_census_tract_geoms_tractid_idx ON nyc_census_tract_geoms (tractid);
-     
+
    -- Mise Ã  jour de la table geometry_columns
    SELECT Populate_Geometry_Columns();
@@ -64,11 +64,11 @@
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-L'objectif est ici de regrouper les donnÃ©es spatiales que nous avons crÃ©Ã© avec les donÃ©es attributaires que nous avions chargÃ© initialement.
-  
-.. code-block:: sql
-  
+L'objectif est ici de regrouper les donnÃ©es spatiales que nous avons crÃ©Ã© avec les donnÃ©es attributaires que nous avions chargÃ© initialement.
+
+.. code-block:: sql
+
   -- CrÃ©ation de la table
   CREATE TABLE nyc_census_tracts AS
-  SELECT 
+  SELECT
     g.the_geom,
     a.*
@@ -76,8 +76,8 @@
   JOIN nyc_census_sociodata a
   ON g.tractid = a.tractid;
-    
+
   -- Indexation des gÃ©omÃ©tries
   CREATE INDEX nyc_census_tract_gidx ON nyc_census_tracts USING GIST (the_geom);
-    
+
   -- Mise Ã  jour de la table geometry_columns
   SELECT Populate_Geometry_Columns();
@@ -85,17 +85,17 @@
 .. _interestingquestion:
 
-RÃ©pondre Ã  une question interressante
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-     
-RÃ©pondre Ã  une question interressante ! "Lister les 10 meilleurs quartiers ordonnÃ©es par la proportion de personne ayant acquis un diplome". 
-  
-.. code-block:: sql
-  
-  SELECT 
-    Round(100.0 * Sum(t.edu_graduate_dipl) / Sum(t.edu_total), 1) AS graduate_pct, 
-    n.name, n.boroname 
-  FROM nyc_neighborhoods n 
-  JOIN nyc_census_tracts t 
-  ON ST_Intersects(n.the_geom, t.the_geom) 
+RÃ©pondre Ã  une question intÃ©ressante
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+RÃ©pondre Ã  une question intÃ©ressante ! "Lister les 10 meilleurs quartiers ordonnÃ©s par la proportion de personnes ayant acquis un diplÃŽme".
+
+.. code-block:: sql
+
+  SELECT
+    Round(100.0 * Sum(t.edu_graduate_dipl) / Sum(t.edu_total), 1) AS graduate_pct,
+    n.name, n.boroname
+  FROM nyc_neighborhoods n
+  JOIN nyc_census_tracts t
+  ON ST_Intersects(n.the_geom, t.the_geom)
   WHERE t.edu_total > 0
   GROUP BY n.name, n.boroname
@@ -103,9 +103,9 @@
   LIMIT 10;
 
-Nous sommons les statistiques qui nous interressent, nous les divisons ensuite Ã  la fin. Afin d'aviter l'erreur de non-division par zero, nous ne prennons pas en compte les quartiers qui n'ont aucune personne ayant obtenu un diplome.
-
-::
-  
-   graduate_pct |       name        | boroname  
+Nous sommons les statistiques qui nous intÃ©ressent, nous les divisons ensuite Ã  la fin. Afin d'Ã©viter l'erreur de non-division par zÃ©ro, nous ne prenons pas en compte les quartiers qui n'ont aucune personne ayant obtenu un diplÃŽme.
+
+::
+
+   graduate_pct |       name        | boroname
   --------------+-------------------+-----------
            40.4 | Carnegie Hill     | Manhattan
@@ -119,12 +119,12 @@
            29.8 | West Village      | Manhattan
            29.7 | Central Park      | Manhattan
-    
-  
+
+
 .. _polypolyjoins:
 
 Polygones/Jointures de polygones
----------------------------------
-
-Dans notre requÃªte interressante (dans :ref:`interestingquestion`) nous avons utilisÃ© la fonction :command:`ST_Intersects(geometry_a, geometry_b)` pour dÃ©terminer quelle entitÃ© polygonale Ã  inclure dans chaque groupe de quartier. Ce qui nous conduit Ã  la question : que ce passe-t-il si une entitÃ© tombe ntre deux quartier ? Il intersectera chacun d'entre eux et ainsi sera inclu dans **chacun** des rÃ©sultats. 
+--------------------------------
+
+Dans notre requÃªte intÃ©ressante (dans :ref:`interestingquestion`) nous avons utilisÃ© la fonction :command:`ST_Intersects(geometry_a, geometry_b)` pour dÃ©terminer quelle entitÃ© polygonale Ã  inclure dans chaque groupe de quartier. Ce qui nous conduit Ã  la question : que ce passe-t-il si une entitÃ© tombe entre deux quartiers ? Il intersectera chacun d'entre eux et ainsi sera inclut dans **chacun** des rÃ©sultats.
 
 .. image:: ./screenshots/centroid_neighborhood.png
@@ -132,27 +132,27 @@
 Pour Ã©viter ce cas de double comptage il existe trois mÃ©thodes :
 
- * La mÃ©thode simple consiste a s'assurer que chaque entitÃ© ne se retrouve que dans **un** seul groupe gÃ©ograhique (en utilisant :command:`ST_Centroid(geometry)`)
+ * La mÃ©thode simple consiste a s'assurer que chaque entitÃ© ne se retrouve que dans **un** seul groupe gÃ©ographique (en utilisant :command:`ST_Centroid(geometry)`)
  * La mÃ©thode complexe consiste Ã  disviser les parties qui se croisent en utilisant les bordures (en utilisant :command:`ST_Intersection(geometry,geometry)`)
- 
+
 Voici un exemple d'utilisation de la mÃ©thode simple pour Ã©viter le double comptage dans notre requÃªte prÃ©cÃ©dente :
 
 .. code-block:: sql
 
-  SELECT 
-    Round(100.0 * Sum(t.edu_graduate_dipl) / Sum(t.edu_total), 1) AS graduate_pct, 
-    n.name, n.boroname 
-  FROM nyc_neighborhoods n 
-  JOIN nyc_census_tracts t 
-  ON ST_Contains(n.the_geom, ST_Centroid(t.the_geom)) 
+  SELECT
+    Round(100.0 * Sum(t.edu_graduate_dipl) / Sum(t.edu_total), 1) AS graduate_pct,
+    n.name, n.boroname
+  FROM nyc_neighborhoods n
+  JOIN nyc_census_tracts t
+  ON ST_Contains(n.the_geom, ST_Centroid(t.the_geom))
   WHERE t.edu_total > 0
   GROUP BY n.name, n.boroname
   ORDER BY graduate_pct DESC
   LIMIT 10;
-  
+
 Remarquez que la requÃªte prend plus de temps Ã  s'exÃ©cuter, puisque la fonction :command:`ST_Centroid` doit Ãªtre effectuÃ©e pour chaque entitÃ©.
 
 ::
 
-   graduate_pct |       name        | boroname  
+   graduate_pct |       name        | boroname
   --------------+-------------------+-----------
            49.2 | Carnegie Hill     | Manhattan
@@ -166,5 +166,5 @@
            30.1 | Downtown          | Brooklyn
            28.4 | Cobble Hill       | Brooklyn
-  
+
 Ãviter le double comptage change le rÃ©sultat !
 
@@ -175,7 +175,7 @@
 ----------------------------------------------
 
-Une requÃªte qu'il est sympat de demander est : "Comment les temps de permutation des gens proches (dans un rayon de 500 metres ) des stations de mÃ©tros diffÃšrent de ceuxqui en vive loin ? "
-
-NÃ©anmoins, la question rencontre les mÃªme problÃšme de double comptage : plusieurs personnes seront dans un rayon de 500 metres de plusieurs stations de mÃ©tros diffÃ©rentes. Coparons la population de New York :
+Une requÃªte qu'il est "sympa" de demander est : "Comment les temps de permutation des gens proches (dans un rayon de 500 mÃštres ) des stations de mÃ©tro diffÃšrent de ceux qui en vivent loin ? "
+
+NÃ©anmoins, la question rencontre les mÃªmes problÃšmes de double comptage : plusieurs personnes seront dans un rayon de 500 mÃštres de plusieurs stations de mÃ©tro diffÃ©rentes. Comparons la population de New York :
 
 .. code-block:: sql
@@ -183,10 +183,10 @@
   SELECT Sum(popn_total)
   FROM nyc_census_blocks;
-  
+
 ::
 
   8008278
-  
-Avec la population des gens de New York dans un rayon de 500 metres d'une station de mÃ©tros :
+
+Avec la population des gens de New York dans un rayon de 500 mÃštres d'une station de mÃ©tro :
 
 .. code-block:: sql
@@ -196,14 +196,14 @@
   JOIN nyc_subway_stations subway
   ON ST_DWithin(census.the_geom, subway.the_geom, 500);
-  
+
 ::
 
   10556898
 
-Il y a plus de personnes proches du mÃ©tro qu'il y a de peronnes ! Clairement, notre requÃªte SQL simple rencontre un gros problÃšme de double comptage. Vous pouvez voir le problÃšme en regardant l'image des zones tampons crÃ©Ã©es pour les stations.
+Il y a plus de personnes proches du mÃ©tro qu'il y a de personnes ! Clairement, notre requÃªte SQL simple rencontre un gros problÃšme de double comptage. Vous pouvez voir le problÃšme en regardant l'image des zones tampons crÃ©Ã©es pour les stations.
 
 .. image:: ./screenshots/subways_buffered.png
 
-La solution est de s'assurer que nous avons seulement des blocks distincts avant de les les regrouper. Nou spouvons rÃ©aliser cela en cassant notre requÃªte en sous-requÃªtes qui rÃ©cupÃšre les blocks distincts, regroupÃ© ensuite pour retrouner notre rÃ©ponse :
+La solution est de s'assurer que nous avons seulement des blocs distincts avant de les regrouper. Nous pouvons rÃ©aliser cela en cassant notre requÃªte en sous-requÃªtes qui rÃ©cupÃšrent les blocs distincts, les regroupent pour ensuite retourner notre rÃ©ponse :
 
 .. code-block:: sql
@@ -216,11 +216,9 @@
     ON ST_DWithin(census.the_geom, subway.the_geom, 500)
   ) AS distinct_blocks;
-  
+
 ::
 
   4953599
 
-C'est mieux ! Donc un peu plus de 50 % de la population de New York vit Ã  proximitÃ© (50m environ 5 Ã  7 minutes de marche) du mÃ©tro.
-
-
-
+C'est mieux ! Donc un peu plus de 50 % de la population de New York vit Ã  proximitÃ© (500m, environ 5 Ã  7 minutes de marche) du mÃ©tro.
+
