Index: trunk/workshop-foss4g/joins.rst
===================================================================
--- trunk/workshop-foss4g/joins.rst	(revision 47)
+++ trunk/workshop-foss4g/joins.rst	(revision 62)
@@ -4,15 +4,15 @@
 ===================================
 
-Les jointures spatiales sont la cerise sur le gÃ¢teau des base de donnÃ©es spatiales. Elles vous pemettent de combiner les informations de plusieures tables en utilisant une relation spatiale comme clause de jointure. La plupart des "analyses SIG standards" peuvent Ãªtre exprimÃ©es Ã  l'aide de jointure spatiales.
+Les jointures spatiales sont la cerise sur le gÃ¢teau des base de donnÃ©es spatiales. Elles vous pemettent de combiner les informations de plusieurs tables en utilisant une relation spatiale comme clause de jointure. La plupart des "analyses SIG standards" peuvent Ãªtre exprimÃ©es Ã  l'aide de jointures spatiales.
 
 Dans la partie prÃ©cÃ©dente, nous avons utilisÃ© les relations spatiales en utilisant deux Ã©tapes dans nos requÃªtes : nous avons dans un premier temps extrait la station de mÃ©tro "Broad St" puis nous avons utilisÃ© ce rÃ©sultat dans nos autres requÃªtes pour rÃ©pondre aux questions comme "dans quel quartier se situe la station 'Broad St' ?"
 
-En utilisant les jointures spatiales, nous pouvons rÃ©pondre aux questions en une seule Ã©tape, rÃ©cupÃ©rant les informations relatives Ã  la station de mÃ©tro et le quartier la contenant : 
-
-.. code-block:: sql
-
-  SELECT 
-    subways.name AS subway_name, 
-    neighborhoods.name AS neighborhood_name, 
+En utilisant les jointures spatiales, nous pouvons rÃ©pondre aux questions en une seule Ã©tape, rÃ©cupÃ©rant les informations relatives Ã  la station de mÃ©tro et le quartier la contenant :
+
+.. code-block:: sql
+
+  SELECT
+    subways.name AS subway_name,
+    neighborhoods.name AS neighborhood_name,
     neighborhoods.boroname AS borough
   FROM nyc_neighborhoods AS neighborhoods
@@ -21,7 +21,7 @@
   WHERE subways.name = 'Broad St';
 
-:: 
-
-   subway_name | neighborhood_name  |  borough  
+::
+
+   subway_name | neighborhood_name  |  borough
   -------------+--------------------+-----------
    Broad St    | Financial District | Manhattan
@@ -38,6 +38,6 @@
 .. code-block:: sql
 
-  SELECT 
-    neighborhoods.name AS neighborhood_name, 
+  SELECT
+    neighborhoods.name AS neighborhood_name,
     Sum(census.popn_total) AS population,
     Round(100.0 * Sum(census.popn_white) / Sum(census.popn_total),1) AS white_pct,
@@ -52,5 +52,5 @@
 ::
 
-   neighborhood_name  | population | white_pct | black_pct 
+   neighborhood_name  | population | white_pct | black_pct
  ---------------------+------------+-----------+-----------
   Carnegie Hill       |      19909 |      91.6 |       1.5
@@ -87,13 +87,13 @@
 
 #. La clause ``JOIN`` crÃ©e une table virtuelle qui contient les colonnes Ã  la fois des quartiers et des recensements (tables neighborhoods et census).
-#. La clause ``WHERE`` filtre la table virtuelle pour ne conserver que la ligne correspondant Ã  Manhattan. 
-#. Les lignes restantes sont regroupÃ©es par le nom du quartier et sont utilisÃ©es par la fonction d'agrÃ©gation : :command:`Sum()` pour rÃ©aliser la somme des valeurs de la populations.
-#. AprÃšs un peu d'arythmÃ©tique et de formatage (ex: ``GROUP BY``, ``ORDER BY``)) sur le nombres finaux, notre requÃªte calcul les pourcentages.
-
-.. note:: 
+#. La clause ``WHERE`` filtre la table virtuelle pour ne conserver que la ligne correspondant Ã  Manhattan.
+#. Les lignes restantes sont regroupÃ©es par le nom du quartier et sont utilisÃ©es par la fonction d'agrÃ©gation : :command:`Sum()` pour rÃ©aliser la somme des valeurs de la population.
+#. AprÃšs un peu d'arithmÃ©tique et de formatage (ex: ``GROUP BY``, ``ORDER BY``)) sur le nombres finaux, notre requÃªte calcule les pourcentages.
+
+.. note::
 
    La clause ``JOIN`` combine deux parties ``FROM``.  Par dÃ©faut, nous utilisons un jointure du type :``INNER JOIN``, mais il existe quatres autres types de jointures. Pour de plus amples informations Ã  ce sujet, consultez la partie `type_jointure <http://docs.postgresql.fr/9.1/sql-select.html>`_ de la page de la documentation officielle de PostgreSQL.
 
-Nous pouvons aussi utiliser le test de la distance dans notre clef de jointure, pour crÃ©er une regroupement de "tout les Ã©lÃ©ments dans un certain rayon". Essayons d'analyser la gÃ©ographie raciale de New York en utilisant les requÃªtes de distance.
+Nous pouvons aussi utiliser le test de la distance dans notre clef de jointure, pour crÃ©er une regroupement de "tous les Ã©lÃ©ments dans un certain rayon". Essayons d'analyser la gÃ©ographie raciale de New York en utilisant les requÃªtes de distance.
 
 PremiÃšrement, essayons d'obtenir la rÃ©partition raciale de la ville.
@@ -101,13 +101,13 @@
 .. code-block:: sql
 
-  SELECT 
-    100.0 * Sum(popn_white) / Sum(popn_total) AS white_pct, 
-    100.0 * Sum(popn_black) / Sum(popn_total) AS black_pct, 
+  SELECT
+    100.0 * Sum(popn_white) / Sum(popn_total) AS white_pct,
+    100.0 * Sum(popn_black) / Sum(popn_total) AS black_pct,
     Sum(popn_total) AS popn_total
   FROM nyc_census_blocks;
 
-:: 
-
-        white_pct      |      black_pct      | popn_total 
+::
+
+        white_pct      |      black_pct      | popn_total
   ---------------------+---------------------+------------
    44.6586020115685295 | 26.5945063345703034 |    8008278
@@ -123,6 +123,6 @@
 
   SELECT DISTINCT routes FROM nyc_subway_stations;
-  
-:: 
+
+::
 
  A,C,G
@@ -137,13 +137,13 @@
 
    Le mot clef ``DISTINCT`` permet d'Ã©liminer les rÃ©pÃ©titions de lignes de notre rÃ©sultat. Dans ce mot clef, notre requÃªte renverrait 491 rÃ©sultats au lieu de 73.
-   
-Donc pour trouver le train A, nous allons demander toutes les lignes ayant pour ``routes`` la valeur 'A'. Nous pouvons faire cela de diffÃ©rentes maniÃšres, mais nous utiliserons aujourd'hui le fait que la fonction :command:`strpos(routes,'A')` retourne un entier diffÃ©rent de 0 si la lettre 'A' se trouve dans la valeur du champs route.
-
-.. code-block:: sql
-
-   SELECT DISTINCT routes 
-   FROM nyc_subway_stations AS subways 
+
+Donc pour trouver le train A, nous allons demander toutes les lignes ayant pour ``routes`` la valeur 'A'. Nous pouvons faire cela de diffÃ©rentes maniÃšres, mais nous utiliserons aujourd'hui le fait que la fonction :command:`strpos(routes,'A')` retourne un entier diffÃ©rent de 0 si la lettre 'A' se trouve dans la valeur du champ route.
+
+.. code-block:: sql
+
+   SELECT DISTINCT routes
+   FROM nyc_subway_stations AS subways
    WHERE strpos(subways.routes,'A') > 0;
-   
+
 ::
 
@@ -157,12 +157,12 @@
   A,B,C,D
   A,C,E
-  
+
 Essayons de regrouper la rÃ©partition raciale dans un rayon de 200 mÃštres de la ligne du train A.
 
 .. code-block:: sql
 
-  SELECT 
-    100.0 * Sum(popn_white) / Sum(popn_total) AS white_pct, 
-    100.0 * Sum(popn_black) / Sum(popn_total) AS black_pct, 
+  SELECT
+    100.0 * Sum(popn_white) / Sum(popn_total) AS white_pct,
+    100.0 * Sum(popn_black) / Sum(popn_total) AS black_pct,
     Sum(popn_total) AS popn_total
   FROM nyc_census_blocks AS census
@@ -173,21 +173,21 @@
 ::
 
-        white_pct      |      black_pct      | popn_total 
+        white_pct      |      black_pct      | popn_total
   ---------------------+---------------------+------------
    42.0805466940877366 | 23.0936148851067964 |     185259
 
-La rÃ©partition raciale le long de la ligne du train A n'est pas radicallement diffÃ©rente de la rÃ©partition gÃ©nÃ©rale de la ville de New York.
+La rÃ©partition raciale le long de la ligne du train A n'est pas radicalement diffÃ©rente de la rÃ©partition gÃ©nÃ©rale de la ville de New York.
 
 Jointures avancÃ©es
 ------------------
 
-Dans la derniÃšre partie nous avons vu que le train A n'est pas utilisÃ© par des populations si Ã©loignÃ©es de la rÃ©partition totale du reste de la ville. Y-a-t-il des train qui passent par des parties de la ville qui ne sont pas dans la moyenne de la rÃ©partition raciale ?
-
-Pour rÃ©pondre Ã  cette question, nous ajouterons une nouvelle jointure Ã  notre requÃªte, de telle maniÃšre que nous puissions calculer simultanÃ©ment la rÃ©partition raciale de plusieures lignes de mÃ©tro Ã  la fois. Pour faire ceci, nous crÃ©erons une table qui permettra d'Ã©numÃ©rer toutes les lignes que nous voulons regrouper.
+Dans la derniÃšre partie nous avons vu que le train A n'est pas utilisÃ© par des populations si Ã©loignÃ©es de la rÃ©partition totale du reste de la ville. Y-a-t-il des trains qui passent par des parties de la ville qui ne sont pas dans la moyenne de la rÃ©partition raciale ?
+
+Pour rÃ©pondre Ã  cette question, nous ajouterons une nouvelle jointure Ã  notre requÃªte, de telle maniÃšre que nous puissions calculer simultanÃ©ment la rÃ©partition raciale de plusieurs lignes de mÃ©tro Ã  la fois. Pour faire ceci, nous crÃ©erons une table qui permettra d'Ã©numÃ©rer toutes les lignes que nous voulons regrouper.
 
 .. code-block:: sql
 
     CREATE TABLE subway_lines ( route char(1) );
-    INSERT INTO subway_lines (route) VALUES 
+    INSERT INTO subway_lines (route) VALUES
       ('A'),('B'),('C'),('D'),('E'),('F'),('G'),
       ('J'),('L'),('M'),('N'),('Q'),('R'),('S'),
@@ -195,12 +195,12 @@
       ('7');
 
-Maintenant nous pouvons joindre les tables des lignes de mÃ©tros Ã  notre requÃªte prÃ©cÃ©dente.
-
-.. code-block:: sql
-
-    SELECT 
+Maintenant nous pouvons joindre les tables des lignes de mÃ©tro Ã  notre requÃªte prÃ©cÃ©dente.
+
+.. code-block:: sql
+
+    SELECT
       lines.route,
-      Round(100.0 * Sum(popn_white) / Sum(popn_total), 1) AS white_pct, 
-      Round(100.0 * Sum(popn_black) / Sum(popn_total), 1) AS black_pct, 
+      Round(100.0 * Sum(popn_white) / Sum(popn_total), 1) AS white_pct,
+      Round(100.0 * Sum(popn_black) / Sum(popn_total), 1) AS black_pct,
       Sum(popn_total) AS popn_total
     FROM nyc_census_blocks AS census
@@ -214,5 +214,5 @@
 ::
 
-     route | white_pct | black_pct | popn_total 
+     route | white_pct | black_pct | popn_total
     -------+-----------+-----------+------------
      S     |      30.1 |      59.5 |      32730
@@ -239,5 +239,5 @@
 
 
-Comme prÃ©cÃ©demment, les jointures crÃ©ent une table virtuelle de toutes les combinaisons possibles et disponibles Ã  l'aide des contraintes de type ``JOIN ON`. Ces lignes sont ensuite utilisÃ©es dans le regroupement ``GROUP``. La magie spatiale tiend dans l'utilisation de la fonction ``ST_DWithin`` qui s'assure que les blocs sont suffisamment proches des lignes de mÃ©tros inclues dans le calcul.
+Comme prÃ©cÃ©demment, les jointures crÃ©ent une table virtuelle de toutes les combinaisons possibles et disponibles Ã  l'aide des contraintes de type ``JOIN ON`. Ces lignes sont ensuite utilisÃ©es dans le regroupement ``GROUP``. La magie spatiale tient dans l'utilisation de la fonction ``ST_DWithin`` qui s'assure que les blocs sont suffisamment proches des lignes de mÃ©tros incluses dans le calcul.
 
 Liste de fonctions
@@ -246,7 +246,7 @@
 `ST_Contains(geometry A, geometry B) <http://postgis.org/docs/ST_Contains.html>`_: retourne TRUE si et seulement si aucun point de B est Ã  l'extÃ©rieur de A, et si au moins un point Ã  l'intÃ©rieur de B  est Ã  l'intÃ©rieur de A.
 
-`ST_DWithin(geometry A, geometry B, radius) <http://postgis.org/docs/ST_DWithin.html>`_: retourne TRUE si les gÃ©omÃ©tries sont distantes du rayon donnÃ©. 
-
-`ST_Intersects(geometry A, geometry B) <http://postgis.org/docs/ST_Intersects.html>`_: retourne TRUE si les gÃ©omÃ©tries/gÃ©ographies "s'intersectent spatialement" (partage une portiond de l'espace) et FALSE sinon (elles sont dijointes). 
+`ST_DWithin(geometry A, geometry B, radius) <http://postgis.org/docs/ST_DWithin.html>`_: retourne TRUE si les gÃ©omÃ©tries sont distantes du rayon donnÃ©.
+
+`ST_Intersects(geometry A, geometry B) <http://postgis.org/docs/ST_Intersects.html>`_: retourne TRUE si les gÃ©omÃ©tries/gÃ©ographies "s'intersectent spatialement" (partage une portion de l'espace) et FALSE sinon (elles sont disjointes).
 
 `round(v numeric, s integer) <http://www.postgresql.org/docs/7.4/interactive/functions-math.html>`_: fonction de PostgreSQL qui arrondit Ã  s dÃ©cimales.
@@ -256,5 +256,5 @@
 `sum(expression) <http://www.postgresql.org/docs/8.2/static/functions-aggregate.html#FUNCTIONS-AGGREGATE-TABLE>`_: fonction d'agrÃ©gation de PostgreSQL qui retourne la somme d'un ensemble de valeurs.
 
-.. rubric:: Footnotes
+.. rubric:: Notes de bas de page
 
 .. [#PostGIS_Doco] http://postgis.org/documentation/manual-1.5/
