Index: trunk/workshop-foss4g/projection.rst
===================================================================
--- trunk/workshop-foss4g/projection.rst	(revision 61)
+++ trunk/workshop-foss4g/projection.rst	(revision 62)
@@ -4,7 +4,7 @@
 ===================================
 
-La Terre n'est pas plate et il n'y a pas de moyen simple de la poser Ã  plat sur une carte en papier (ou l'Ã©cran d'un ordinateur). Certaines projections prÃ©servent les aires, donc tout les objets ont des tailles relatives aux autres, d'autre projections conservent les angles (conformes) comme la projection Mercator. Certaines projections tentent de minimiser la distorsion des diffÃ©rents paramÃštres. Le point commun entre toutes les projections est qu'elles transforment le monde (sphÃ©rique) en un systÃšme plat de coordonnÃ©es cartÃ©siennes, et le choix de la projection dÃ©pend de ce que vous souhaitez faire avec vos donnÃ©es.
+La Terre n'est pas plate et il n'y a pas de moyen simple de la poser Ã  plat sur une carte en papier (ou l'Ã©cran d'un ordinateur). Certaines projections prÃ©servent les aires, donc tous les objets ont des tailles relatives aux autres, d'autre projections conservent les angles (conformes) comme la projection Mercator. Certaines projections tentent de minimiser la distorsion des diffÃ©rents paramÃštres. Le point commun entre toutes les projections est qu'elles transforment le monde (sphÃ©rique) en un systÃšme plat de coordonnÃ©es cartÃ©siennes, et le choix de la projection dÃ©pend de ce que vous souhaitez faire avec vos donnÃ©es.
 
-Nous avons dÃ©jÃ  recontrer des projections, lorsque nous avons charger les donnÃ©es de la ville de Ney York .Rappelez-vous qu'elles utilisaient le SRID 26918. Parfois, vous aurez malgrÃ© tout besoin de transformer et de reprojeter vos donnÃ©es d'un systÃšme de projection Ã  un autre, en utilisant la fonction  :command:`ST_Transform(geometry, srid)`. Pour manipuler les identifiant de systÃšmes de rÃ©fÃ©rences spatiales Ã  partir d'une gÃ©omÃ©trie, PostGIS fournit les fonctions :command:`ST_SRID(geometry)` et :command:`ST_SetSRID(geometry, srid)`.
+Nous avons dÃ©jÃ  rencontrÃ© des projections, lorsque nous avons chargÃ© les donnÃ©es de la ville de Ney York .Rappelez-vous qu'elles utilisaient le SRID 26918. Parfois, vous aurez malgrÃ© tout besoin de transformer et de reprojeter vos donnÃ©es d'un systÃšme de projection Ã  un autre, en utilisant la fonction  :command:`ST_Transform(geometry, srid)`. Pour manipuler les identifiants de systÃšme de rÃ©fÃ©rence spatiale Ã  partir d'une gÃ©omÃ©trie, PostGIS fournit les fonctions :command:`ST_SRID(geometry)` et :command:`ST_SetSRID(geometry, srid)`.
 
 Nous pouvons vÃ©rifier le SRID de nos donnÃ©es avec la commande :command:`ST_SRID` :
@@ -13,15 +13,15 @@
 
   SELECT ST_SRID(the_geom) FROM nyc_streets LIMIT 1;
-  
+
 ::
 
   26918
-  
-Et quelle est la dÃ©finition du "26918" ? Comme nous l'avons vu lors de la partie ":ref:`chargement des donnÃ©es`", la dÃ©finition se trouve dans la table ``spatial_ref_sys``. En fait, **deux** dÃ©finitions sont prÃ©sentes. La dÃ©finition au format :term:`WKT` dans la colonne ``srtext``
+
+Et quelle est la dÃ©finition du "26918" ? Comme nous l'avons vu lors de la partie ":ref:`chargement des donnÃ©es<loading_data>`", la dÃ©finition se trouve dans la table ``spatial_ref_sys``. En fait, **deux** dÃ©finitions sont prÃ©sentes. La dÃ©finition au format :term:`WKT` dans la colonne ``srtext``
 
 .. code-block:: sql
 
    SELECT * FROM spatial_ref_sys WHERE srid = 26918;
-   
+
 En fait, pour les calculs internes de re-projection, c'est le contenu de la colonne ``proj4text`` qui est utilisÃ©. Pour notre projection 26918, voici la dÃ©finition au format proj.4 :
 
@@ -29,9 +29,9 @@
 
   SELECT proj4text FROM spatial_ref_sys WHERE srid = 26918;
-  
+
 ::
 
-  +proj=utm +zone=18 +ellps=GRS80 +datum=NAD83 +units=m +no_defs 
-  
+  +proj=utm +zone=18 +ellps=GRS80 +datum=NAD83 +units=m +no_defs
+
 En pratique, les deux colonnes ``srtext`` et ``proj4text`` sont importantes : la colonne ``srtext`` est utilisÃ©e par les applications externes comme `GeoServer <http://geoserver.org>`_, uDig <udig.refractions.net>`_, `FME <http://www.safe.com/>`_  et autres, alors que la colonne ``proj4text`` est principalement utilisÃ©e par PostGIS en interne.
 
@@ -54,9 +54,9 @@
   ERROR:  Operation on two geometries with different SRIDs
   CONTEXT:  SQL function "st_equals" statement 1
-  
+
 
 .. note::
 
-   Faites attention de pas utiliser la transformation Ã  la volÃ©e Ã  l'aide de :command:`ST_Transform` trop souvent. Les indexes spatiaux sont construits en utilisant le SRID inclu dans les gÃ©omÃ©tries. Si la comparaison est faite avec un SRID diffÃ©rent, les indexes spatiaux ne seront pas (la plupart du temps) utilisÃ©s. Il est reconnu qu'il vaut mieux choisir **un SRID** pour toutes les tables de votre base de donnÃ©es. N'utilisez la fonction de tranformation que lorsque vous lisez ou Ã©crivez les donnÃ©es depuis une application externe.
+   Faites attention de pas utiliser la transformation Ã  la volÃ©e Ã  l'aide de :command:`ST_Transform` trop souvent. Les index spatiaux sont construits en utilisant le SRID inclus dans les gÃ©omÃ©tries. Si la comparaison est faite avec un SRID diffÃ©rent, les index spatiaux ne seront pas (la plupart du temps) utilisÃ©s. Il est reconnu qu'il vaut mieux choisir **un SRID** pour toutes les tables de votre base de donnÃ©es. N'utilisez la fonction de tranformation que lorsque vous lisez ou Ã©crivez les donnÃ©es depuis une application externe.
 
 
@@ -64,18 +64,18 @@
 -----------------------
 
-Si vous retournez Ã  la dÃ©finition au format proj4 du SRID 26918, vous pouvez voir que notre projectioin actuelle est de type UTM zone 18 (Universal Transvers Mercator), avec le mÃštre comme unitÃ© de mesure.
+Si vous retournez Ã  la dÃ©finition au format proj4 du SRID 26918, vous pouvez voir que notre projection actuelle est de type UTM zone 18 (Universal Transvers Mercator), avec le mÃštre comme unitÃ© de mesure.
 
 ::
 
-   +proj=utm +zone=18 +ellps=GRS80 +datum=NAD83 +units=m +no_defs 
+   +proj=utm +zone=18 +ellps=GRS80 +datum=NAD83 +units=m +no_defs
 
 Essayons de convertir certaines donnÃ©es de notre systÃšme de projection dans un systÃšme de coordonnÃ©es gÃ©ographiques connu comme "longitude/latitude".
 
-Pour convertir les donnÃ©es d'un SRID Ã  l'autre, nous devons dans un premier temps vÃ©rifier que nos gÃ©omÃ©tries ont un SRID valide. une fois que nous avons vÃ©rifiÃ© cela, nous devons ensuite trouver le SRID dans le lequel nous souhaitons re-projeter. En d'autre terme, quel est le SRID des coordonnÃ©es gÃ©ographiques ?
+Pour convertir les donnÃ©es d'un SRID Ã  l'autre, nous devons dans un premier temps vÃ©rifier que nos gÃ©omÃ©tries ont un SRID valide. Une fois que nous avons vÃ©rifiÃ© cela, nous devons ensuite trouver le SRID dans lequel nous souhaitons re-projeter. En d'autre terme, quel est le SRID des coordonnÃ©es gÃ©ographiques ?
 
-Le SRID le plus connu pour les coordonnÃ©es gÃ©ographiques est le 4326, qui correspond au couple "longitude/latitude sur la sphÃ©roÃ¯de WGS84". Vous pouvez voir sa dÃ©finition sur le site spatialreference.org.
+Le SRID le plus connu pour les coordonnÃ©es gÃ©ographiques est le 4326, qui correspond au couple "longitude/latitude sur la sphÃ©roÃ¯de WGS84". Vous pouvez voir sa dÃ©finition sur le site http://spatialreference.org.
 
   http://spatialreference.org/ref/epsg/4326/
-  
+
 Vous pouvez aussi rÃ©cupÃ©rer les dÃ©finitions dans la table  ``spatial_ref_sys`` :
 
@@ -83,5 +83,5 @@
 
   SELECT srtext FROM spatial_ref_sys WHERE srid = 4326;
-  
+
 ::
 
@@ -98,24 +98,24 @@
 .. code-block:: sql
 
-  SELECT ST_AsText(ST_Transform(the_geom,4326)) 
-  FROM nyc_subway_stations 
+  SELECT ST_AsText(ST_Transform(the_geom,4326))
+  FROM nyc_subway_stations
   WHERE name = 'Broad St';
-  
+
 ::
 
   POINT(-74.0106714688735 40.7071048155841)
 
-Si vous chargez les donnÃ©es ou crÃ©ez une nouvelle gÃ©omÃ©trie sans spÃ©cifier de SRID, la valeur du SRID prendra alors la valeur -1. Rapellez-vous que dans les :ref:`geometries`, lorsque nous avons crÃ©Ã© nos tables gÃ©omÃ©triques nous n'avions pas spÃ©cifiÃ© un SRID. Si nous interrogeons la base, nous devons nous attendre Ã  ce que toutes les tables prÃ©fixÃ©es par ``nyc_`` aient le SRID 26918, alors que la table ``geometries`` aura la valeur -1 par dÃ©faut.
+Si vous chargez les donnÃ©es ou crÃ©ez une nouvelle gÃ©omÃ©trie sans spÃ©cifier de SRID, la valeur du SRID prendra alors la valeur -1. Rappelez-vous que dans les :ref:`geometries`, lorsque nous avons crÃ©Ã© nos tables gÃ©omÃ©triques nous n'avions pas spÃ©cifiÃ© un SRID. Si nous interrogeons la base, nous devons nous attendre Ã  ce que toutes les tables prÃ©fixÃ©es par ``nyc_`` aient le SRID 26918, alors que la table ``geometries`` aura la valeur -1 par dÃ©faut.
 
-Pour visualiser la table d'assignation des SRID, interroger la table ``geometry_columns`` de la base de donnÃ©es.
+Pour visualiser la table d'assignation des SRID, interrogez la table ``geometry_columns`` de la base de donnÃ©es.
 
 .. code-block:: sql
 
-  SELECT f_table_name AS name, srid 
+  SELECT f_table_name AS name, srid
   FROM geometry_columns;
-  
+
 ::
 
-          name         | srid  
+          name         | srid
   ---------------------+-------
    nyc_census_blocks   | 26918
@@ -125,6 +125,6 @@
    geometries          |    -1
 
-  
-NÃ©anmoins, si vous connaissez le SRID de vos donnÃ©es, vous pouvez l'affecter par la suite en utilisant la fonction :command:`ST_SetSRID` sur les gÃ©omÃ©tries. Ensuite vous pourrez les tranformer dans d'autres systÃšmes de projections.
+
+NÃ©anmoins, si vous connaissez le SRID de vos donnÃ©es, vous pouvez l'affecter par la suite en utilisant la fonction :command:`ST_SetSRID` sur les gÃ©omÃ©tries. Ensuite vous pourrez les transformer dans d'autres systÃšmes de projections.
 
 .. code-block:: sql
@@ -144,5 +144,6 @@
 `ST_SetSRID(geometry, srid) <http://postgis.org/docs/ST_SetSRID.html>`_: affecte une valeur au SRID d'une gÃ©omÃ©trie.
 
-`ST_SRID(geometry) <http://postgis.org/docs/ST_SRID.html>`_: retourne l'indentifiant du systÃšme de rÃ©fÃ©rences spatialesd'un objet ST_Geometry comme dÃ©finit dans la table spatial_ref_sys.
+`ST_SRID(geometry) <http://postgis.org/docs/ST_SRID.html>`_: retourne l'identifiant du systÃšme de rÃ©fÃ©rence spatiale d'un objet ST_Geometry comme dÃ©fini dans la table spatial_ref_sys.
 
-`ST_Transform(geometry, srid) <http://postgis.org/docs/ST_Transform.html>`_: retourne une nouvelle gÃ©omÃ©trie aprÃšs avoi re-projetÃ©  les donnÃ©es dans le systÃšme correspondant au SRID passÃ© en paramÃštre.
+`ST_Transform(geometry, srid) <http://postgis.org/docs/ST_Transform.html>`_: retourne une nouvelle gÃ©omÃ©trie aprÃšs avoir re-projetÃ©  les donnÃ©es dans le systÃšme correspondant au SRID passÃ© en paramÃštre.
+
Index: trunk/workshop-foss4g/geography.rst
===================================================================
--- trunk/workshop-foss4g/geography.rst	(revision 61)
+++ trunk/workshop-foss4g/geography.rst	(revision 62)
@@ -4,13 +4,13 @@
 =====================================
 
-Il est trÃšs frÃ©quent de manipuler des donnÃ©es Ã  coordonnÃ©es "gÃ©ographiques" ou de "longitude/latitude". 
-
-Au contraire des coordonnÃ©es de type Mercator, UTM ou Stateplane, les coordonnÃ©es gÃ©ographiques ne reprÃ©sentent pas une distance linÃ©aire depuis une origine, tel que dans un plan. Elles dÃ©crivent la distance angulaire entre l'Ã©quateur et les pÃŽles. Dans les sytÃšmes de coordonnÃ©es sphÃ©riques, un point est spÃ©cifiÃ© par son rayon (distance Ã  l'origine), son angle de rotation par rapport au mÃ©ridien plan, et son angle par rapport Ã  l'axe pÃŽlaire. 
+Il est trÃšs frÃ©quent de manipuler des donnÃ©es Ã  coordonnÃ©es "gÃ©ographiques" ou de "longitude/latitude".
+
+Au contraire des coordonnÃ©es de type Mercator, UTM ou Stateplane, les coordonnÃ©es gÃ©ographiques ne reprÃ©sentent pas une distance linÃ©aire depuis une origine, tel que dans un plan. Elles dÃ©crivent la distance angulaire entre l'Ã©quateur et les pÃŽles. Dans les sytÃšmes de coordonnÃ©es sphÃ©riques, un point est spÃ©cifiÃ© par son rayon (distance Ã  l'origine), son angle de rotation par rapport au mÃ©ridien plan, et son angle par rapport Ã  l'axe pÃŽlaire.
 
 .. image:: ./geography/cartesian_spherical.jpg
 
 
-Vous pouvez continuer Ã  utiliser des coordonnÃ©es gÃ©ographiques comme des coordonnÃ©es cartÃ©siennes approximatives pour vos analyses spatiales. Par contre les mesures de distances, d'aires et de longueur seront Ã©ronÃ©es. Etant donnÃ© que les coordonnÃ©es spÃ©riques mesurent des angles, l'unitÃ© est le dÃ©grÃ©. Par exemple, les rÃ©sultats cartÃ©sien approximatifs de tests tels que 'intersects' et 'contains' peuvent s'avÃ©rer terriblement faux. Par ailleurs, plus une zone est situÃ©e prÃšs du pÃŽle ou de la ligne de date internationale, plus la distance entre les points est agrandie.  
- 
+Vous pouvez continuer Ã  utiliser des coordonnÃ©es gÃ©ographiques comme des coordonnÃ©es cartÃ©siennes approximatives pour vos analyses spatiales. Par contre les mesures de distances, d'aires et de longueurs seront erronÃ©es. Etant donnÃ© que les coordonnÃ©es sphÃ©riques mesurent des angles, l'unitÃ© est le degrÃ©. Par exemple, les rÃ©sultats cartÃ©sien approximatifs de tests tels que 'intersects' et 'contains' peuvent s'avÃ©rer terriblement faux. Par ailleurs, plus une zone est situÃ©e prÃšs du pÃŽle ou de la ligne de date internationale, plus la distance entre les points est agrandie.
+
 
 Voici par exemple les coordonnÃ©es des villes de Los Angeles et Paris.
@@ -18,6 +18,6 @@
  * Los Angeles: ``POINT(-118.4079 33.9434)``
  * Paris: ``POINT(2.3490 48.8533)``
- 
-La requÃªte suivante calcule la distance entre Los Angeles et Paris en utilisant le systÃšme cartÃ©sien standard de PostGIS :command:`ST_Distance(geometry, geometry)`.  Notez que le SRID 4326 dÃ©clare un systÃšme de rÃ©fÃ©rences spatiales gÃ©ographiques.
+
+La requÃªte suivante calcule la distance entre Los Angeles et Paris en utilisant le systÃšme cartÃ©sien standard de PostGIS :command:`ST_Distance(geometry, geometry)`.  Notez que le SRID 4326 dÃ©clare un systÃšme de rÃ©fÃ©rence spatiale gÃ©ographique.
 
 .. code-block:: sql
@@ -31,10 +31,10 @@
 
   121.898285970107
-  
-Aha! 121! Mais, que veut dire cela ? 
-
-L'unitÃ© pour SRID 4326 est le degrÃ©. Donc la rÃ©ponse signifie 121 degrÃ©s. Sur une sphÃšre, la taille d'un degrÃ© "au carrÃ©" est assez variable. Elle devient plsu petite au fur et Ã  mesure que l'on s'Ã©loigne de l'Ã©quateur. Pensez par exemple aux mÃ©ridiens sur le globe qui se ressÃšrent entre eux au niveau des pÃŽles. Donc une distance de 121 degrÃ©s ne veut rien dire !
-
-Pour calculer une distance ayant du sens, nous devons traiter les coordonnÃ©es gÃ©ographiques non pas come des coordonnÃ©es cartÃ©siennes approximatives, mais plutÃŽt comme de rÃ©elles coordonnÃ©es sphÃ©riques. Nous devons mesurer les distances entre les points comme de vrais chemins par dessus uen sphÃšre, comme une portion d'un grand cercle.
+
+Aha! 121! Mais, que veut dire cela ?
+
+L'unitÃ© pour SRID 4326 est le degrÃ©. Donc la rÃ©ponse signifie 121 degrÃ©s. Sur une sphÃšre, la taille d'un degrÃ© "au carrÃ©" est assez variable. Elle devient plus petite au fur et Ã  mesure que l'on s'Ã©loigne de l'Ã©quateur. Pensez par exemple aux mÃ©ridiens sur le globe qui se resserrent entre eux au niveau des pÃŽles. Donc une distance de 121 degrÃ©s ne veut rien dire !
+
+Pour calculer une distance ayant du sens, nous devons traiter les coordonnÃ©es gÃ©ographiques non pas comme des coordonnÃ©es cartÃ©siennes approximatives, mais plutÃŽt comme de rÃ©elles coordonnÃ©es sphÃ©riques. Nous devons mesurer les distances entre les points comme de vrais chemins par dessus une sphÃšre, comme une portion d'un grand cercle.
 
 Depuis sa version 1.5, PostGIS fournit cette fonctionnalitÃ© avec le type ``geography``.
@@ -43,11 +43,11 @@
 
   DiffÃ©rentes bases de donnÃ©es spatiales dÃ©veloppent diffÃ©rentes approches pour manipuler les coordonnÃ©es gÃ©ographiques.
-  
-  * Oracle essaye de mettre Ã  jour la diffÃ©rence de maniÃšre transparente en lanacant des calculs lorsuqe le SRID est gÃ©ographique.
-  * SQL Server utilise deux types spatiaux, "STGeometry" pour les coordonnÃ©es cartÃ©siens et STGeography" pour les coordonnÃ©es gÃ©ographqiues. 
-  * Informix Spatial est une pure extension cartÃ©sienne d'Informix, alors qu'Informix Geodetic est une pure extension gÃ©ographique. 
+
+  * Oracle essaye de mettre Ã  jour la diffÃ©rence de maniÃšre transparente en lanÃ§ant des calculs lorsque le SRID est gÃ©ographique.
+  * SQL Server utilise deux types spatiaux, "STGeometry" pour les coordonnÃ©es cartÃ©siens et STGeography" pour les coordonnÃ©es gÃ©ographqiues.
+  * Informix Spatial est une pure extension cartÃ©sienne d'Informix, alors qu'Informix Geodetic est une pure extension gÃ©ographique.
   * Comme SQL Server, PostGIS utilise deux types: "geometry" et "geography".
-  
-En utilisant le type ``geography`` plutot que ``geometry``, essayon sÃ  nouveau de mesurer la distance entre Los Angeles et Paris. Au lieu de la commande :command:`ST_GeometryFromText(text)`, nous utiliserons cette fois :command:`ST_GeographyFromText(text)`.
+
+En utilisant le type ``geography`` plutot que ``geometry``, essayons sÃ  nouveau de mesurer la distance entre Los Angeles et Paris. Au lieu de la commande :command:`ST_GeometryFromText(text)`, nous utiliserons cette fois :command:`ST_GeographyFromText(text)`.
 
 .. code-block:: sql
@@ -66,9 +66,9 @@
 Les versions plus anciennes de PostGIS supportaient uniquement des calculs sur sphÃšre trÃšs basiques comme la fonction :command:`ST_Distance_Spheroid(point, point, measurement)`. Celle-ci est trÃšs limitÃ©e et ne fonctionne uniquement sur des  points. Elle ne supporte pas non plus l'indexation au niveau des pÃŽles ou de la ligne de date internationale.
 
-Le besoin du support des autres types de gÃ©omÃ©tries se fit ressentir lorsqu'il s'agissait de rÃ©pondre Ã  des questions du type  "A quelle distance la ligne de vol d'un avion Los Angeles/Paris passe-t-elle de l'Islande?" 
+Le besoin du support des autres types de gÃ©omÃ©tries se fit ressentir lorsqu'il s'agissait de rÃ©pondre Ã  des questions du type  "A quelle distance la ligne de vol d'un avion Los Angeles/Paris passe-t-elle de l'Islande?"
 
 .. image:: ./geography/lax_cdg.jpg
 
-RÃ©pondre Ã  cette question en travaillant avec un plan cartÃ©sien fournit une trÃšs mauvaise rÃ©ponse en effet ! En utilisant la ligne rouge, nou sobtenon sune bien meilleure rÃ©ponse. Si nous convertissons notre vol LAX-CDG en une ligne et que nous calculons la distance Ã  un point en Islande, nous obtiendrons la rÃ©ponse exacte, en mÃštres. 
+RÃ©pondre Ã  cette question en travaillant avec un plan cartÃ©sien fournit une trÃšs mauvaise rÃ©ponse en effet ! En utilisant la ligne rouge, nous obtenons une bien meilleure rÃ©ponse. Si nous convertissons notre vol LAX-CDG en une ligne et que nous calculons la distance Ã  un point en Islande, nous obtiendrons la rÃ©ponse exacte, en mÃštres.
 
 .. code-block:: sql
@@ -76,5 +76,5 @@
   SELECT ST_Distance(
     ST_GeographyFromText('LINESTRING(-118.4079 33.9434, 2.5559 49.0083)'), -- LAX-CDG
-    ST_GeographyFromText('POINT(-21.8628 64.1286)')                        -- Iceland  
+    ST_GeographyFromText('POINT(-21.8628 64.1286)')                        -- Iceland
   );
 
@@ -82,8 +82,8 @@
 
   531773.757079116
-  
-Donc le point le plu sproche de l'Islande pendant le vol LAX-CDG est de 532 kilomÃštres.S
-
-L'approche cartÃ©sienne pour manipuler les coordonnÃ©es gÃ©ographiques pert tout son sens pour les objets situÃ©es au dessus de la ligne de date internationale. La route "sphÃ©rique" la plus courte entre Los-Angeles et Tokyo traverse l'ocÃ©an Pacifique. La route "cartÃ©sienne" la plus courte traverse quant Ã  elle les ocÃ©ans Atlantique et Indien.  
+
+Donc le point le plus proche de l'Islande pendant le vol LAX-CDG est de 532 kilomÃštres.
+
+L'approche cartÃ©sienne pour manipuler les coordonnÃ©es gÃ©ographiques perd tout son sens pour les objets situÃ©s au dessus de la ligne de date internationale. La route "sphÃ©rique" la plus courte entre Los-Angeles et Tokyo traverse l'ocÃ©an Pacifique. La route "cartÃ©sienne" la plus courte traverse quant Ã  elle les ocÃ©ans Atlantique et Indien.
 
 .. image:: ./geography/lax_nrt.png
@@ -94,13 +94,13 @@
      ST_GeometryFromText('Point(-118.4079 33.9434)'),  -- LAX
      ST_GeometryFromText('Point(139.733 35.567)'))     -- NRT (Tokyo/Narita)
-       AS geometry_distance, 
+       AS geometry_distance,
    ST_Distance(
      ST_GeographyFromText('Point(-118.4079 33.9434)'), -- LAX
-     ST_GeographyFromText('Point(139.733 35.567)'))    -- NRT (Tokyo/Narita) 
-       AS geography_distance; 
-    
-::
-
-   geometry_distance | geography_distance 
+     ST_GeographyFromText('Point(139.733 35.567)'))    -- NRT (Tokyo/Narita)
+       AS geography_distance;
+
+::
+
+   geometry_distance | geography_distance
   -------------------+--------------------
     258.146005837336 |   8833954.76996256
@@ -110,26 +110,26 @@
 ----------------------------
 
-Afin d'importer des donnÃ©es dans une table de type geography, les objets gÃ©ographiques doivent d'avord Ãªtre projetÃ©es dans le systÃšme EPSG:4326 (longitude/latitude), ensuite elles doivent Ãªtre converties en objets de type gÃ©ographies. La fonction :command:`ST_Transform(geometry,srid)` convertie les coordonnÃ©es en gÃ©ographies et la fonction :command:`Geography(geometry)` change le type ("cast") de gÃ©omÃ©trie Ã  gÃ©ographie.
+Afin d'importer des donnÃ©es dans une table de type ``geography``, les objets gÃ©ographiques doivent d'abord Ãªtre projetÃ©s dans le systÃšme EPSG:4326 (longitude/latitude), ensuite ils doivent Ãªtre convertis en objets de type ``geography``. La fonction :command:`ST_Transform(geometry,srid)` convertit les coordonnÃ©es en ``geography`` et la fonction :command:`Geography(geometry)` change le type ("cast") de gÃ©omÃ©trie Ã  gÃ©ographie.
 
 .. code-block:: sql
 
   CREATE TABLE nyc_subway_stations_geog AS
-  SELECT 
-    Geography(ST_Transform(the_geom,4326)) AS geog, 
-    name, 
+  SELECT
+    Geography(ST_Transform(the_geom,4326)) AS geog,
+    name,
     routes
   FROM nyc_subway_stations;
-   
-La construction d'une indexation spatiale sur une table stockant des objets de type gÃ©ographie est exactement identique Ã  la mÃ©thode employÃ©e pour les gÃ©omÃ©tries :   
-
-.. code-block:: sql
-
-  CREATE INDEX nyc_subway_stations_geog_gix 
+
+La construction d'une indexation spatiale sur une table stockant des objets de type ``geography`` est exactement identique Ã  la mÃ©thode employÃ©e pour les gÃ©omÃ©tries :
+
+.. code-block:: sql
+
+  CREATE INDEX nyc_subway_stations_geog_gix
   ON nyc_subway_stations_geog USING GIST (geog);
 
-La diffÃ©rence est camouflÃ© : l'indexation des objets de type gÃ©ographie gÃ©re correctement les requÃªtes qui recouvrent les pÃŽles ou traverses les fuseaux horraires, alors que les gÃ©omÃ©tries ne le supporteront pas.
-
-Il n'y a qu'un petit nombre de fonctions disponibles pour le type gÃ©ographie :  
- 
+La diffÃ©rence est camouflÃ©e : l'indexation des objets de type ``geography`` gÃšre correctement les requÃªtes qui recouvrent les pÃŽles ou traversent les fuseaux horaires, alors que les gÃ©omÃ©tries ne le supporteront pas.
+
+Il n'y a qu'un petit nombre de fonctions disponibles pour le type ``geography`` :
+
  * :command:`ST_AsText(geography)` retourne la reprÃ©sentation ``textuelle``
  * :command:`ST_GeographyFromText(text)` retourne un objet de type ``geography``
@@ -149,9 +149,9 @@
  * :command:`ST_Buffer(geography, float8)` retourne ``geography`` [#Casting_note]_
  * :command:`ST_Intersection(geography, geography)` retourne ``geography`` [#Casting_note]_
- 
-CrÃ©ation d'une table stockant des gÃ©ograhpies
+
+CrÃ©ation d'une table stockant des gÃ©ographies
 ---------------------------------------------
- 
-Le code SQL permettant la crÃ©ation d'une nouvelle table avec une colonne de type gÃ©ographie ressemble Ã  la crÃ©ation d'une table stockant des gÃ©omÃ©tries. Cependant, les objets de type gÃ©ographie permettent de spÃ©cifier directement le type d'objet gÃ©ographique Ã  la crÃ©ation de la table. Par exemple :
+
+Le code SQL permettant la crÃ©ation d'une nouvelle table avec une colonne de type ``geography`` ressemble Ã  la crÃ©ation d'une table stockant des gÃ©omÃ©tries. Cependant, les objets de type ``geography`` permettent de spÃ©cifier directement le type d'objet gÃ©ographique Ã  la crÃ©ation de la table. Par exemple :
 
 .. code-block:: sql
@@ -161,34 +161,34 @@
     geog GEOGRAPHY(Point)
   );
-  
+
   INSERT INTO airports VALUES ('LAX', 'POINT(-118.4079 33.9434)');
   INSERT INTO airports VALUES ('CDG', 'POINT(2.5559 49.0083)');
   INSERT INTO airports VALUES ('REK', 'POINT(-21.8628 64.1286)');
-  
-Lors de la dÃ©finitionn le type ``GEOGRAPHY(Point)`` spÃ©cifie que nos airoports sont des points. Les nouveau champs gÃ©ographie n'est pas rÃ©fÃ©rencÃ© dans la table ``geometry_columns``. Le stockage des mÃ©tadonnÃ©es relatives aux donnÃ©es de type gÃ©ograhpie sont stockÃ©es dans une vue appellÃ©e ``geography_columns`` qui est maintenue Ã  jour automatiquement sans avoir besoin d'utiliser des fonctions comme ``geography_columns``.
+
+Lors de la dÃ©finition le type ``GEOGRAPHY(Point)`` spÃ©cifie que nos aÃ©roports sont des points. Le nouveau champ gÃ©ographie n'est pas rÃ©fÃ©rencÃ© dans la table ``geometry_columns``. Le stockage des mÃ©tadonnÃ©es relatives aux donnÃ©es de type ``geography`` s'effectue dans une vue appelÃ©e ``geography_columns`` qui est maintenue Ã  jour automatiquement sans avoir besoin d'utiliser des fonctions comme ``geography_columns``.
 
 .. code-block:: sql
 
   SELECT * FROM geography_columns;
-  
-::
-
-           f_table_name         | f_geography_column | srid |   type   
+
+::
+
+           f_table_name         | f_geography_column | srid |   type
  -------------------------------+--------------------+------+----------
   nyc_subway_stations_geography | geog               |    0 | Geometry
   airports                      | geog               | 4326 | Point
-  
+
 .. note::
 
-  La possibilitÃ© de dÃ©finir les types et le SRID lors de la crÃ©ation de la table (requÃªte ``CREATE``), et la mise Ã  jour automatique des mÃ©tadonnÃ©es ``geometry_columns`` sont des fonctionalitÃ©s qui seront adaptÃ©es pour le type gÃ©omÃ©trie pour la version 2.0 de PostGIS.  
+  La possibilitÃ© de dÃ©finir les types et le SRID lors de la crÃ©ation de la table (requÃªte ``CREATE``), et la mise Ã  jour automatique des mÃ©tadonnÃ©es ``geometry_columns`` sont des fonctionalitÃ©s qui seront adaptÃ©es pour le type gÃ©omÃ©trie pour la version 2.0 de PostGIS.
 
 Conversion de type
 -------------------
 
-Bien que les fonctions de bases qui s'appliquent au type gÃ©ographie peuvent Ãªtre utilisÃ©es dans un grand nombre de cas d'utilisation, il est parfois nÃ©cessaire d'accÃ©der aux autres fonctions qui ne supportent que le type gÃ©omÃ©trie. Heureusement, il est possible de convertir des objets de type gÃ©omÃ©tries en des objets de types gÃ©ographies et inversement.
-
-La syntaxe habituelle de PostgreSQL pour les conversion de type  consiste Ã  ajouter Ã  la valeur la chaÃ®ne suivante ``::typename``. Donc, ``2::text`` convertie la valeur numÃ©rique deux en une chaÃ®ne de caractÃšres '2'. La commande : ``'POINT(0 0)'::geometry`` convertira la reprÃ©sentation textuelle d'un point en une point gÃ©omÃ©trique.
-
-La fonction :command:`ST_X(point)` supporte seulement le type gÃ©omÃ©trique. Comment lire la coordonÃ©e X d'une de nos gÃ©ographie ?
+Bien que les fonctions de base qui s'appliquent au type ``geography`` puissent Ãªtre utilisÃ©es dans un grand nombre de cas d'utilisation, il est parfois nÃ©cessaire d'accÃ©der aux autres fonctions qui ne supportent que le type gÃ©omÃ©trie. Heureusement, il est possible de convertir des objets de type gÃ©omÃ©trie en des objets de types gÃ©ographie et inversement.
+
+La syntaxe habituelle de PostgreSQL pour les conversion de type  consiste Ã  ajouter Ã  la valeur la chaÃ®ne suivante ``::typename``. Donc, ``2::text`` convertit la valeur numÃ©rique deux en une chaÃ®ne de caractÃšres '2'. La commande : ``'POINT(0 0)'::geometry`` convertira la reprÃ©sentation textuelle d'un point en une point gÃ©omÃ©trique.
+
+La fonction :command:`ST_X(point)` supporte seulement le type gÃ©omÃ©trique. Comment lire la coordonnÃ©e X d'une de nos gÃ©ographie ?
 
 .. code-block:: sql
@@ -198,43 +198,43 @@
 ::
 
-  code | longitude 
+  code | longitude
  ------+-----------
-  LAX  | -118.4079 
+  LAX  | -118.4079
   CDG  |    2.5559
   REK  |  -21.8628
 
-En ajoutant la chaÃ®ne ``::geometry`` Ã  notre valeur gÃ©ographique, nous la convertissons en une gÃ©ographie ayant le SRID : 4326. Ã partir de maintenant, nous pouvons utiliser autemps de fonctions s'appliquant au gÃ©omÃ©tries que nous le souhaitons. Mais, souvenez-vous - maintenant que nos objets sont des gÃ©omÃ©tries, leur coordonnÃ©es seront interprÃ©tÃ©es comme des coordonnÃ©es cartÃ©siennes, non pas sphÃ©riques.
- 
- 
+En ajoutant la chaÃ®ne ``::geometry`` Ã  notre valeur gÃ©ographique, nous la convertissons en une gÃ©ographie ayant le SRID : 4326. Ã partir de maintenant, nous pouvons utiliser autant de fonctions s'appliquant aux gÃ©omÃ©tries que nous le souhaitons. Mais, souvenez-vous - maintenant que nos objets sont des gÃ©omÃ©tries, leur coordonnÃ©es seront interprÃ©tÃ©es comme des coordonnÃ©es cartÃ©siennes, non pas sphÃ©riques.
+
+
 Pourquoi (ne pas) utiliser les gÃ©ographies
 ------------------------------------------
 
-Les gÃ©ographies ont des coordonnÃ©es universellement acceptÃ©es - chacun peut comprendre que reprÃ©sente la latitue et la longitude, mais peut de personne comprennent ce que les coordonnÃ©es UTM signifient. Pourquoi ne pas tout le temps utiliser  des gÃ©ographies ?
-
- * PremiÃšrement, comme indiquÃ© prÃ©cÃ©demment, il n'y a que quelques fonctions qui supportent ce type de donnÃ©es. Vous risquer de perdre beaucoup de temps Ã  contourner les problÃšmes liÃ©s Ã  la non-disponibilitÃ© de certaines fonctions.
- * DeuxiÃšmement, les calculs sur une sphÃšre sont plus consomateurs en ressource que les mÃªmes calculs dans un systÃšme cartÃ©sien. Par exemple, la formule de calcul de distance (Pythagore) entraine un seul appÃšle Ã  la fonction racine carrÃ© (sqrt()). La formule de calcul de distance sphÃ©rique (Haversine) utilise deux appÃšle Ã  la fonction racine carrÃ©, et un appÃšle Ã  arctan(), quatre appÃšle Ã  sin() et deux Ã  cos(). Les fonctions trigonomÃ©triques sont trÃšs couteuses, et les calculs sphÃ©riques les utilisent massivement.
- 
-Quel conclusion en tirer ? 
-
-Si vos donnÃ©es sont gÃ©ograhpiquement compact (contenu Ã  l'intÃ©rieur d'un Ã©tat, d'un pays ou d'une ville), utilisez le type ``geometry`` avec une projection cartÃ©sienne qui est pertinent pour votre localisation. Consultez le site http://spatialreference.org et tapez le nom de votre rÃ©gion pour visualiser la liste des systÃšme de projection applicables dans votre cas.
-
-Si, d'un autre cotÃ©, vous avez besoin de calculer des distances qui est gÃ©ographiquement Ã©parse (recouvrant la plupart du monde), utiliser le type ``geography``. La complÃ©xitÃ© de l'application que vous Ã©viterait en travaillant avec des objets de type ``geography`` dÃ©passera les problÃšmes de performances. La conversion de type  en gÃ©omÃ©trie permettra de dÃ©passer les limites des fonctionnalitÃ©s proposÃ© pour ce type.
+Les gÃ©ographies ont des coordonnÃ©es universellement acceptÃ©es - chacun peut comprendre que reprÃ©sente la latitude et la longitude, mais peu de personne comprennent ce que les coordonnÃ©es UTM signifient. Pourquoi ne pas tout le temps utiliser des gÃ©ographies ?
+
+ * PremiÃšrement, comme indiquÃ© prÃ©cÃ©demment, il n'y a que quelques fonctions qui supportent ce type de donnÃ©es. Vous risquez de perdre beaucoup de temps Ã  contourner les problÃšmes liÃ©s Ã  la non-disponibilitÃ© de certaines fonctions.
+ * DeuxiÃšmement, les calculs sur une sphÃšre sont plus consomateurs en ressource que les mÃªmes calculs dans un systÃšme cartÃ©sien. Par exemple, la formule de calcul de distance (Pythagore) entraÃ®ne un seul appel Ã  la fonction racine carrÃ© (sqrt()). La formule de calcul de distance sphÃ©rique (Haversine) utilise deux appels Ã  la fonction racine carrÃ©, et un appel Ã  arctan(), quatre appels Ã  sin() et deux Ã  cos(). Les fonctions trigonomÃ©triques sont trÃšs coÃ»teuses, et les calculs sphÃ©riques les utilisent massivement.
+
+Quel conclusion en tirer ?
+
+Si vos donnÃ©es sont gÃ©ographiquement compactes (contenu Ã  l'intÃ©rieur d'un Ã©tat, d'un pays ou d'une ville), utilisez le type ``geometry`` avec une projection cartÃ©sienne qui est pertinente pour votre localisation. Consultez le site http://spatialreference.org et tapez le nom de votre rÃ©gion pour visualiser la liste des systÃšmes de projection applicables dans votre cas.
+
+Si, d'un autre cotÃ©, vous avez besoin de calculer des distances qui sont gÃ©ographiquement Ã©parses (recouvrant la plupart du monde), utilisez le type ``geography``. La complexitÃ© de l'application Ã©vitÃ©e en travaillant avec des objets de type ``geography`` dÃ©passera les problÃšmes de performances. La conversion de type en gÃ©omÃ©trie permettra de dÃ©passer les limites des fonctionnalitÃ©s proposÃ©es pour ce type.
 
 Liste des fonctions
 -------------------
 
-`ST_Distance(geometry, geometry) <http://postgis.org/docs/ST_Distance.html>`_: Pour le type gÃ©omÃ©trie, renvoit la distance cartÃ©sienne, pour les gÃ©ographies la distance sphÃ©rique en mÃ©tres.
+`ST_Distance(geometry, geometry) <http://postgis.org/docs/ST_Distance.html>`_: Pour le type gÃ©omÃ©trie, renvoie la distance cartÃ©sienne, pour les gÃ©ographies la distance sphÃ©rique en mÃštres.
 
 `ST_GeographyFromText(text) <http://postgis.org/docs/ST_GeographyFromText.html>`_: Retourne la valeur gÃ©ographique Ã  partir d'une reprÃ©sentation en WKT ou EWKT.
 
-`ST_Transform(geometry, srid) <http://postgis.org/docs/ST_Transform.html>`_: Retourne une nouvelle gÃ©omÃ©trie avec ses coordonnÃ©es reprojetÃ©es dans le systÃšme de rÃ©fÃ©rence spatial rÃ©fÃ©rencÃ© par le SRID fournit.
+`ST_Transform(geometry, srid) <http://postgis.org/docs/ST_Transform.html>`_: Retourne une nouvelle gÃ©omÃ©trie avec ses coordonnÃ©es reprojetÃ©es dans le systÃšme de rÃ©fÃ©rence spatial rÃ©fÃ©rencÃ© par le SRID fourni.
 
 `ST_X(point) <http://postgis.org/docs/ST_X.html>`_: Retourne la coordonnÃ©e X d'un point, ou NULL si non disponible. La valeur passÃ©e doit Ãªtre un point.
 
 
-.. rubric:: Footnotes
-
-.. [#Casting_note] Les fonctions buffer et intersection sont actuellement construite sur le principe de conversion de type en gÃ©omÃ©tries, et ne sont pas actuellement capable de gÃ©rer des coordonnÃ©es sphariques. Il en rÃ©sulte qu'elles peuvent ne pas parvenir Ã  retourner un rÃ©sultat correcte pour des objets ayant une grande Ã©tendue qui ne peut Ãªtre reprÃ©sentÃ© correctement avec une reprÃ©sentation planaire.
- 
-   Par exemple, la fonction :command:`ST_Buffer(geography,distance)`  transforme les objets gÃ©ographiques dans la "meilleure" projection, crÃ©e la zone tampon, puis les transforme Ã  nouveau en des gÃ©ographies. S'il n'y a pas de "meilleure" projection (l'objet est trop vaste), l'opÃ©ration peut ne pas rÃ©ussir Ã  retourner une valeur correct ou retourner une one tampon mal formÃ©e.
-
+.. rubric:: Notes de bas de page
+
+.. [#Casting_note] Les fonctions buffer et intersection sont actuellement construites sur le principe de conversion de type en gÃ©omÃ©tries, et ne sont pas actuellement capable de gÃ©rer des coordonnÃ©es sphÃ©riques. Il en rÃ©sulte qu'elles peuvent ne pas parvenir Ã  retourner un rÃ©sultat correcte pour des objets ayant une grande Ã©tendue qui ne peut Ãªtre reprÃ©sentÃ© correctement avec une reprÃ©sentation planaire.
+
+   Par exemple, la fonction :command:`ST_Buffer(geography,distance)`  transforme les objets gÃ©ographiques dans la "meilleure" projection, crÃ©e la zone tampon, puis les transforme Ã  nouveau en des gÃ©ographies. S'il n'y a pas de "meilleure" projection (l'objet est trop vaste), l'opÃ©ration peut ne pas rÃ©ussir Ã  retourner une valeur correcte ou retourner un tampon mal formÃ©.
+
Index: trunk/workshop-foss4g/validity.rst
===================================================================
--- trunk/workshop-foss4g/validity.rst	(revision 61)
+++ trunk/workshop-foss4g/validity.rst	(revision 62)
@@ -4,5 +4,5 @@
 ====================
 
-Dans 90% des cas la rÃ©ponse Ã  la question "pourquoi mes requÃªtes me renvoit un message d'erreur du type 'TopologyException' error"" est : "un ou plusieurs des arguments passÃ©s sont invalides". Ce qui nous conduit Ã  nous demander : que signifie invalide et pourquoi est-ce important ?
+Dans 90% des cas la rÃ©ponse Ã  la question "pourquoi mes requÃªtes me renvoient un message d'erreur du type 'TopologyException' error"" est : "un ou plusieurs des arguments passÃ©s sont invalides". Ce qui nous conduit Ã  nous demander : que signifie invalide et pourquoi est-ce important ?
 
 Qu'est-ce que la validitÃ© ?
@@ -13,12 +13,12 @@
 Certaines des rÃšgles de validation des polygones semble Ã©videntes, et d'autre semblent arbitraires (et le sont vraiment).
 
- * Les contours des Polygon doivent Ãªtre fermÃ©s.
- * Les contours qui dÃ©finissent des trous doivent Ãªtre inclus dans la zone dÃ©finit par le coutour extÃ©rieur.
+ * Les contours des polygones doivent Ãªtre fermÃ©s.
+ * Les contours qui dÃ©finissent des trous doivent Ãªtre inclus dans la zone dÃ©finie par le contour extÃ©rieur.
  * Les contours ne doivent pas s'intersecter (ils ne doivent ni se croiser ni se toucher).
  * Les contours ne doivent pas toucher les autres contours, sauf en un point unique.
 
-Les deux derniÃšres rÃšgles font partie de la catÃ©gorie arbitraires. Il y a d'autre moyen de dÃ©finir des poygones qui sont consistent mais les rÃšgles ci-dessus sont celles utilisÃ©es dans le standard :term:`OGC` :term:`SFSQL` que respecte PostGIS.
+Les deux derniÃšres rÃšgles font partie de la catÃ©gorie arbitraire. Il y a d'autres moyens de dÃ©finir des polygones qui sont consistants mais les rÃšgles ci-dessus sont celles utilisÃ©es dans le standard :term:`OGC` :term:`SFSQL` que respecte PostGIS.
 
-La raison pour laquelle ces rÃšgles sont importants est que les algorythmes de calcul dÃ©pendent de cette structuration consistante des arguments. Il est possible de construire des algorythmes qui n'utilise pas cette structuration, mais ces fonctions tendents Ã  Ãªtre trÃšs lentes, Ã©tant donnÃ© que la premiÃšre Ã©tape consistera Ã  "analyser et construire  des strcuture Ã  l'intÃ©rieur des donnÃ©es".
+La raison pour laquelle ces rÃšgles sont importantes est que les algorithmes de calcul dÃ©pendent de cette structuration consistante des arguments. Il est possible de construire des algorithmes qui n'utilisent pas cette structuration, mais ces fonctions tendent Ã  Ãªtre trÃšs lentes, Ã©tant donnÃ© que la premiÃšre Ã©tape consiste Ã  "analyser et construire  des structures Ã  l'intÃ©rieur des donnÃ©es".
 
 Voici un exemple de pourquoi cette structuration est importante. Ce polygone n'est pas valide :
@@ -27,10 +27,10 @@
 
   POLYGON((0 0, 0 1, 2 1, 2 2, 1 2, 1 0, 0 0));
-  
+
 Vous pouvez comprendre ce qui n'est pas valide en regardant cette figure :
 
 .. image:: ./validity/figure_eight.png
 
-Le contour externe est exactement en forme en 8 avec une intersection au milieux. Notez que la fonction de rendu graphique est tout de mÃªme capable d'en afficher l'intÃ©rieur, don visuellement cela ressemble bien Ã  une "aire" : deux unitÃ©s quarrÃ©, donc une aire couplant ces deux unitÃ©s.
+Le contour externe est exactement en forme en 8 avec une intersection au milieu. Notez que la fonction de rendu graphique est tout de mÃªme capable d'en afficher l'intÃ©rieur, donc visuellement cela ressemble bien Ã  une "aire" : deux unitÃ©s carrÃ©, donc une aire couplant ces deux unitÃ©s.
 
 Essayons maintenant de voir ce que pense la base de donnÃ©es de notre polygone :
@@ -39,12 +39,12 @@
 
   SELECT ST_Area(ST_GeometryFromText('POLYGON((0 0, 0 1, 1 1, 2 1, 2 2, 1 2, 1 1, 1 0, 0 0))'));
-  
+
 ::
 
-    st_area 
+    st_area
    ---------
           0
 
-Que ce passe-t-il ici ? L'algorythme qui calcule l'aire suppose que les contours ne s'intersectent pas. Un contours normal devra toujours avoir une aire qui est bornÃ©e (l'intÃ©rieur) dans un sens de la ligne du contour (peu importe quelle sens, juste *un* sens). NÃ©anmoins, dans notre figure en 8, le contour externe est Ã  droite de la ligne pour un lobe et Ã  gauche pour l'autre. Cela entraine que les aire qui sont calculÃ©es pour chaque lobe annulent la prÃ©cÃ©dente (l'une vaut 1 et l'autre -1) donc le rÃ©sultat est une "aire de zÃ©ro".
+Que ce passe-t-il ici ? L'algorithme qui calcule l'aire suppose que les contours ne s'intersectent pas. Un contour normal devra toujours avoir une aire qui est bornÃ©e (l'intÃ©rieur) dans un sens de la ligne du contour (peu importe quelle sens, juste *un* sens). NÃ©anmoins, dans notre figure en 8, le contour externe est Ã  droite de la ligne pour un lobe et Ã  gauche pour l'autre. Cela entraine que les aires qui sont calculÃ©es pour chaque lobe annulent la prÃ©cÃ©dente (l'une vaut 1 et l'autre -1) donc le rÃ©sultat est une "aire de zÃ©ro".
 
 
@@ -52,5 +52,5 @@
 --------------------
 
-Dans l'exemple prÃ©cÃ©dent nous avions un polygone que nous **savions** non-valide. Comment dÃ©terminer les gÃ©omÃ©tries non valides dans une tables d'un million d'enregistrements ? Avec la fonction :command:`ST_IsValid(geometry)`. UtilisÃ© avec notre polygone prÃ©cÃ©dent, nous abtenons rapidement la rÃ©ponse :
+Dans l'exemple prÃ©cÃ©dent nous avions un polygone que nous **savions** non-valide. Comment dÃ©terminer les gÃ©omÃ©tries non valides dans une tables d'un million d'enregistrements ? Avec la fonction :command:`ST_IsValid(geometry)` utilisÃ©e avec notre polygone prÃ©cÃ©dent, nous obtenons rapidement la rÃ©ponse :
 
 .. code-block:: sql
@@ -58,9 +58,9 @@
   SELECT ST_IsValid(ST_GeometryFromText('POLYGON((0 0, 0 1, 1 1, 2 1, 2 2, 1 2, 1 1, 1 0, 0 0))'));
 
-:: 
+::
 
   f
 
-Maintenant nous savons que l'entitÃ© est non-valide mais nous ne savons pas pourquoi. Nous pouvons utilier la fonction :command:`ST_IsValidReason(geometry)` pour trtouver la cause de non validitÃ© :
+Maintenant nous savons que l'entitÃ© est non-valide mais nous ne savons pas pourquoi. Nous pouvons utiliser la fonction :command:`ST_IsValidReason(geometry)` pour trouver la cause de non validitÃ© :
 
 .. code-block:: sql
@@ -74,9 +74,9 @@
 Vous remarquerez qu'en plus de la raison (intersection) la localisation de la non validitÃ© (coordonnÃ©e (1 1)) est aussi renvoyÃ©e.
 
-Nous pouvons aussi utiiliser la fonction :command:`ST_IsValid(geometry)` pour tester nos tables : 
+Nous pouvons aussi utiiliser la fonction :command:`ST_IsValid(geometry)` pour tester nos tables :
 
 .. code-block:: sql
 
-  -- Trouver tout les polygones non valides et leur problÃšme 
+  -- Trouver tous les polygones non valides et leur problÃšme
   SELECT name, boroname, ST_IsValidReason(the_geom)
   FROM nyc_neighborhoods
@@ -85,5 +85,5 @@
 ::
 
-           name           |   boroname    |                     st_isvalidreason                      
+           name           |   boroname    |                     st_isvalidreason
  -------------------------+---------------+-----------------------------------------------------------
   Howard Beach            | Queens        | Self-intersection[597264.083368305 4499924.54228856]
@@ -97,31 +97,31 @@
 ---------------------
 
-CommenÃ§ons par la mauvaise nouvelle : il n'y a aucune garantie de pouvoir corriger une gÃ©omÃ©trie non valide. Dans le pire des scÃ©narios, vous pouvez utiliser la fonction  :command:`ST_IsValid(geometry)` pour identifier les entitÃ©s non valides, les dÃ©placer dans une autre table, exporter cette table et les rÃ©parer Ã  l'aide d'un outils extÃ©rieur.
+CommenÃ§ons par la mauvaise nouvelle : il n'y a aucune garantie de pouvoir corriger une gÃ©omÃ©trie non valide. Dans le pire des scÃ©narios, vous pouvez utiliser la fonction  :command:`ST_IsValid(geometry)` pour identifier les entitÃ©s non valides, les dÃ©placer dans une autre table, exporter cette table et les rÃ©parer Ã  l'aide d'un outil extÃ©rieur.
 
-Voici un exemple de requÃªte SQL qui dÃ©placent les gÃ©omÃ©tries non valides hors de la table principale dans une table Ã  part pour les exporter vers un programme de rÃ©paration.
+Voici un exemple de requÃªte SQL qui dÃ©place les gÃ©omÃ©tries non valides hors de la table principale dans une table Ã  part pour les exporter vers un programme de rÃ©paration.
 
 .. code-block:: sql
 
-  -- Table Ã  part des gÃ©omÃ©tries non-valide
+  -- Table Ã  part des gÃ©omÃ©tries non-valides
   CREATE TABLE nyc_neighborhoods_invalid AS
   SELECT * FROM nyc_neighborhoods
   WHERE NOT ST_IsValid(the_geom);
-  
+
   -- Suppression de la table principale
   DELETE FROM nyc_neighborhoods
   WHERE NOT ST_IsValid(the_geom);
-  
-Un bon outils pour rÃ©parer visuellemen des gÃ©omÃ©tries non valide est OpenJump (http://openjump.org) qui contient un outils de validation depuis le menu **Tools->QA->Validate Selected Layers**.
 
-Maintenant, la bonne nouvelle : un grand nombre de non-validitÃ©s **peuvent Ãªtre rÃ©solues dans la base de donnÃ©es** en utilisant la fonction : :command:`ST_Buffer`.
+Un bon outil pour rÃ©parer visuellement des gÃ©omÃ©tries non valide est OpenJump (http://openjump.org) qui contient un outils de validation depuis le menu **Tools->QA->Validate Selected Layers**.
 
-Le coup du Buffer tire avantafe de la maniÃšre dont les buffers sont construit : une gÃ©omÃ©trie bufferisÃ©e est une nouvelle gÃ©omÃ©trie, construite en dÃ©plaÃ§ant les lignes de la gÃ©omÃ©trie d'origine. Si vous dÃ©placez les lignes originales par *rien* (zero) alors la nouvelle gÃ©omÃ©trie aura une structure identique Ã  l'originale, mais puisqu'elle utilise les rÃšgles topologiques de l':term:`OGC, elle sera valide.
+Maintenant, la bonne nouvelle : un grand nombre de non-validitÃ©s **peut Ãªtre rÃ©solu dans la base de donnÃ©es** en utilisant la fonction : :command:`ST_Buffer`.
+
+Le coup du Buffer tire avantage de la maniÃšre dont les buffers sont construits : une gÃ©omÃ©trie bufferisÃ©e est une nouvelle gÃ©omÃ©trie, construite en dÃ©plaÃ§ant les lignes de la gÃ©omÃ©trie d'origine. Si vous dÃ©placez les lignes originales par *rien* (zero) alors la nouvelle gÃ©omÃ©trie aura une structure identique Ã  l'originale, mais puisqu'elle utilise les rÃšgles topologiques de l':term:`OGC`, elle sera valide.
 
 Par exemple, voici un cas classique de non-validitÃ© - le "polygone de la banane" - un seul contour que crÃ©e une zone mais se touche, laissant un "trou" qui n'en est pas un.
 
-:: 
+::
 
   POLYGON((0 0, 2 0, 1 1, 2 2, 3 1, 2 0, 4 0, 4 4, 0 4, 0 0))
-  
+
 .. image:: ./validity/banana.png
 
@@ -143,4 +143,4 @@
 .. note::
 
-  Le "polygone banane" (ou "coquillage inversÃ©") est un cas oÃ¹ le modÃšle topologique de l':term:`OGC` et de ESRI diffÃšrent. Le model ESRI considÃšre que les contours que se touchent sont non valides et prÃ©fÃšre la forme de banane pour ce cas de figure. Le modÃšle de l'OGC est l'inverse.
-  
+  Le "polygone banane" (ou "coquillage inversÃ©") est un cas oÃ¹ le modÃšle topologique de l':term:`OGC` et de ESRI diffÃšrent. Le modÃšle ESRI considÃšre que les contours qui se touchent sont non valides et prÃ©fÃšre la forme de banane pour ce cas de figure. Le modÃšle de l'OGC est l'inverse.
+
Index: trunk/workshop-foss4g/projection_exercises.rst
===================================================================
--- trunk/workshop-foss4g/projection_exercises.rst	(revision 61)
+++ trunk/workshop-foss4g/projection_exercises.rst	(revision 62)
@@ -5,14 +5,14 @@
 
 Voici un rappel de certaines fonctions que nous avons vu. Elles seront utiles pour les exercices !
-     
+
 * :command:`sum(expression)` agrÃ©gation qui retourne la somme d'un ensemble de valeurs
 * :command:`ST_Length(linestring)` retourne la longueur d'une ligne
 * :command:`ST_SRID(geometry, srid)` retourne le SRID d'une gÃ©omÃ©trie
-* :command:`ST_Transform(geometry, srid)` reprojette des gÃ©omÃ©tries dans un autre systÃšme de rÃ©fÃ©rences spatiales
+* :command:`ST_Transform(geometry, srid)` reprojette des gÃ©omÃ©tries dans un autre systÃšme de rÃ©fÃ©rence spatiale
 * :command:`ST_GeomFromText(text)` retourne un objet ``geometry``
-* :command:`ST_AsText(geometry)` retourne le WKT (``text``)
-* :command:`ST_AsGML(geometry)` retourne le GML (``text``)
+* :command:`ST_AsText(geometry)` retourne un WKT (``texte``)
+* :command:`ST_AsGML(geometry)` retourne un GML (``texte``)
 
-Rappelez-vous les resssources en ligne :
+Rappelez-vous les ressources en ligne :
 
 * http://spatialreference.org
@@ -21,18 +21,18 @@
 Et les tables disponibles :
 
- * ``nyc_census_blocks`` 
- 
+ * ``nyc_census_blocks``
+
    * name, popn_total, boroname, the_geom
- 
+
  * ``nyc_streets``
- 
+
    * name, type, the_geom
-   
+
  * ``nyc_subway_stations``
- 
+
    * name, the_geom
- 
+
  * ``nyc_neighborhoods``
- 
+
    * name, boroname, the_geom
 
@@ -41,5 +41,5 @@
 
  * **"Quelle est la longueur des rue de New York, mesurÃ©e en UTM 18 ?"**
- 
+
    .. code-block:: sql
 
@@ -47,10 +47,10 @@
        FROM nyc_streets;
 
-   :: 
-   
+   ::
+
      10418904.7172
-      
- * **"Quelle est la dÃ©finition du SRID 2831 ?"**   
-    
+
+ * **"Quelle est la dÃ©finition du SRID 2831 ?"**
+
    .. code-block:: sql
 
@@ -62,31 +62,31 @@
  ::
 
-  PROJCS["NAD83(HARN) / New York Long Island", 
-  GEOGCS["NAD83(HARN)", 
-    DATUM["NAD83 (High Accuracy Regional Network)", 
-      SPHEROID["GRS 1980", 6378137.0, 298.257222101, AUTHORITY["EPSG","7019"]], 
-      TOWGS84[-0.991, 1.9072, 0.5129, 0.0257899075194932, -0.009650098960270402, -0.011659943232342112, 0.0], 
-      AUTHORITY["EPSG","6152"]], 
-    PRIMEM["Greenwich", 0.0, AUTHORITY["EPSG","8901"]], 
-    UNIT["degree", 0.017453292519943295], 
-    AXIS["Geodetic longitude", EAST], 
-    AXIS["Geodetic latitude", NORTH], 
-    AUTHORITY["EPSG","4152"]], 
-  PROJECTION["Lambert Conic Conformal (2SP)", AUTHORITY["EPSG","9802"]], 
-  PARAMETER["central_meridian", -74.0], 
-  PARAMETER["latitude_of_origin", 40.166666666666664], 
-  PARAMETER["standard_parallel_1", 41.03333333333333], 
-  PARAMETER["false_easting", 300000.0], 
-  PARAMETER["false_northing", 0.0], 
-  PARAMETER["scale_factor", 1.0], 
-  PARAMETER["standard_parallel_2", 40.666666666666664], 
-  UNIT["m", 1.0], 
-  AXIS["Easting", EAST], 
-  AXIS["Northing", NORTH], 
+  PROJCS["NAD83(HARN) / New York Long Island",
+  GEOGCS["NAD83(HARN)",
+    DATUM["NAD83 (High Accuracy Regional Network)",
+      SPHEROID["GRS 1980", 6378137.0, 298.257222101, AUTHORITY["EPSG","7019"]],
+      TOWGS84[-0.991, 1.9072, 0.5129, 0.0257899075194932, -0.009650098960270402, -0.011659943232342112, 0.0],
+      AUTHORITY["EPSG","6152"]],
+    PRIMEM["Greenwich", 0.0, AUTHORITY["EPSG","8901"]],
+    UNIT["degree", 0.017453292519943295],
+    AXIS["Geodetic longitude", EAST],
+    AXIS["Geodetic latitude", NORTH],
+    AUTHORITY["EPSG","4152"]],
+  PROJECTION["Lambert Conic Conformal (2SP)", AUTHORITY["EPSG","9802"]],
+  PARAMETER["central_meridian", -74.0],
+  PARAMETER["latitude_of_origin", 40.166666666666664],
+  PARAMETER["standard_parallel_1", 41.03333333333333],
+  PARAMETER["false_easting", 300000.0],
+  PARAMETER["false_northing", 0.0],
+  PARAMETER["scale_factor", 1.0],
+  PARAMETER["standard_parallel_2", 40.666666666666664],
+  UNIT["m", 1.0],
+  AXIS["Easting", EAST],
+  AXIS["Northing", NORTH],
   AUTHORITY["EPSG","2831"]]
-  
 
- * **"Quelle est la longueur des rue de New York, mesurÃ© en utilisant le SRID 2831 ?"**
- 
+
+ * **"Quelle est la longueur des rues de New York, mesurÃ©e en utilisant le SRID 2831 ?"**
+
    .. code-block:: sql
 
@@ -94,23 +94,24 @@
        FROM nyc_streets;
 
-   :: 
-   
+   ::
+
      10421993.706374
-     
+
    .. note::
-   
-     La diffÃ©rence entre les mesure en UTM 18 et en Stateplane Long Island est de (10421993 - 10418904)/10418904, soit 0.02%. CalculÃ© sur la sphÃ©roÃ¯de en utilissant en :ref:`geography`, le total des longueurs des route est 10421999, ce qui est proche de la valeur dans l'autre systÃšme de projection (Stateplane Long Island). Ce dernier est prÃ©cisÃ©ment calibrÃ© pour une petite zone gÃ©ographique (la ville de New York) alors que le systÃšme UTM 18 doit fournir un rÃ©sultat raisonable pour une zone rÃ©gionale beaucoup plus large.
-     
+
+     La diffÃ©rence entre les mesure en UTM 18 et en Stateplane Long Island est de (10421993 - 10418904)/10418904, soit 0.02%. CalculÃ© sur la sphÃ©roÃ¯de en utilissant en :ref:`geography`, le total des longueurs des routes est 10421999, ce qui est proche de la valeur dans l'autre systÃšme de projection (Stateplane Long Island). Ce dernier est prÃ©cisÃ©ment calibrÃ© pour une petite zone gÃ©ographique (la ville de New York) alors que le systÃšme UTM 18 doit fournir un rÃ©sultat raisonnable pour une zone rÃ©gionale beaucoup plus large.
+
  * **"Quelle est la reprÃ©sentation KML du point de la station de mÃ©tris 'Broad St' ?"**
- 
+
    .. code-block:: sql
-   
-     SELECT ST_AsKML(the_geom) 
+
+     SELECT ST_AsKML(the_geom)
      FROM nyc_subway_stations
      WHERE name = 'Broad St';
-     
-   :: 
-   
+
+   ::
+
      <Point><coordinates>-74.010671468873468,40.707104815584088</coordinates></Point>
-     
+
 HÃ© ! les coordonnÃ©es sont gÃ©ographiques bien que nous n'ayons pas fait appel Ã  la fonction  :command:`ST_Transform`, mais pourquoi ? Parce que le standard KML spÃ©cifie que toutes les coordonnÃ©es *doivent* Ãªtre gÃ©ographiques (en fait, dans le systÃšme EPSG:4326), donc la fonction :command:`ST_AsKML` rÃ©alise la transformation automatiquement.
+
Index: trunk/workshop-foss4g/geometry_returning.rst
===================================================================
--- trunk/workshop-foss4g/geometry_returning.rst	(revision 61)
+++ trunk/workshop-foss4g/geometry_returning.rst	(revision 62)
@@ -4,8 +4,8 @@
 ====================================================
 
-Toute les fonctions que nous avons vu jusqu'Ã  prÃ©sent traitent les gÃ©omÃ©tries "comme elles sont" et retournent: 
- 
-* une analyse des objets (:command:`ST_Length(geometry)`, :command:`ST_Area(geometry)`), 
-* une sÃ©rialisation des objets (:command:`ST_AsText(geometry)`, :command:`ST_AsGML(geometry)`), 
+Toute les fonctions que nous avons vu jusqu'Ã  prÃ©sent traitent les gÃ©omÃ©tries "comme elles sont" et retournent:
+
+* une analyse des objets (:command:`ST_Length(geometry)`, :command:`ST_Area(geometry)`),
+* une sÃ©rialisation des objets (:command:`ST_AsText(geometry)`, :command:`ST_AsGML(geometry)`),
 * une partie de l'objet (:command:`ST_RingN(geometry,n)`) ou
 * un rÃ©sultat vrai/faux (:command:`ST_Contains(geometry,geometry)`, :command:`ST_Intersects(geometry,geometry)`).
@@ -17,9 +17,9 @@
 -------------------------------
 
-Un besoin commun lors de la crÃ©ation de requÃªtes spatiales est de remplacer une entitÃ© polygonale par un point reprÃ©sentant cette entitÃ©. Cela esr utile pour les jointures spatiales (comme indiquÃ© ici : :ref:`polypolyjoins`) car utiliser :command:`ST_Intersects(geometry,geometry)` avec deux polygones impliquera un double comptage : un polygone pour le contour externe intersectera dans les deux senses; le replacer par un point le forcera Ã  Ãªtre dans un seul sens, pas les deux.
+Un besoin commun lors de la crÃ©ation de requÃªtes spatiales est de remplacer une entitÃ© polygonale par un point reprÃ©sentant cette entitÃ©. Cela est utile pour les jointures spatiales (comme indiquÃ© ici : :ref:`polypolyjoins`) car utiliser :command:`ST_Intersects(geometry,geometry)` avec deux polygones impliquera un double comptage : un polygone pour le contour externe intersectera dans les deux sens; le remplacer par un point le forcera Ã  Ãªtre dans un seul sens, pas les deux.
 
- * :command:`ST_Centroid(geometry)` retourne le point qui est approximativement au centre de la masse de la gÃ©omÃ©trie passÃ© en paramÃštre. C'est un calcul simle et rapide, mais parfois non proftable, car le point retournÃ© peut se trouver Ã  l'extÃ©rieur de l'entitÃ© elle-mÃªme. Si l'entitÃ© fournie est convee (imaginez la lettre 'C') le centroÃ¯de renvoyÃ© pourrait ne pas Ãªtre Ã  l'intÃ©rieur du polygone.
- * :command:`ST_PointOnSurface(geometry)` retourne un point qui est obligatoirement dans l'entitÃ© passÃ©e en paramÃštre. Cette fonction coÃ»te plus cher en ressource que le calcul du centroÃ¯d.
- 
+ * :command:`ST_Centroid(geometry)` retourne le point qui est approximativement au centre de la masse de la gÃ©omÃ©trie passÃ©e en paramÃštre. C'est un calcul simple et rapide, mais parfois non profitable, car le point retournÃ© peut se trouver Ã  l'extÃ©rieur de l'entitÃ© elle-mÃªme. Si l'entitÃ© fournie est convexe (imaginez la lettre 'C') le centroÃ¯de renvoyÃ© pourrait ne pas Ãªtre Ã  l'intÃ©rieur du polygone.
+ * :command:`ST_PointOnSurface(geometry)` retourne un point qui est obligatoirement dans l'entitÃ© passÃ©e en paramÃštre. Cette fonction coÃ»te plus cher en ressource que le calcul du centroÃ¯de.
+
 .. image:: ./geometry_returning/centroid.jpg
 
@@ -28,9 +28,9 @@
 ---------
 
-L'opÃ©ration de zone tampon est souvent disponible dans les outils SIG, il est aussi disponible dans PostGIS. La fonction :command:`ST_Buffer(geometry,distance)` prend en paramÃštre une gÃ©omÃ©trie et une distance et retourne une zone tampon dont le contour est Ã  une distance donnÃ©es de la gÃ©omÃ©trie d'origine.
+L'opÃ©ration de zone tampon est souvent disponible dans les outils SIG, il est aussi disponible dans PostGIS. La fonction :command:`ST_Buffer(geometry,distance)` prend en paramÃštre une gÃ©omÃ©trie et une distance et retourne une zone tampon dont le contour est Ã  une distance donnÃ©e de la gÃ©omÃ©trie d'origine.
 
 .. image:: ./geometry_returning/st_buffer.png
 
-Par exemple, si les services des parks amÃ©ricains souhaitaient renforcer la zone du traffique maritime autour de l'Ã®le 'Liberty', ils pourraient construire une zone tampon de 500 mÃštres autour de l'Ã®le. L'Ã®le de 'Liiberty' est reprÃ©sentÃ© par un seul bloque dans notre table ``nyc_census_blocks`, nous pouvons donc facilement rÃ©aliser ce calcul. 
+Par exemple, si les services des parcs amÃ©ricains souhaitaient renforcer la zone du traffic maritime autour de l'Ã®le 'Liberty', ils pourraient construire une zone tampon de 500 mÃštres autour de l'Ã®le. L'Ã®le de 'Liberty' est reprÃ©sentÃ©e par un seul bloc dans notre table ``nyc_census_blocks``, nous pouvons donc facilement rÃ©aliser ce calcul.
 
 .. code-block:: sql
@@ -38,14 +38,14 @@
   -- CrÃ©ation d'une nouvelle table avec une zone tampon de 500 m autour de 'Liberty Island'
   CREATE TABLE libery_island_zone AS
-  SELECT ST_Buffer(the_geom,500) AS the_geom 
-  FROM nyc_census_blocks 
+  SELECT ST_Buffer(the_geom,500) AS the_geom
+  FROM nyc_census_blocks
   WHERE blkid = '360610001009000';
 
   -- Mise Ã  jour de la table geometry_columns
-  SELECT Populate_Geometry_Columns(); 
-  
+  SELECT Populate_Geometry_Columns();
+
 .. image:: ./geometry_returning/liberty_positive.jpg
 
-La fonction :command:`ST_Buffer` permet aussi d'utiliser des valeur nÃ©gative pour le paramÃštre distance et construit un polygone inclue dans celui passÃ© en paramÃštre. Pour les points et les lignes vous obtiendrez simplement un rÃ©sultat vide.
+La fonction :command:`ST_Buffer` permet aussi d'utiliser des valeurs nÃ©gatives pour le paramÃštre distance et construit un polygone inclus dans celui passÃ© en paramÃštre. Pour les points et les lignes vous obtiendrez simplement un rÃ©sultat vide.
 
 .. image:: ./geometry_returning/liberty_negative.jpg
@@ -55,7 +55,7 @@
 ---------------
 
-Une autre opÃ©ration classique prÃ©sente dans les SIGS - le chevauchement - crÃ©e une nouvelle entitÃ© en calculant la zone correpondant Ã  l'intersection de deux polygones supperposÃ©s. Le rÃ©sultat Ã  la propriÃ©tÃ© de permettre de reconstruire les entitÃ© de base Ã  l'aide de ce rÃ©sultat.
+Une autre opÃ©ration classique prÃ©sente dans les SIG - le chevauchement - crÃ©e une nouvelle entitÃ© en calculant la zone correspondant Ã  l'intersection de deux polygones superposÃ©s. Le rÃ©sultat Ã  la propriÃ©tÃ© de permettre de reconstruire les entitÃ©s de base Ã  l'aide de ce rÃ©sultat.
 
-La fonction :command:`ST_Intersection(geometry A, geometry B)` retourne la zone gÃ©ographique (ou une ligne, ou un point) que les deux gÃ©omÃ©tries on en commun. Si les gÃ©omÃ©tries sont disjointes, la fontion retourne une gÃ©omÃ©trie vide.
+La fonction :command:`ST_Intersection(geometry A, geometry B)` retourne la zone gÃ©ographique (ou une ligne, ou un point) que les deux gÃ©omÃ©tries ont en commun. Si les gÃ©omÃ©tries sont disjointes, la fonction retourne une gÃ©omÃ©trie vide.
 
 .. code-block:: sql
@@ -63,5 +63,5 @@
   -- Quelle est l'aire que ces deux cercles ont en commun ?
   -- Utilisons la fonction ST_Buffer pour crÃ©er ces cercles !
-  
+
   SELECT ST_AsText(ST_Intersection(
     ST_Buffer('POINT(0 0)', 2),
@@ -76,32 +76,32 @@
 --------
 
-Dans l'exemple prÃ©cÃ©dent nous intersections des gÃ©omÃ©tries, crÃ©ant une nouvelle gÃ©omÃ©trie unique Ã  partir de deux entitÃ©s. La commade :command:`ST_Union` fait l'inverse, elle prend en paramÃštre des gÃ©omÃ©tries et supprime les parties communes. Il y a deux versions possibles de la fonction  :command:`ST_Union` : 
+Dans l'exemple prÃ©cÃ©dent, nous intersections des gÃ©omÃ©tries, crÃ©ant une nouvelle gÃ©omÃ©trie unique Ã  partir de deux entitÃ©s. La commande :command:`ST_Union` fait l'inverse, elle prend en paramÃštre des gÃ©omÃ©tries et supprime les parties communes. Il y a deux versions possibles de la fonction  :command:`ST_Union` :
 
- * :command:`ST_Union(geometry, geometry)`: une version avec deux paramÃštres qui prend les gÃ©omÃ©tries et rentourne l'union des deux. Par exemple, nos deux cercles ressemble Ã  ce qui suit si nous utilisons l'opÃ©ration union plutÃŽt que l'intersection.
- 
+ * :command:`ST_Union(geometry, geometry)`: une version avec deux paramÃštres qui prend les gÃ©omÃ©tries et retourne l'union des deux. Par exemple, nos deux cercles ressemblent Ã  ce qui suit si nous utilisons l'opÃ©ration union plutÃŽt que l'intersection.
+
    .. code-block:: sql
 
-     -- Quelle est l'aire totale des ces deux cercles ?
+     -- Quelle est l'aire totale de ces deux cercles ?
      -- Utilisons ST_Buffer pour crÃ©er les cercles !
- 
+
      SELECT ST_AsText(ST_Union(
        ST_Buffer('POINT(0 0)', 2),
        ST_Buffer('POINT(3 0)', 2)
      ));
-  
+
    .. image:: ./geometry_returning/union.jpg
-   
 
- * :command:`ST_Union([geometry])`: une version agrÃ©gÃ©e qui prendre un ensemble de gÃ©omÃ©tries et retourne une gÃ©omÃ©trie contenant l'ensemble des gÃ©omÃ©tries rassemblÃ©es. La fonction Ã©grÃ©gÃ©e ST_Union peut Ãªtre utilisÃ© grÃ¢ce au SQL ``GROUP BY`` our crÃ©er un ensemble rassemblant des sous-ensembles de gÃ©omÃ©tries basiques. Cela est trÃšs puissant,
 
-Par exemple la fonction d'agrÃ©gation  :command:`ST_Union`, considÃšrons notre table ``nyc_census_blocks``. 
-As an example of :command:`ST_Union` aggregation, consider our ``nyc_census_blocks`` table. Census geography is carefully constructed so that larger geographies can be built up from smaller ones. So, we can create a census tracts map by merging the blocks that form each tract (as we do later in :ref:`creatingtractstable`). Or, we can create a county map by merging blocks that fall within each county.
+ * :command:`ST_Union([geometry])`: une version agrÃ©gÃ©e qui prendre un ensemble de gÃ©omÃ©tries et retourne une gÃ©omÃ©trie contenant l'ensemble des gÃ©omÃ©tries rassemblÃ©es. La fonction agrÃ©gÃ©e ST_Union peut Ãªtre utilisÃ© grÃ¢ce au SQL ``GROUP BY`` pour crÃ©er un ensemble rassemblant des sous-ensembles de gÃ©omÃ©tries basiques. Cela est trÃšs puissant.
 
-To carry out the merge, note that the unique key ``blkid`` actually embeds information about the higher level geographies. Here are the parts of the key for Liberty Island we used earlier:
+Comme exemple pour la fonction d'agrÃ©gation  :command:`ST_Union`, considÃ©rons notre table ``nyc_census_blocks``.
+Les gÃ©ographie du recensement sont construites de maniÃšre Ã  ce qu'on puisse crÃ©er d'autres gÃ©ographies Ã  partir des premiÃšres. ainsi, nous pouvons crÃ©er une carte des secteurs de recensement en fusionnant les blocs que forme chaque secteur (comme nous le ferons aprÃšs dans :ref:`la crÃ©ation des tables secteurs<creatingtractstable>`). Ou, nous pouvons crÃ©er une carte du comtÃ© en fusionnant les blocs qui relÃšvent de chaque comtÃ©.
+
+Pour effectuer la fusion, notez que la clÃ© unique ``blkid`` incorpore des informations sur les gÃ©ographies de niveau supÃ©rieur. Voici les parties de la clÃ© pour Liberty Island que nous avons utilisÃ© prÃ©cÃ©demment.
 
 ::
 
   360610001009000 = 36 061 00100 9000
-  
+
   36     = State of New York
   061    = New York County (Manhattan)
@@ -109,33 +109,33 @@
   9      = Census Block Group
   000    = Census Block
-  
-So, we can create a county map by merging all geometries that share the same first 5 digits of their ``blkid``.
+
+Ainsi, nous pouvons crÃ©er une carte du comtÃ© en fusionnant toutes les gÃ©omÃ©tries qui partagent les 5 premiers chiffres de  ``blkid``.
 
 .. code-block:: sql
 
-  -- CrÃ©ation d'une table nyc_census_counties en regroupant les bloques
+  -- CrÃ©ation d'une table nyc_census_counties en regroupant les blocs
   CREATE TABLE nyc_census_counties AS
-  SELECT 
-    ST_Union(the_geom) AS the_geom, 
+  SELECT
+    ST_Union(the_geom) AS the_geom,
     SubStr(blkid,1,5) AS countyid
   FROM nyc_census_blocks
   GROUP BY countyid;
-  
+
   -- Mise Ã  jour de la table geometry_columns
   SELECT Populate_Geometry_Columns();
-  
+
 .. image:: ./geometry_returning/union_counties.png
 
-An area test can confirm that our union operation did not lose any geometry. First, we calculate the area of each individual census block, and sum those areas grouping by census county id.
+Un test de surface peut confirmer que notre opÃ©ration d'union n'a pas perdu de gÃ©omÃ©tries. Tout d'abord, nous calculons la surface de chacun des blocs de recensement et faisons la somme de ces surfaces en les groupant par l'identifiant de recensement des comtÃ©s.
 
 .. code-block:: sql
 
   SELECT SubStr(blkid,1,5) AS countyid, Sum(ST_Area(the_geom)) AS area
-  FROM nyc_census_blocks 
+  FROM nyc_census_blocks
   GROUP BY countyid;
 
 ::
 
-  countyid |       area       
+  countyid |       area
  ----------+------------------
   36005    | 109807439.720947
@@ -145,5 +145,5 @@
   36085    | 149806077.958252
 
-Ensuite nous calculons l'aire de chaque zone de nos nouveaux polygones de rÃ©gions de la table count :
+Ensuite nous calculons l'aire de chaque zone de nos nouveaux polygones de rÃ©gion de la table count :
 
 .. code-block:: sql
@@ -154,5 +154,5 @@
 ::
 
-  countyid |       area       
+  countyid |       area
  ----------+------------------
   36005    | 109807439.720947
@@ -167,13 +167,14 @@
 -------------------
 
-`ST_AsText(text) <http://postgis.org/docs/ST_AsText.html>`_: retourne la reprÃ©sentation Well-Known Text (WKT) de la geometry/geography sans mÃ©tadonnÃ©e SRID.
+`ST_AsText(text) <http://postgis.org/docs/ST_AsText.html>`_: retourne la reprÃ©sentation Well-Known Text (WKT) de la gÃ©omÃ©trie/gÃ©ographie sans mÃ©tadonnÃ©e SRID.
 
-`ST_Buffer(geometry, distance) <http://postgis.org/docs/ST_Buffer.html>`_: For geometry: Returns a geometry that represents all points whose distance from this Geometry is less than or equal to distance. Calculations are in the Spatial Reference System of this Geometry. For geography: Uses a planar transform wrapper. 
+`ST_Buffer(geometry, distance) <http://postgis.org/docs/ST_Buffer.html>`_: Pour les gÃ©omÃ©tries: retourne une gÃ©omÃ©trie qui reprÃ©sente tous les points dont la distance depuis cette gÃ©omÃ©trie est infÃ©rieure ou Ã©gale Ã  la distance utilisÃ©e. Les calculs se font dans le systÃšme de rÃ©fÃ©rence spatial de cette gÃ©omÃ©trie. Pour les gÃ©ographies: utilise une fonction de transformation planaire pour effectuer le calcul.
 
-`ST_Intersection(geometry A, geometry B) <http://postgis.org/docs/ST_Intersection.html>`_: Returns a geometry that represents the shared portion of geomA and geomB. The geography implementation does a transform to geometry to do the intersection and then transform back to WGS84.
+`ST_Intersection(geometry A, geometry B) <http://postgis.org/docs/ST_Intersection.html>`_: retourne une gÃ©omÃ©trie qui reprÃ©sente la portion commune des gÃ©omÃ©tries A et B. L'implÃ©mentation du type gÃ©ographie fait une transformation vers une gÃ©omÃ©trie pour faire l'intersection puis reprojette le rÃ©sultat en WGS84.
 
-`ST_Union() <http://postgis.org/docs/ST_Union.html>`_: Returns a geometry that represents the point set union of the Geometries.
+`ST_Union() <http://postgis.org/docs/ST_Union.html>`_: Renvoie un objet gÃ©omÃ©trique qui reprÃ©sente l'ensemble d'union des objets gÃ©omÃ©triques dÃ©signÃ©s.
 
-`substring(string [from int] [for int]) <http://www.postgresql.org/docs/8.1/static/functions-string.html>`_: PostgreSQL string function to extract substring matching SQL regular expression.
+`substring(string [from int] [for int]) <http://www.postgresql.org/docs/8.1/static/functions-string.html>`_: Fonction de chaÃ®ne PostgreSQL pour extraire une sous-chaÃ®ne de caractÃšres.
 
-`sum(expression) <http://www.postgresql.org/docs/8.2/static/functions-aggregate.html#FUNCTIONS-AGGREGATE-TABLE>`_: PostgreSQL aggregate function that returns the sum of records in a set of records.
+`sum(expression) <http://www.postgresql.org/docs/8.2/static/functions-aggregate.html#FUNCTIONS-AGGREGATE-TABLE>`_: Fonction d'agrÃ©gation PostgreSQL qui retourne la somme des valeurs d'une colonne dans un ensemble d'enregistrements.
+
Index: trunk/workshop-foss4g/equality.rst
===================================================================
--- trunk/workshop-foss4g/equality.rst	(revision 61)
+++ trunk/workshop-foss4g/equality.rst	(revision 62)
@@ -7,5 +7,5 @@
 --------
 
-Ãtre en mesure de dÃ©terminer si deux geomÃ©tries sont Ã©gales peut Ãªtre compliquÃ©. PostGIS met Ã  votre disposition diffÃ©rentes fonctions permettant de juger de l'Ã©galitÃ© Ã  diffÃ©rents niveaux, bien que pour des raison de simplicitÃ© nous nuos contenterons ici de la dÃ©finition fournie plus bas. Pour illustrer ces fonctions, nous utiliseront les polygones suivants.
+Ãtre en mesure de dÃ©terminer si deux geomÃ©tries sont Ã©gales peut Ãªtre compliquÃ©. PostGIS met Ã  votre disposition diffÃ©rentes fonctions permettant de juger de l'Ã©galitÃ© Ã  diffÃ©rents niveaux, bien que pour des raison de simplicitÃ© nous nous contenterons ici de la dÃ©finition fournie plus bas. Pour illustrer ces fonctions, nous utiliserons les polygones suivants.
 
 .. image:: ./equality/polygon-table.png
@@ -16,6 +16,6 @@
 
   CREATE TABLE polygons (name varchar, poly geometry);
-  
-  INSERT INTO polygons VALUES 
+
+  INSERT INTO polygons VALUES
     ('Polygon 1', 'POLYGON((-1 1.732,1 1.732,2 0,1 -1.732,
         -1 -1.732,-2 0,-1 1.732))'),
@@ -27,7 +27,7 @@
         2 0,1.5 -0.866,1 -1.732,0 -1.732,-1 -1.732,-1.5 -0.866,
         -2 0,-1.5 0.866,-1 1.732))'),
-    ('Polygon 5', 'POLYGON((-2 -1.732,2 -1.732,2 1.732, 
+    ('Polygon 5', 'POLYGON((-2 -1.732,2 -1.732,2 1.732,
         -2 1.732,-2 -1.732))');
-        
+
    SELECT Populate_Geometry_Columns();
 
@@ -35,7 +35,7 @@
 
 Exactement Ã©gaux
-^^^^^^^^^^^^^^^^^^
+^^^^^^^^^^^^^^^^
 
-L'Ã©galitÃ© exacte est dÃ©terminÃ©e en comparant deux gÃ©omÃ©tries, sommets par sommets, dans l'ordre, pour s'assurer que chacun est Ã  une position identique. Les exemples suivant montrent comment cette mÃ©thode peut Ãªtre limitÃ©e dans son Ã©fficacitÃ©.
+L'Ã©galitÃ© exacte est dÃ©terminÃ©e en comparant deux gÃ©omÃ©tries, sommets par sommets, dans l'ordre, pour s'assurer que chacun est Ã  une position identique. Les exemples suivant montrent comment cette mÃ©thode peut Ãªtre limitÃ©e dans son efficacitÃ©.
 
 .. code-block:: sql
@@ -47,14 +47,14 @@
 .. image:: ./equality/start14.png
 
-Dans cette exemple, les polygones sont seulement Ã©gaux Ã  eux-mÃªme, mais jamais avec un des autres polygones (dans notre exemple les polygones de 1 Ã  3). Dans le cas des polygones 1, 2 et 3, les sommets sont Ã  des position identiques mais sont dÃ©finies dans un ordre diffÃ©rent. Le polygone 4 a des sommets en double causant la non-Ã©galitÃ© avec le polygone 1.
+Dans cette exemple, les polygones sont seulement Ã©gaux Ã  eux-mÃªme, mais jamais avec un des autres polygones (dans notre exemple les polygones de 1 Ã  3). Dans le cas des polygones 1, 2 et 3, les sommets sont Ã  des positions identiques mais sont dÃ©finis dans un ordre diffÃ©rent. Le polygone 4 a des sommets en double causant la non-Ã©galitÃ© avec le polygone 1.
 
-Spatiallement Ã©gaux
-^^^^^^^^^^^^^^^
+Spatialement Ã©gaux
+^^^^^^^^^^^^^^^^^^
 
-Comme nous l'avons prÃ©cÃ©demment, l'Ã©galitÃ© exacte ne prend pas en compte la nature spatiale des gÃ©omÃ©tries. Il y a une fonction, nommÃ©e :command:`ST_Equals`, permettant de tester l'Ã©galitÃ© spatiale ou l'Ã©quivalent des gÃ©omÃ©tries.
+Comme nous l'avons prÃ©cÃ©demment montrÃ©, l'Ã©galitÃ© exacte ne prend pas en compte la nature spatiale des gÃ©omÃ©tries. Il y a une fonction, nommÃ©e :command:`ST_Equals`, permettant de tester l'Ã©galitÃ© spatiale ou l'Ã©quivalence des gÃ©omÃ©tries.
 
 .. code-block:: sql
 
-  SELECT a.name, b.name, CASE WHEN ST_Equals(a.poly, b.poly) 
+  SELECT a.name, b.name, CASE WHEN ST_Equals(a.poly, b.poly)
       THEN 'Spatially Equal' ELSE 'Not Equal' end
     FROM polygons as a, polygons as b;
@@ -62,14 +62,14 @@
 .. image:: ./equality/start15.png
 
-Ces rÃ©sultats sont plus proches de notre comprÃ©hension intuitive de l'Ã©galitÃ©. Les polygones de 1 Ã  4 sont cosidÃ©rÃ©s comme Ã©gaux, puisque qu'elles recouvrent la mÃªme zone. Notez que ni la direction despolygones n'est considÃ©rÃ©e, le point de dÃ©part pour la dÃ©finition du polygone, ni le nombre de points. Ce qui importe c'est que la zone gÃ©ographique reprÃ©sentÃ©e est la mÃªme.
+Ces rÃ©sultats sont plus proches de notre comprÃ©hension intuitive de l'Ã©galitÃ©. Les polygones de 1 Ã  4 sont considÃ©rÃ©s comme Ã©gaux, puisque qu'ils recouvrent la mÃªme zone. Notez que ni la direction des polygones n'est considÃ©rÃ©e, ni le point de dÃ©part pour la dÃ©finition du polygone, ni le nombre de points. Ce qui importe c'est que la zone gÃ©ographique reprÃ©sentÃ©e soit la mÃªme.
 
 ÃgalitÃ© des Ã©tendues
 ^^^^^^^^^^^^^^^^^^^^^
 
-L'Ã©galitÃ© exacte nÃ©cessite, dans le pire des cas, de comparer chaqu'un  des sommets d'une gÃ©omÃ©trie pour dÃ©terminÃ© l'Ã©galitÃ©. Ceci peut Ãªtre trÃšs lent, et s'avÃ©rer innapropriÃ© pour comparer un grand nombre de gÃ©omÃ©tries. Pour permettre de rendre plus rapide ces comparaison, l'opÃ©ration d'Ã©galitÃ© des Ã©tendue est fournit :  :command:`=`. Cet opÃ©rateur utilise uniquement les Ã©tendues (cadre limite rectangulaire), assurant que les gÃ©omÃ©tries occupent le mÃªme espace dans un repÃšre cartÃ©sien en deux dimensions, mais ne reprÃ©sente pas nÃ©cessairement le mÃªme espace.
+L'Ã©galitÃ© exacte nÃ©cessite, dans le pire des cas, de comparer chacun des sommets d'une gÃ©omÃ©trie pour dÃ©terminer l'Ã©galitÃ©. Ceci peut Ãªtre trÃšs lent, et s'avÃ©rer innapropriÃ© pour comparer un grand nombre de gÃ©omÃ©tries. Pour permettre de rendre plus rapide ces comparaison, l'opÃ©ration d'Ã©galitÃ© des Ã©tendue est fournit :  :command:`=`. Cet opÃ©rateur utilise uniquement les Ã©tendues (cadre limite rectangulaire), assurant que les gÃ©omÃ©tries occupent le mÃªme espace dans un repÃšre cartÃ©sien en deux dimensions, mais ne reprÃ©sente pas nÃ©cessairement le mÃªme espace.
 
 .. code-block:: sql
 
-  SELECT a.name, b.name, CASE WHEN a.poly = b.poly 
+  SELECT a.name, b.name, CASE WHEN a.poly = b.poly
       THEN 'Equal Bounds' ELSE 'Non-equal Bounds' end
     FROM polygons as a, polygons as b;
@@ -77,4 +77,4 @@
 .. image:: ./equality/start17.png
 
-Comme vous pouvez le constater, toutes les gÃ©omÃ©tries Ã©gales ont aussi une Ã©tendue Ã©gales. Malheureusement, le polygone 5 est aussi retournÃ© comme Ã©tant Ã©gal avec ce test, puisqu'il partage la mÃªme Ã©tendue que les autres gÃ©omÃ©tries. Mais alors, pourquoi est-ce utile ? Bien que cela soit traitÃ© en dÃ©tail plus tard, la rÃ©ponse courte est que cela permet l'utilisation d'indexation spatiales qui peuvent rÃ©duire drastiquement les ensembles de gÃ©omÃ©tries Ã  comparrer en utilisant des filtres utilisant cette Ã©galitÃ© d'Ã©tendues.
+Comme vous pouvez le constater, toutes les gÃ©omÃ©tries Ã©gales ont aussi une Ã©tendue Ã©gale. Malheureusement, le polygone 5 est aussi retournÃ© comme Ã©tant Ã©gal avec ce test, puisqu'il partage la mÃªme Ã©tendue que les autres gÃ©omÃ©tries. Mais alors, pourquoi est-ce utile ? Bien que cela soit traitÃ© en dÃ©tail plus tard, la rÃ©ponse courte est que cela permet l'utilisation d'indexations spatiales qui peuvent rÃ©duire drastiquement les ensembles de gÃ©omÃ©tries Ã  comparer en utilisant des filtres utilisant cette Ã©galitÃ© d'Ã©tendue.
 
Index: trunk/workshop-foss4g/spatial_relationships.rst
===================================================================
--- trunk/workshop-foss4g/spatial_relationships.rst	(revision 61)
+++ trunk/workshop-foss4g/spatial_relationships.rst	(revision 62)
@@ -2,5 +2,5 @@
 
 Partie 10 : Les relations spatiales
-=================================
+===================================
 
 Jusqu'Ã  prÃ©sent, nous avons utilisÃ© uniquement des fonctions qui permettent de mesurer (:command:`ST_Area`, :command:`ST_Length`), de sÃ©rialiser (:command:`ST_GeomFromText`) ou dÃ©sÃ©rialiser (:command:`ST_AsGML`) des gÃ©omÃ©tries. Ces fonctions sont toutes utilisÃ©es sur une gÃ©omÃ©trie Ã  la fois.
@@ -8,12 +8,12 @@
 Les base de donnÃ©es spatiales sont puissantes car elle ne se contentent pas de stocker les gÃ©omÃ©tries, elle peuvent aussi vÃ©rifier les *relations entre les gÃ©omÃ©tries*.
 
-Pour les questions comme "Quel est le plus proche garage Ã  vÃ©lo prÃªt du parc ?" ou "Ou est l'intersection du mÃ©tro avec telle rue ?", nous devrons comparer les gÃ©omÃ©tries reprÃ©sentant les garage Ã  vÃ©lo, les rues et les lignes de mÃ©tro.
+Pour les questions comme "Quel est le plus proche garage Ã  vÃ©lo prÃšs du parc ?" ou "Ou est l'intersection du mÃ©tro avec telle rue ?", nous devrons comparer les gÃ©omÃ©tries reprÃ©sentant les garages Ã  vÃ©lo, les rues et les lignes de mÃ©tro.
 
-Le standard de l'OGC dÃ©finit l'ensemble de fonctions suivant pour comparer les gÃ©omÃ©tries.
+Le standard de l'OGC dÃ©finit l'ensemble de fonctions suivantes pour comparer les gÃ©omÃ©tries.
 
 ST_Equals
 ---------
- 
-:command:`ST_Equals(geometry A, geometry B)` teste l'Ã©galitÃ© spatiale de deux gÃ©omÃ©tries. 
+
+:command:`ST_Equals(geometry A, geometry B)` teste l'Ã©galitÃ© spatiale de deux gÃ©omÃ©tries.
 
 .. figure:: ./spatial_relationships/st_equals.png
@@ -27,6 +27,6 @@
 
   SELECT name, the_geom, ST_AsText(the_geom)
-  FROM nyc_subway_stations 
-  WHERE name = 'Broad St';             
+  FROM nyc_subway_stations
+  WHERE name = 'Broad St';
 
 ::
@@ -35,11 +35,11 @@
   ----------+----------------------------------------------------+-----------------------
    Broad St | 0101000020266900000EEBD4CF27CF2141BC17D69516315141 | POINT(583571 4506714)
- 
+
 Maintenant, copiez / collez la valeur affichÃ©e pour tester la fonction :command:`ST_Equals`:
 
 .. code-block:: sql
 
-  SELECT name 
-  FROM nyc_subway_stations 
+  SELECT name
+  FROM nyc_subway_stations
   WHERE ST_Equals(the_geom, '0101000020266900000EEBD4CF27CF2141BC17D69516315141');
 
@@ -61,12 +61,12 @@
    :align: center
 
-:command:`ST_Intersects(geometry A, geometry B)` retourne t (TRUE) si l'intersection ne renvoit pas un ensemble vide de rÃ©sultats. Intersects retourne le rÃ©sultat exactement inverse de la fonction disjoint.
+:command:`ST_Intersects(geometry A, geometry B)` retourne t (TRUE) si l'intersection ne renvoie pas un ensemble vide de rÃ©sultats. Intersects retourne le rÃ©sultat exactement inverse de la fonction disjoint.
 
 .. figure:: ./spatial_relationships/st_disjoint.png
    :align: center
 
-L'opposÃ© de ST_Intersects est :command:`ST_Disjoint(geometry A , geometry B)`. Si deux gÃ©omÃ©tries sont disjointes, elle ne s'intersectent pas et vice-versa. En fait, il est souvent plus Ã©fficace de tester si deux gÃ©omÃ©tries ne s'intersectent pas que de tester si elles sont dijointes du fait que le test d'intersection peut Ãªtre spatialement indexÃ© alors que le test disjoint ne le peut pas.
+L'opposÃ© de ST_Intersects est :command:`ST_Disjoint(geometry A , geometry B)`. Si deux gÃ©omÃ©tries sont disjointes, elle ne s'intersectent pas et vice-versa. En fait, il est souvent plus efficace de tester si deux gÃ©omÃ©tries ne s'intersectent pas que de tester si elles sont disjointes du fait que le test d'intersection peut Ãªtre spatialement indexÃ© alors que le test disjoint ne le peut pas.
 
-.. figure:: ./spatial_relationships/st_crosses.png  
+.. figure:: ./spatial_relationships/st_crosses.png
    :align: center
 
@@ -78,9 +78,9 @@
 :command:`ST_Overlaps(geometry A, geometry B)` compare deux gÃ©omÃ©tries de mÃªme dimension et retourne TRUE si leur intersection est une gÃ©omÃ©trie diffÃ©rente des deux fournies mais de mÃªme dimension.
 
-Essayons de prendre la station de mÃ©tro de Broad Street et de dÃ©terminer sont voisinage en utilisant la fonction :command:`ST_Intersects` :
+Essayons de prendre la station de mÃ©tro de Broad Street et de dÃ©terminer son voisinage en utilisant la fonction :command:`ST_Intersects` :
 
 .. code-block:: sql
 
-  SELECT name, boroname 
+  SELECT name, boroname
   FROM nyc_neighborhoods
   WHERE ST_Intersects(the_geom, '0101000020266900000EEBD4CF27CF2141BC17D69516315141');
@@ -88,5 +88,5 @@
 ::
 
-          name        | boroname  
+          name        | boroname
   --------------------+-----------
    Financial District | Manhattan
@@ -102,15 +102,15 @@
    :align: center
 
-:command:`ST_Touches(geometry A, geometry B)` retourn TRUE soit si les contours des gÃ©omÃ©tries s'intersectent ou si l'un des contours intÃ©rieurs de l'une intersecte le contour extÃ©rieur de l'autre.
+:command:`ST_Touches(geometry A, geometry B)` retourne TRUE soit si les contours des gÃ©omÃ©tries s'intersectent ou si l'un des contours intÃ©rieurs de l'une intersecte le contour extÃ©rieur de l'autre.
 
 ST_Within et ST_Contains
 -------------------------
 
-:command:`ST_Within` et :command:`ST_Contains` test si une gÃ©omÃ©trie est totalement incluse dans l'autre. 
+:command:`ST_Within` et :command:`ST_Contains` teste si une gÃ©omÃ©trie est totalement incluse dans l'autre.
 
 .. figure:: ./spatial_relationships/st_within.png
    :align: center
-    
-:command:`ST_Within(geometry A , geometry B)` retourne TRUE si la premiÃšre gÃ©omÃ©trie est complÃštement contenue dans l'autre. ST_Within test l'exact opposÃ© au rÃ©sultat de ST_Contains.  
+
+:command:`ST_Within(geometry A , geometry B)` retourne TRUE si la premiÃšre gÃ©omÃ©trie est complÃštement contenue dans l'autre. ST_Within teste l'exact opposÃ© au rÃ©sultat de ST_Contains.
 
 :command:`ST_Contains(geometry A, geometry B)` retourne TRUE si la seconde gÃ©omÃ©trie est complÃštement contenue dans la premiÃšre gÃ©omÃ©trie.
@@ -120,5 +120,5 @@
 --------------------------
 
-Une question frÃ©quente dans le domaine du SIG est "trouver tout les Ã©lÃ©ments qui se trouvent Ã  une distance X de cet autre Ã©lÃ©ment".
+Une question frÃ©quente dans le domaine du SIG est "trouver tous les Ã©lÃ©ments qui se trouvent Ã  une distance X de cet autre Ã©lÃ©ment".
 
 La fonction :command:`ST_Distance(geometry A, geometry B)` calcule la *plus courte* distance entre deux gÃ©omÃ©tries. Cela est pratique pour rÃ©cupÃ©rer la distance entre les objets.
@@ -134,24 +134,24 @@
   3
 
-Pour tester si deux objets sont Ã  la mÃªme distance d'un autre, la fonction :command:`ST_DWithin` fournit un test tirant profit des indexes. Cela est trÃšs utile pour rÃ©pondre a une question telle que: "Combien d'arbre se situent dans un buffer de 500 mÃštres autour de cette route ?". Vous n'avez pas Ã  calculer le buffer, vous avez simplement besoin de tester la distance entre les gÃ©omÃ©tries.
+Pour tester si deux objets sont Ã  la mÃªme distance d'un autre, la fonction :command:`ST_DWithin` fournit un test tirant profit des index. Cela est trÃšs utile pour rÃ©pondre a une question telle que: "Combien d'arbres se situent dans un buffer de 500 mÃštres autour de cette route ?". Vous n'avez pas Ã  calculer le buffer, vous avez simplement besoin de tester la distance entre les gÃ©omÃ©tries.
 
   .. figure:: ./spatial_relationships/st_dwithin.png
      :align: center
-    
+
 En utilisant de nouveau notre station de mÃ©tro Broad Street, nous pouvons trouver les rues voisines (Ã  10 mÃštres de) de la station :
 
 .. code-block:: sql
 
-  SELECT name 
-  FROM nyc_streets 
+  SELECT name
+  FROM nyc_streets
   WHERE ST_DWithin(
-          the_geom, 
-          '0101000020266900000EEBD4CF27CF2141BC17D69516315141', 
+          the_geom,
+          '0101000020266900000EEBD4CF27CF2141BC17D69516315141',
           10
         );
 
-:: 
+::
 
-       name     
+       name
   --------------
      Wall St
@@ -159,5 +159,5 @@
      Nassau St
 
-Nous pouvons vÃ©rifier la rÃ©ponse sur une carte. La station Broad St est actuellement Ã  l'intersection des rues Wall, Broad et Nassau. 
+Nous pouvons vÃ©rifier la rÃ©ponse sur une carte. La station Broad St est actuellement Ã  l'intersection des rues Wall, Broad et Nassau.
 
 .. image:: ./spatial_relationships/broad_st.jpg
@@ -170,13 +170,13 @@
 `ST_Crosses(geometry A, geometry B)  <http://postgis.org/docs/ST_Crosses.html>`_ : retourne TRUE si la gÃ©omÃ©trie A a certains, mais pas la totalitÃ©, de ses points Ã  l'intÃ©rieur de B.
 
-`ST_Disjoint(geometry A , geometry B) <http://postgis.org/docs/ST_Disjoint.html>`_ : retourne TRUE si les gÃ©mÃ©tries nes s'intersectent pas - elles n'ont aucun point en commun.
+`ST_Disjoint(geometry A , geometry B) <http://postgis.org/docs/ST_Disjoint.html>`_ : retourne TRUE si les gÃ©omÃ©tries ne s'intersectent pas - elles n'ont aucun point en commun.
 
-`ST_Distance(geometry A, geometry B)  <http://postgis.org/docs/ST_Distance.html>`_ : retourne la distance cartÃ©sienne en 2 dimensions minimum entre deux gÃ©omÃ©tries dans l'unitÃ© de la projection. 
+`ST_Distance(geometry A, geometry B)  <http://postgis.org/docs/ST_Distance.html>`_ : retourne la distance cartÃ©sienne en 2 dimensions minimum entre deux gÃ©omÃ©tries dans l'unitÃ© de la projection.
 
-`ST_DWithin(geometry A, geometry B, radius) <http://postgis.org/docs/ST_DWithin.html>`_ : retourne TRUE si les gÃ©omÃ©tries sont distante (radius) l'une de l'autre. 
+`ST_DWithin(geometry A, geometry B, radius) <http://postgis.org/docs/ST_DWithin.html>`_ : retourne TRUE si les gÃ©omÃ©tries sont distante (radius) l'une de l'autre.
 
-`ST_Equals(geometry A, geometry B) <http://postgis.org/docs/ST_Equals.html>`_ : retourn TRUE si les gÃ©omÃ©tries fournis reprÃ©sentent la mÃªme gÃ©omÃ©trie. L'ordre des entitÃ©s n'est pas prit en compte.
+`ST_Equals(geometry A, geometry B) <http://postgis.org/docs/ST_Equals.html>`_ : retourne TRUE si les gÃ©omÃ©tries fournies reprÃ©sentent la mÃªme gÃ©omÃ©trie. L'ordre des entitÃ©s n'est pas pris en compte.
 
-`ST_Intersects(geometry A, geometry B) <http://postgis.org/docs/ST_Intersects.html>`_ : retourne TRUE si les gÃ©omÃ©tries s'intersectent - (ont un espace en commun) et FALSE si elles n'en ont pas (elles sont disjointes). 
+`ST_Intersects(geometry A, geometry B) <http://postgis.org/docs/ST_Intersects.html>`_ : retourne TRUE si les gÃ©omÃ©tries s'intersectent - (ont un espace en commun) et FALSE si elles n'en ont pas (elles sont disjointes).
 
 `ST_Overlaps(geometry A, geometry B) <http://postgis.org/docs/ST_Overlaps.html>`_ : retourne TRUE si les gÃ©omÃ©tries ont un espace en commun, sont de la mÃªme dimension, mais ne sont pas complÃštement contenues l'une dans l'autre.
@@ -186,4 +186,2 @@
 `ST_Within(geometry A , geometry B) <http://postgis.org/docs/ST_Within.html>`_ : retourne TRUE si la gÃ©omÃ©trie A est complÃštement Ã  l'intÃ©rieur de B
 
-
-
Index: trunk/workshop-foss4g/geometries.rst
===================================================================
--- trunk/workshop-foss4g/geometries.rst	(revision 61)
+++ trunk/workshop-foss4g/geometries.rst	(revision 62)
@@ -2,16 +2,16 @@
 
 Partie 8 : Les gÃ©ometries
-=====================
+=========================
 
 Introduction
 ------------
 
-Dans :ref:`une partie prÃ©cÃ©dente<loading_data>` nous avons charger diffÃ©rentes donnÃ©es. Avant de commencer Ã  jouer avec, commenÃ§ons par regarder quelques exemples simples. Depuis pgAdmin, choisissez de nouveau la base de donnÃ©e **nyc** et ouvrez l'outil de requÃªtage SQL. Copiez cette exemple de code SQL (aprÃšs avoir supprimer le contenu prÃ©sent par dÃ©faut si nÃ©cessaire) puis exÃ©cutez-le.
+Dans :ref:`une partie prÃ©cÃ©dente<loading_data>` nous avons chargÃ© diffÃ©rentes donnÃ©es. Avant de commencer Ã  jouer avec, commenÃ§ons par regarder quelques exemples simples. Depuis pgAdmin, choisissez de nouveau la base de donnÃ©e **nyc** et ouvrez l'outil de requÃªtage SQL. Copiez cette exemple de code SQL (aprÃšs avoir supprimÃ© le contenu prÃ©sent par dÃ©faut si nÃ©cessaire) puis exÃ©cutez-le.
 
 .. code-block:: sql
 
   CREATE TABLE geometries (name varchar, geom geometry);
-  
-  INSERT INTO geometries VALUES 
+
+  INSERT INTO geometries VALUES
     ('Point', 'POINT(0 0)'),
     ('Linestring', 'LINESTRING(0 0, 1 1, 2 1, 2 2)'),
@@ -19,12 +19,12 @@
     ('PolygonWithHole', 'POLYGON((0 0, 10 0, 10 10, 0 10, 0 0),(1 1, 1 2, 2 2, 2 1, 1 1))'),
     ('Collection', 'GEOMETRYCOLLECTION(POINT(2 0),POLYGON((0 0, 1 0, 1 1, 0 1, 0 0)))');
-    
+
   SELECT Populate_Geometry_Columns();
-  
+
   SELECT name, ST_AsText(geom) FROM geometries;
 
 .. image:: ./geometries/start01.png
 
-L'exemple ci-dessus crÃ©Ã© une table (**geometries**) puis y insert cinq gÃ©omÃ©tries : un point, une ligne, un polygone, un polygone avec un trou, et une collection. Les lignes insÃ©rÃ©es sont sÃ©lectionnÃ©es et affichÃ©es dans le tableau de sortie.
+L'exemple ci-dessus crÃ©Ã© une table (**geometries**) puis y insÃšre cinq gÃ©omÃ©tries : un point, une ligne, un polygone, un polygone avec un trou, et une collection. Les lignes insÃ©rÃ©es sont sÃ©lectionnÃ©es et affichÃ©es dans le tableau de sortie.
 
 Les tables de mÃ©tadonnÃ©es
@@ -33,10 +33,10 @@
 Dans le respect de la spÃ©cification Simple Features for SQL (:term:`SFSQL`), PostGIS fournit deux tables pour rÃ©cupÃ©rer et s'informer sur les types de gÃ©omÃ©tries disponibles dans une base de donnÃ©es spÃ©cifique.
 
-* La premiÃšre table, ``spatial_ref_sys``, dÃ©finit tout les systÃšmes de projection connus de la base de donnÃ©es et sera dÃ©crite plus en dÃ©tails plus tard.  
-* La seconde table, ``geometry_columns``, fournit une liste de toutes les "entitÃ©s" (dÃ©finit comme un objet avec un attribut gÃ©omÃ©trique) et les dÃ©tails de base relatives Ã  ces entitÃ©s. 
+* La premiÃšre table, ``spatial_ref_sys``, dÃ©finit tous les systÃšmes de projection connus de la base de donnÃ©es et sera dÃ©crite plus en dÃ©tails plus tard.
+* La seconde table, ``geometry_columns``, fournit une liste de toutes les "entitÃ©s" (dÃ©finit comme un objet avec un attribut gÃ©omÃ©trique) et les dÃ©tails de base relatives Ã  ces entitÃ©s.
 
 .. image:: ./geometries/table01.png
 
-Dans l'exemple founit en introduction, la fonction :command:`Populate_Geometry_Columns()` dÃ©tecte toute les colonnes de la base de donnÃ©es qui contiennent des gÃ©omÃ©tries et met Ã  jour la table ``geometry_columns`` pour y inclure leurs rÃ©fÃ©rences.
+Dans l'exemple fournit en introduction, la fonction :command:`Populate_Geometry_Columns()` dÃ©tecte toutes les colonnes de la base de donnÃ©es qui contiennent des gÃ©omÃ©tries et met Ã  jour la table ``geometry_columns`` pour y inclure leurs rÃ©fÃ©rences.
 
 Regardons maintenant la table ``geometry_columns`` de notre base de donnÃ©es. Copiez cette commande dans la fenÃªtre de requÃªtage :
@@ -49,13 +49,13 @@
 .. image:: ./geometries/start08.png
 
-* ``f_table_catalog``, ``f_table_schema``, et ``f_table_name`` fournissent le nom complet de la table contenant une gÃ©omÃ©trie donnÃ©e. Ãtant donnÃ© que PostgreSQL n'utilise pas de catalogues, ``f_table_catalog`` est toujouts vide.  
+* ``f_table_catalog``, ``f_table_schema``, et ``f_table_name`` fournissent le nom complet de la table contenant une gÃ©omÃ©trie donnÃ©e. Ãtant donnÃ© que PostgreSQL n'utilise pas de catalogues, ``f_table_catalog`` est toujours vide.
 * ``f_geometry_column`` est le nom de la colonne qui contient la gÃ©omÃ©trie -- pour les tables ayant plusieurs colonnes gÃ©omÃ©triques, il y a un enregistrement dans cette table pour chacune.
-* ``coord_dimension`` et ``srid`` dÃ©finissent respectivement la dimension de la gÃ©omÃ©trie (en 2-, 3- or 4-dimensions) et le systÃšme de rÃ©fÃ©rences spatiales qui fait rÃ©fÃ©rence Ã  la table ``spatial_ref_sys``.  
-* La colonne ``type`` dÃ©finit le type de gÃ©omÃ©trie comme dÃ©crit plus tÃŽt, nous avons dÃ©jÃ  vu les points et les lignes.  
+* ``coord_dimension`` et ``srid`` dÃ©finissent respectivement la dimension de la gÃ©omÃ©trie (en 2-, 3- or 4-dimensions) et le systÃšme de rÃ©fÃ©rence spatiale qui fait rÃ©fÃ©rence Ã  la table ``spatial_ref_sys``.
+* La colonne ``type`` dÃ©finit le type de gÃ©omÃ©trie comme dÃ©crit plus tÃŽt, nous avons dÃ©jÃ  vu les points et les lignes.
 
 En interrogeant cette table, les clients SIG et les libraires peuvent dÃ©terminer quoi attendre lors de la rÃ©cupÃ©ration des donnÃ©es et peuvent rÃ©aliser les opÃ©ration de reprojection, transformation ou rendu sans avoir Ã  inspecter chaque gÃ©omÃ©trie.
 
 RÃ©prÃ©senter des objets du monde rÃ©el
------------------------------------
+------------------------------------
 
 La spÃ©cification Simple Features for SQL (:term:`SFSQL`), le standard ayant guidÃ© le dÃ©veloppement de PostGIS, dÃ©finit comment les objets du monde rÃ©el doivent Ãªtre reprÃ©sentÃ©s. En considÃ©rant une forme continue Ã  une seule rÃ©solution fixe, nous obtenons une piÃštre reprÃ©sentation des objets. SFSQL considÃšre uniquement les reprÃ©sentations en 2 dimensions. PostGIS a Ã©tendu cela en ajoutant les reprÃ©sentation en 3 et 4 dimensions. Plus rÃ©cemment, la spÃ©cification SQL-Multimedia Part 3 (:term:`SQL/MM`) a officiellement dÃ©finit sa propre reprÃ©sentation.
@@ -74,5 +74,5 @@
 ::
 
-       name       |    st_geometrytype    | st_ndims | st_srid 
+       name       |    st_geometrytype    | st_ndims | st_srid
  -----------------+-----------------------+----------+---------
   Point           | ST_Point              |        2 |      -1
@@ -90,9 +90,9 @@
    :align: center
 
-Un **point** reprÃ©sente une localisation unique sur la Terre. Ce point est reprÃ©sentÃ© par une seule coordonnÃ©e (incluant soit 2, 3 ou 4 dimensions). Les points sont utilisÃ©s pour reprÃ©senter des objets lorsque le dÃ©tail exact du contour n'est pas important Ã  une Ã©chelle donnÃ©e. Par exemple, les villes sur une carte du monde peuvent Ãªtre dÃ©crite sous la forme de points alors qu'une carte rÃ©gionale utiliserait une reprÃ©sentation polygonale des villes.
-
-.. code-block:: sql
-
-  SELECT ST_AsText(geom) 
+Un **point** reprÃ©sente une localisation unique sur la Terre. Ce point est reprÃ©sentÃ© par une seule coordonnÃ©e (incluant soit 2, 3 ou 4 dimensions). Les points sont utilisÃ©s pour reprÃ©senter des objets lorsque le dÃ©tail exact du contour n'est pas important Ã  une Ã©chelle donnÃ©e. Par exemple, les villes sur une carte du monde peuvent Ãªtre dÃ©crites sous la forme de points alors qu'une carte rÃ©gionale utiliserait une reprÃ©sentation polygonale des villes.
+
+.. code-block:: sql
+
+  SELECT ST_AsText(geom)
     FROM geometries
     WHERE name = 'Point';
@@ -105,5 +105,5 @@
 
  * :command:`ST_X(geometry)` retourne la composante X
- * :command:`ST_Y(geometry)` retourne la composante Y 
+ * :command:`ST_Y(geometry)` retourne la composante Y
 
 Donc, nous pouvons lire les coordonnÃ©es d'un point de la maniÃšre suivante :
@@ -124,5 +124,5 @@
 
 
-Les lignes 
+Les lignes
 ~~~~~~~~~~~
 
@@ -130,7 +130,7 @@
    :align: center
 
-Une **ligne** est un chemin entre plusieurs points. Elle prend la forme d'un tableau ordonnÃ© composÃ© de deux (ou plusieurs) points. Les routes et les riviÃšres sont typiquement reprÃ©sentÃ©s sous la forme de lignes. Une ligne est dite **fermÃ©e** si elle commence et fini en un mÃªme point. Elle est dite **simple** si elle ne se coupe pas ou ne se touche pas elle-mÃªme (sauf Ã  ses extrÃ©mitÃ©s si elle est fermÃ©e). Une ligne peut Ãªtre Ã  la fois **fermÃ©e** et **simple**.
-
-Le rÃ©seau des rues de New York (``nyc_streets``) a Ã©tÃ© chargÃ© auparavant. Cet ensemble de donnÃ©es contient les dÃ©tails comme le nom et le type des rues. Une rue du monde rÃ©el pourrait Ãªtre constituÃ©e de plusieurs lignes, chacune reprÃ©sentant une file avec diffÃ©rents attributs.
+Une **ligne** est un chemin entre plusieurs points. Elle prend la forme d'un tableau ordonnÃ© composÃ© de deux (ou plusieurs) points. Les routes et les riviÃšres sont typiquement reprÃ©sentÃ©es sous la forme de lignes. Une ligne est dite **fermÃ©e** si elle commence et finit en un mÃªme point. Elle est dite **simple** si elle ne se coupe pas ou ne se touche pas elle-mÃªme (sauf Ã  ses extrÃ©mitÃ©s si elle est fermÃ©e). Une ligne peut Ãªtre Ã  la fois **fermÃ©e** et **simple**.
+
+Le rÃ©seau des rues de New York (``nyc_streets``) a Ã©tÃ© chargÃ© auparavant. Cet ensemble de donnÃ©es contient les dÃ©tails comme le nom et le type des rues. Une rue du monde rÃ©el pourrait Ãªtre constituÃ©e de plusieurs lignes, chacune reprÃ©sentant une segment de routes avec ses diffÃ©rents attributs.
 
 La requÃªte SQL suivante retourne la gÃ©omÃ©trie associÃ©e Ã  une ligne (dans la colonne :command:`ST_AsText`) :
@@ -138,8 +138,8 @@
 .. code-block:: sql
 
-  SELECT ST_AsText(geom) 
+  SELECT ST_AsText(geom)
     FROM geometries
     WHERE name = 'Linestring';
-  
+
 ::
 
@@ -150,5 +150,5 @@
  * :command:`ST_Length(geometry)` retourne la longueur d'une ligne
  * :command:`ST_StartPoint(geometry)` retourne le premier point d'une ligne
- * :command:`ST_EndPoint(geometry)` retourne le denier point d'une ligne
+ * :command:`ST_EndPoint(geometry)` retourne le dernier point d'une ligne
  * :command:`ST_NPoints(geometry)` retourne le nombre de points dans une ligne
 
@@ -157,5 +157,5 @@
 .. code-block:: sql
 
-  SELECT ST_Length(geom) 
+  SELECT ST_Length(geom)
     FROM geometries
     WHERE name = 'Linestring';
@@ -172,7 +172,7 @@
   :align: center
 
-Un polygone est reprÃ©sentÃ© comme une zone. Le contour externe du polygone est reprÃ©sentÃ© par une ligne simple et fermÃ©e. Les trous sont reprÃ©sentÃ© de la mÃªme maniÃšre.
-
-Les polygones sont utilisÃ©s pour reprÃ©senter les objets dont les tailles et la forme sont importants. Les limites de villes, les parcs, les bÃ¢timents ou les cours d'eau sont habituellement reprÃ©sentÃ© par des polygones lorsque l'Ã©chelle est suffisament Ã©levÃ©e pour voir distinguer leurs zones. Les routes et les riviÃšres peuvent parfois Ãªtre reprÃ©sentÃ© comme des polygones.
+Un polygone est reprÃ©sentÃ© comme une zone. Le contour externe du polygone est reprÃ©sentÃ© par une ligne simple et fermÃ©e. Les trous sont reprÃ©sentÃ©s de la mÃªme maniÃšre.
+
+Les polygones sont utilisÃ©s pour reprÃ©senter les objets dont les tailles et la forme sont importants. Les limites de villes, les parcs, les bÃ¢timents ou les cours d'eau sont habituellement reprÃ©sentÃ©s par des polygones lorsque l'Ã©chelle est suffisament Ã©levÃ©e pour pouvoir distinguer leurs zones. Les routes et les riviÃšres peuvent parfois Ãªtre reprÃ©sentÃ©es comme des polygones.
 
 La requÃªte SQL suivante retournera la gÃ©omÃ©trie associÃ©e Ã  un polygone (dans la colonne :command:`ST_AsText`).
@@ -180,5 +180,5 @@
 .. code-block:: sql
 
-  SELECT ST_AsText(geom) 
+  SELECT ST_AsText(geom)
     FROM geometries
     WHERE name LIKE 'Polygon%';
@@ -203,5 +203,5 @@
  * :command:`ST_ExteriorRing(geometry)` retourne le contour extÃ©rieur
  * :command:`ST_InteriorRingN(geometry,n)` retourne le contour intÃ©rieur numÃ©ro n
- * :command:`ST_Perimeter(geometry)` retourne la longueur de tout les contours
+ * :command:`ST_Perimeter(geometry)` retourne la longueur de tous les contours
 
 Nous pouvons calculer l'aire de nos polygones en utilisant la fonction area :
@@ -209,5 +209,5 @@
 .. code-block:: sql
 
-  SELECT name, ST_Area(geom) 
+  SELECT name, ST_Area(geom)
     FROM geometries
     WHERE name LIKE 'Polygon%';
@@ -221,7 +221,7 @@
 
 Les collections
-~~~~~~~~~~~~~~~~ 
-
-Il y a quatre types de collections, qui regroupe ensemble plusieurs gÃ©omÃ©tries simples.
+~~~~~~~~~~~~~~~~
+
+Il y a quatre types de collections, qui regroupent ensemble plusieurs gÃ©omÃ©tries simples.
 
  * **MultiPoint**, une collection de points
@@ -230,5 +230,5 @@
  * **GeometryCollection**, une collection hÃ©tÃ©rogÃšne de n'importe quelle gÃ©omÃ©trie (dont d'autre collections)
 
-Les collections sont un concept prÃ©sents dans les logiciels SIG  plus que dans les applications de rendu graphique gÃ©nÃ©riques. Elles sont utiles pour directement modeler les objets du monde rÃ©el comme des objet spatiaux. Par exemple, comment modÃ©liser une parcelle qui a Ã©tÃ© coupÃ©e par un chemin ? Comme un **MultiPolygon**, ayant une partie de chaque cotÃ© du chemin.
+Les collections sont un concept prÃ©sents dans les logiciels SIG  plus que dans les applications de rendu graphique gÃ©nÃ©riques. Elles sont utiles pour directement modÃ©liser les objets du monde rÃ©el comme des objet spatiaux. Par exemple, comment modÃ©liser une parcelle qui a Ã©tÃ© coupÃ©e par un chemin ? Comme un **MultiPolygon**, ayant une partie de chaque cotÃ© du chemin.
 
 .. image:: ./screenshots/collection2.png
@@ -238,5 +238,5 @@
 .. code-block:: sql
 
-  SELECT name, ST_AsText(geom) 
+  SELECT name, ST_AsText(geom)
     FROM geometries
     WHERE name = 'Collection';
@@ -252,6 +252,6 @@
  * :command:`ST_NumGeometries(geometry)` retourne le nombre de composantes d'une collection
  * :command:`ST_GeometryN(geometry,n)` retourne une composante spÃ©cifique
- * :command:`ST_Area(geometry)` retourne l'aire totale des composantes de types polygones
- * :command:`ST_Length(geometry)` retourne la longueur totale des composantes de types lignes
+ * :command:`ST_Area(geometry)` retourne l'aire totale des composantes de type polygone
+ * :command:`ST_Length(geometry)` retourne la longueur totale des composantes de type ligne
 
 EntrÃ© / Sortie des gÃ©omÃ©tries
@@ -261,33 +261,33 @@
 
  * Format texte bien connu (Well-known text :term:`WKT`)
- 
+
    * :command:`ST_GeomFromText(text)` retourne une ``geometry``
    * :command:`ST_AsText(geometry)` retourne le ``texte``
    * :command:`ST_AsEWKT(geometry)` retourne le ``texte``
-   
+
  * Format binaire bien connu (Well-known binary :term:`WKB`)
- 
+
    * :command:`ST_GeomFromWKB(bytea)` retourne ``geometry``
    * :command:`ST_AsBinary(geometry)` retourne ``bytea``
    * :command:`ST_AsEWKB(geometry)` retourne ``bytea``
-   
+
  * Geographic Mark-up Language (:term:`GML`)
- 
+
    * :command:`ST_GeomFromGML(text)` retourne ``geometry``
    * :command:`ST_AsGML(geometry)` retourne ``text``
-   
+
  * Keyhole Mark-up Language (:term:`KML`)
- 
+
    * :command:`ST_GeomFromKML(text)` retourne ``geometry``
    * :command:`ST_AsKML(geometry)` retourne ``text``
-   
+
  * :term:`GeoJSON`
- 
+
    * :command:`ST_AsGeoJSON(geometry)` retourne ``text``
-   
+
  * Scalable Vector Graphics (:term:`SVG`)
- 
+
    * :command:`ST_AsSVG(geometry)` retourne ``text``
- 
+
 La requÃªte SQL suivante montre un exemple de reprÃ©sentation en :term:`WKB` (l'appel Ã  :command:`encode()` est requis pour convertir le format binaire en ASCII pour l'afficher) :
 
@@ -295,5 +295,5 @@
 
   SELECT encode(
-    ST_AsBinary(ST_GeometryFromText('LINESTRING(0 0 0,1 0 0,1 1 2)')), 
+    ST_AsBinary(ST_GeometryFromText('LINESTRING(0 0 0,1 0 0,1 1 2)')),
     'hex');
 
@@ -302,5 +302,5 @@
 Dans le reste de ces travaux pratiques, nous utiliserons principalement le format WKT pour que vous puissiez lire et comprendre les gÃ©omÃ©tries que nous voyons. NÃ©anmoins, pour la plupart des traitement actuels, comme la visualisation des donnÃ©es dans une application SIG, le transfert de donnÃ©es Ã  des services web, ou l'exÃ©cution distante de traitements, le format WKB est un format de choix.
 
-Puisque le WKT et le WKB sont dÃ©finit dans la spÃ©cification :term:`SFSQL`, elles ne prennent pas en compte les gÃ©omÃ©tries Ã  3 ou 4 dimensions. C'est pour cette raison que PostGIS dÃ©finit les formats Extended Well Known Text (EWKT) et Extended Well Known Binary (EWKB). Cela permet de gÃ©rer de faÃ§on similaire aux formats WKT et WKB les dimensions ajoutÃ©es.
+Puisque les formats WKT et le WKB sont dÃ©finis dans la spÃ©cification :term:`SFSQL`, ils ne prennent pas en compte les gÃ©omÃ©tries Ã  3 ou 4 dimensions. C'est pour cette raison que PostGIS dÃ©finit les formats Extended Well Known Text (EWKT) et Extended Well Known Binary (EWKB). Cela permet de gÃ©rer de faÃ§on similaire aux formats WKT et WKB les dimensions ajoutÃ©es.
 
 Voici un exemple de ligne 3D au format WKT :
@@ -330,17 +330,17 @@
 -------------------
 
-`Populate_Geometry_Columns <http://postgis.org/docs/Populate_Geometry_Columns.html>`_: s'assure que les colonnes gÃ©omÃ©triques on les contraintes spatiales appropriÃ©es et qu'elles sont prÃ©sentes dans la table  geometry_columns.
-
-`ST_Area <http://postgis.org/docs/ST_Area.html>`_: retourne l'aire de la surface si c'est un polygon ou un multi-polygone. Pour le type "geometry" l'aire est dans l'unitÃ© du SRID. Pour les "geography" l'aire est en mÃštres carrÃ©s.
-
-`ST_AsText <http://postgis.org/docs/ST_AsText.html>`_: retourne la reprÃ©sentation de la geometry/geography au format Well-Known Text (WKT) sans metadonnÃ©e correspondant au SRID.
-
-`ST_AsBinary <http://postgis.org/docs/ST_AsBinary.html>`_: retourne la reprÃ©sentation de la geometry/geography au format Well-Known Binary (WKB) sans metadonnÃ©e correspondant u SRID. 
+`Populate_Geometry_Columns <http://postgis.org/docs/Populate_Geometry_Columns.html>`_: s'assure que les colonnes gÃ©omÃ©triques ont les contraintes spatiales appropriÃ©es et qu'elles sont prÃ©sentes dans la table  geometry_columns.
+
+`ST_Area <http://postgis.org/docs/ST_Area.html>`_: retourne l'aire de la surface si c'est un polygone ou un multi-polygone. Pour le type "geometry" l'aire est dans l'unitÃ© du SRID. Pour les "geography" l'aire est en mÃštres carrÃ©s.
+
+`ST_AsText <http://postgis.org/docs/ST_AsText.html>`_: retourne la reprÃ©sentation de la geometry/geography au format Well-Known Text (WKT) sans mÃ©tadonnÃ©e correspondant au SRID.
+
+`ST_AsBinary <http://postgis.org/docs/ST_AsBinary.html>`_: retourne la reprÃ©sentation de la geometry/geography au format Well-Known Binary (WKB) sans mÃ©tadonnÃ©e correspondant u SRID.
 
 `ST_EndPoint <http://postgis.org/docs/ST_EndPoint.html>`_: retourne le dernier point d'une ligne.
 
-`ST_AsEWKB <http://postgis.org/docs/ST_AsEWKB.html>`_: retourne la reprÃ©sentation de la geometrie au format Well-Known Binary (WKB) avec la mÃ©tadonnÃ©e SRID.
-
-`ST_AsEWKT <http://postgis.org/docs/ST_AsEWKT.html>`_: retourne la reprÃ©sentation de la geometrie au format Well-Known Text (WKT) avec la mÃ©tadonnÃ©e SRID.
+`ST_AsEWKB <http://postgis.org/docs/ST_AsEWKB.html>`_: retourne la reprÃ©sentation de la gÃ©ometrie au format Well-Known Binary (WKB) avec la mÃ©tadonnÃ©e SRID.
+
+`ST_AsEWKT <http://postgis.org/docs/ST_AsEWKT.html>`_: retourne la reprÃ©sentation de la gÃ©ometrie au format Well-Known Text (WKT) avec la mÃ©tadonnÃ©e SRID.
 
 `ST_AsGeoJSON <http://postgis.org/docs/ST_AsGeoJSON.html>`_: retourne la gÃ©omÃ©trie au format GeoJSON.
@@ -352,7 +352,7 @@
 `ST_AsSVG <http://postgis.org/docs/ST_AsSVG.html>`_: retourne la gÃ©omÃ©trie au format SVG.
 
-`ST_ExteriorRing <http://postgis.org/docs/ST_ExteriorRing.html>`_: retourne une ligne reprÃ©sentant le contour extÃ©rieur du polygone. Retourne NULL si la gÃ©omÃ©trie n'est pas un polygone. Ne fonctionne pas avec les multi-polygone.
-
-`ST_GeometryN <http://postgis.org/docs/ST_GeometryN.html>`_: retourne niÃšme composante si la gÃ©omÃ©trie est du type GEOMETRYCOLLECTION, MULTIPOINT, MULTILINESTRING, MULTICURVE ou MULTIPOLYGON. Sinon, retourne NULL.
+`ST_ExteriorRing <http://postgis.org/docs/ST_ExteriorRing.html>`_: retourne une ligne reprÃ©sentant le contour extÃ©rieur du polygone. Retourne NULL si la gÃ©omÃ©trie n'est pas un polygone. Ne fonctionne pas avec les multi-polygones.
+
+`ST_GeometryN <http://postgis.org/docs/ST_GeometryN.html>`_: retourne la niÃšme composante si la gÃ©omÃ©trie est du type GEOMETRYCOLLECTION, MULTIPOINT, MULTILINESTRING, MULTICURVE ou MULTIPOLYGON. Sinon, retourne NULL.
 
 `ST_GeomFromGML <http://postgis.org/docs/ST_GeomFromGML.html>`_: prend en entrÃ©e une reprÃ©sentation GML de la gÃ©omÃ©trie et retourne un object PostGIS de type geometry.
@@ -362,5 +362,5 @@
 `ST_GeomFromText <http://postgis.org/docs/ST_GeomFromText.html>`_: retourne une valeur de type ST_Geometry Ã  partir d'une reprÃ©sentation au format Well-Known Text (WKT).
 
-`ST_GeomFromWKB <http://postgis.org/docs/ST_GeomFromWKB.html>`_: retourne une valeur de type ST_Geometry Ã  partir d'une reprÃ©senattion au format Well-Known Binary (WKB).
+`ST_GeomFromWKB <http://postgis.org/docs/ST_GeomFromWKB.html>`_: retourne une valeur de type ST_Geometry Ã  partir d'une reprÃ©sentation au format Well-Known Binary (WKB).
 
 `ST_GeometryType <http://postgis.org/docs/ST_GeometryType.html>`_: retourne le type de gÃ©omÃ©trie de la valeur de type ST_Geometry.
@@ -368,5 +368,5 @@
 `ST_InteriorRingN <http://postgis.org/docs/ST_InteriorRingN.html>`_: retourne le niÃšme contour intÃ©rieur d'un polygone. Retourne NULL si la gÃ©omÃ©trie n'est pas un polygone ou si N est hors des limites.
 
-`ST_Length <http://postgis.org/docs/ST_Length.html>`_: retourne la longueur en 2-dimensions si c'est une ligne ou une multi-lignes. Les objets de type geometry sont dans l'unitÃ© du systÃšme de rÃ©fÃ©rences spatiales et les objet de type geography sont en metres (sphÃ©roÃ¯de par dÃ©faut).
+`ST_Length <http://postgis.org/docs/ST_Length.html>`_: retourne la longueur en 2-dimensions si c'est une ligne ou une multi-lignes. Les objets de type geometry sont dans l'unitÃ© du systÃšme de rÃ©fÃ©rence spatiale et les objets de type geography sont en mÃštres (sphÃ©roÃ¯de par dÃ©faut).
 
 `ST_NDims <http://postgis.org/docs/ST_NDims.html>`_: retourne le nombre de dimensions d'une gÃ©omÃ©trie. Les valeurs possibles sont : 2,3 ou 4.
@@ -378,5 +378,5 @@
 `ST_NumGeometries <http://postgis.org/docs/ST_NumGeometries.html>`_: si la gÃ©omÃ©trie est du type GEOMETRYCOLLECTION (ou MULTI*) retourne le nombre de gÃ©omÃ©tries, sinon retourne NULL.
 
-`ST_Perimeter <http://postgis.org/docs/ST_Perimeter.html>`_: retourne la longueur du contours extÃ©rieur d'une valeur de type ST_Surface ou ST_MultiSurface (polygone, multi-polygone).
+`ST_Perimeter <http://postgis.org/docs/ST_Perimeter.html>`_: retourne la longueur du contour extÃ©rieur d'une valeur de type ST_Surface ou ST_MultiSurface (polygone, multi-polygone).
 
 `ST_SRID <http://postgis.org/docs/ST_SRID.html>`_: retourne l'identifiant du systÃšme de rÃ©fÃ©rence spatiale dÃ©finit dans la table spatial_ref_sys d'un objet de type ST_Geometry.
Index: trunk/workshop-foss4g/indexing.rst
===================================================================
--- trunk/workshop-foss4g/indexing.rst	(revision 61)
+++ trunk/workshop-foss4g/indexing.rst	(revision 62)
@@ -4,11 +4,11 @@
 =================================
 
-Rapellez-vous que l'indexation spatiale est l'une des trois fonctionnalitÃ©s clÃ©s d'une base de donnÃ©es spatiales. Les indexes permettent l'utilisation de grandes quantitÃ©s de donnÃ©es dans une base. Sans l'indexation, chaque recherche d'entitÃ© nÃ©cessitera d'accÃ©der sÃ©quentiellement Ã  tout les enregistrements de la base de donnÃ©es. L'indexation accÃ©lÃšres les recherche en organisant les donnÃ©es dans des arbres de recherche qui peuvent Ãªtre parcouru efficacement pour retrouver une entitÃ© particuliÃšre.
+Rapellez-vous que l'indexation spatiale est l'une des trois fonctionnalitÃ©s clÃ©s d'une base de donnÃ©es spatiales. Les index permettent l'utilisation de grandes quantitÃ©s de donnÃ©es dans une base. Sans l'indexation, chaque recherche d'entitÃ© nÃ©cessitera d'accÃ©der sÃ©quentiellement Ã  tous les enregistrements de la base de donnÃ©es. L'indexation accÃ©lÃšre les recherches en organisant les donnÃ©es dans des arbres de recherche qui peuvent Ãªtre parcourus efficacement pour retrouver une entitÃ© particuliÃšre.
 
-L'indexation spatiale l'un des plus grands atouts de PostGIS. Dans les exemples prÃ©cÃ©dents, nous avons construit nos jointures spatiales en comparant la totalitÃ© des tables. Ceci peut parfois s'averrer trÃšs coÃ»teux : RÃ©aliser la jointure de deux tables de 10000 enregistrements sans indexation nÃ©cessitera de comparer 100000000 valeurs, les comparaisons requises ne seront plus que 20000 avec l'indexation.
+L'indexation spatiale l'un des plus grands atouts de PostGIS. Dans les exemples prÃ©cÃ©dents, nous avons construit nos jointures spatiales en comparant la totalitÃ© des tables. Ceci peut parfois s'avÃ©rer trÃšs coÃ»teux : rÃ©aliser la jointure de deux tables de 10000 enregistrements sans indexation nÃ©cessitera de comparer 100000000 valeurs, les comparaisons requises ne seront plus que 20000 avec l'indexation.
 
-Lorsque nous avons chargÃ© la table  ``nyc_census_blocks``, l'outils pgShapeLoader crÃ©e automatiquement un indexe spatial appelÃ© ``nyc_census_blocks_the_geom_gist``.
+Lorsque nous avons chargÃ© la table  ``nyc_census_blocks``, l'outil pgShapeLoader crÃ©e automatiquement un index spatial appelÃ© ``nyc_census_blocks_the_geom_gist``.
 
-Pour dÃ©montrer combien il est important d'indexer ses donnÃ©es pour la performance des requÃªtes, essayons de requÃªter notre table ``nyc_census_blocks`` **sans** utiliser notre indexe.
+Pour dÃ©montrer combien il est important d'indexer ses donnÃ©es pour la performance des requÃªtes, essayons de requÃªter notre table ``nyc_census_blocks`` **sans** utiliser notre index.
 
 La premiÃšre Ã©tape consiste Ã  supprimer l'index.
@@ -17,9 +17,9 @@
 
   DROP INDEX nyc_census_blocks_the_geom_gist;
-  
+
 .. note::
 
    La commande ``DROP INDEX`` supprime un index existant de la base de donnÃ©es. Pour de plus amples informations Ã  ce sujet, consultez la `documentation officielle de PostgreSQL <http://docs.postgresql.fr/9.1/sql-dropindex.html>`_.
-   
+
 Maintenant, regardons le temps d'exÃ©cution dans le coin en bas Ã  droite de l'interface de requÃªtage de pgAdmin, puis lanÃ§ons la commande suivante. Notre requÃªte recherche les blocs de la rue Broad.
 
@@ -31,12 +31,12 @@
   ON ST_Contains(blocks.the_geom, subways.the_geom)
   WHERE subways.name = 'Broad St';
-  
+
 ::
 
-       blkid      
+       blkid
  -----------------
   360610007003006
-  
-La table ``nyc_census_blocks`` est trÃšs petite (seulement quelque millier d'enregistrements) donc mÃªme sans l'index, la requÃªte prends **55 ms** sur l'ordinateur de test.
+
+La table ``nyc_census_blocks`` est trÃšs petite (seulement quelque milliers d'enregistrements) donc mÃªme sans l'index, la requÃªte prends **55 ms** sur l'ordinateur de test.
 
 Maintenant remettons en place l'index et lanÃ§ons de nouveau la requÃªte.
@@ -48,10 +48,10 @@
 .. note:: l'utilisation de la clause ``USING GIST`` spÃ©cifie Ã  PostgreSQL de crÃ©er une structure (GIST) pour cet index. Si vous recevez un message d'erreur ressemblant Ã  ``ERROR: index row requires 11340 bytes, maximum size is 8191`` lors de la crÃ©ation, cela signifie sans doute que vous avez omis la clause ``USING GIST``.
 
-Sur l'rdinateur de test le temps d'exÃ©cution se rÃ©duit Ã  **9 ms**. Plus votre table est grande, plus la diffÃ©rence de temps d'exÃ©cution pour une requÃªte utilisant les indexes augmentera.
+Sur l'ordinateur de test le temps d'exÃ©cution se rÃ©duit Ã  **9 ms**. Plus votre table est grande, plus la diffÃ©rence de temps d'exÃ©cution pour une requÃªte utilisant les index augmentera.
 
-Comment les indexes spatiaux fonctionnent
------------------------------------------
+Comment les index spatiaux fonctionnent
+---------------------------------------
 
-Les indexes des base de donnÃ©es standards crÃ©ent des arbres hierarchiques basÃ©s sur les valeurs des colonnes Ã  indexer. Les indexes spatiaux sont un peu diffÃ©rents - ils ne sont pas capables d'indexer des entitÃ©s gÃ©omÃ©triques elles-mÃªme mais indexe leur Ã©tendues.
+Les index des bases de donnÃ©es standards crÃ©ent des arbres hiÃ©rarchiques basÃ©s sur les valeurs des colonnes Ã  indexer. Les index spatiaux sont un peu diffÃ©rents - ils ne sont pas capables d'indexer des entitÃ©s gÃ©omÃ©triques elles-mÃªme mais ils indexent leur Ã©tendues.
 
 .. image:: ./indexing/bbox.png
@@ -59,7 +59,7 @@
 Dans la figure ci-dessus, le nombre de lignes qui intersectent l'Ã©toile jaune est *unique*, la ligne rouge. Mais l'Ã©tendue des entitÃ©s qui intersectent la boÃ®te jaune sont *deux*, la boÃ®te rouge et la boÃ®te bleue.
 
-La maniÃšre dont les bases de donnÃ©es rÃ©pondent de maniÃšre efficace Ã  la question "Quelles lignes intersectent l'Ã©toile jaune ?" correspond premiÃšrement Ã  rÃ©pondre Ã  la question "Quelle Ã©tendue intersecte l'Ã©tendue jaune" en utilisant les indexes (ce qui est trÃšs rapide) puis Ã  calculer le rÃ©sultat exact de la question "Quelles lignes intersectent l'Ã©toile jaune ?" **seulement en utilisant les entitÃ©s retournÃ© par le premier test**.
+La maniÃšre dont les bases de donnÃ©es rÃ©pondent de maniÃšre efficace Ã  la question "Quelles lignes intersectent l'Ã©toile jaune ?" correspond premiÃšrement Ã  rÃ©pondre Ã  la question "Quelle Ã©tendue intersecte l'Ã©tendue jaune" en utilisant les index (ce qui est trÃšs rapide) puis Ã  calculer le rÃ©sultat exact de la question "Quelles lignes intersectent l'Ã©toile jaune ?" **seulement en utilisant les entitÃ©s retournÃ©es par le premier test**.
 
-Pour de grandes tables, il y a un systÃšme en "deux Ã©tapes" d'Ã©valuation en utilisant dans un premier temps l'approximation Ã  l'aide d'indexes, puis en rÃ©alisant le test exact sur une quantitÃ© bien moins importante de donnÃ©es ce qui rÃ©duit drastiquement le temps de calcul nÃ©cessaire Ã  cette deuxiÃšme Ã©tape.
+Pour de grandes tables, il y a un systÃšme en "deux Ã©tapes" d'Ã©valuation en utilisant dans un premier temps l'approximation Ã  l'aide d'index, puis en rÃ©alisant le test exact sur une quantitÃ© bien moins importante de donnÃ©es ce qui rÃ©duit drastiquement le temps de calcul nÃ©cessaire Ã  cette deuxiÃšme Ã©tape.
 
 PotGIS et Oracle Spatial partage la mÃªme notion d'index structurÃ© sous la forme "d'arbres R" [#RTree]_. Les arbres R classent les donnÃ©es sous forme de rectangles, de sous-rectangles etc. Cette structure d'index gÃšre automatiquement la densitÃ© et la taille des objets.
@@ -67,66 +67,66 @@
 .. image:: ./indexing/index-01.png
 
-RequÃªte avec seulement des indexes
-----------------------------------
+RequÃªte avec seulement des index
+--------------------------------
 
-La plupart des fonctions utilisÃ©es par PostGIS (:command:`ST_Contains`, :command:`ST_Intersects`, :command:`ST_DWithin`, etc) prennent en compte les indexes automatiquement. Mais certaines fonctions (comme par exemple : :command:`ST_Relate`) ne les utilisent pas.
+La plupart des fonctions utilisÃ©es par PostGIS (:command:`ST_Contains`, :command:`ST_Intersects`, :command:`ST_DWithin`, etc) prennent en compte les index automatiquement. Mais certaines fonctions (comme par exemple : :command:`ST_Relate`) ne les utilisent pas.
 
-Pour utiliser une recherche par Ã©tendue utilisant les indexes (et pas de filtres), vous pouvez utiliser l'opÃ©rateur :command:`&&`. Pour les gÃ©omÃ©tries, l'opÃ©rateur :command:`&&` signifie "l'Ã©tendue recouvre ou touche" de la mÃªme maniÃšre que l'opÃ©rateur :command:`=` sur des entiers signifie que les valeurs sont Ã©gales.
+Pour utiliser une recherche par Ã©tendue utilisant les index (et pas de filtres), vous pouvez utiliser l'opÃ©rateur :command:`&&`. Pour les gÃ©omÃ©tries, l'opÃ©rateur :command:`&&` signifie "l'Ã©tendue recouvre ou touche" de la mÃªme maniÃšre que l'opÃ©rateur :command:`=` sur des entiers signifie que les valeurs sont Ã©gales.
 
-Essayons de comparer une requÃªte avec seulement un indexe pour la population du quartier 'West Village'. En utilisant la commande :command:`&&` notre requÃªte ressemble Ã  cela :
+Essayons de comparer une requÃªte avec seulement un index pour la population du quartier 'West Village'. En utilisant la commande :command:`&&` notre requÃªte ressemble Ã  cela :
 
 .. code-block:: sql
 
-  SELECT Sum(popn_total) 
+  SELECT Sum(popn_total)
   FROM nyc_neighborhoods neighborhoods
   JOIN nyc_census_blocks blocks
   ON neighborhoods.the_geom && blocks.the_geom
   WHERE neighborhoods.name = 'West Village';
-  
+
 ::
 
   50325
-  
+
 Maintenant essayons la mÃªme requÃªte en utilisant la fonction plus prÃ©cise :command:`ST_Intersects`.
 
 .. code-block:: sql
 
-  SELECT Sum(popn_total) 
+  SELECT Sum(popn_total)
   FROM nyc_neighborhoods neighborhoods
   JOIN nyc_census_blocks blocks
   ON ST_Intersects(neighborhoods.the_geom, blocks.the_geom)
   WHERE neighborhoods.name = 'West Village';
-  
+
 ::
 
   27141
 
-Un plus faible nombre de rÃ©sultats ! La premiÃšre requÃªte nous renvoit tout les blocs qui intersectent l'Ã©tendue du quartier, la seconde nous renvoit seulement les blocs qui intersectent le quartier lui-mÃªme.
+Un plus faible nombre de rÃ©sultats ! La premiÃšre requÃªte nous renvoie tous les blocs qui intersectent l'Ã©tendue du quartier, la seconde nous renvoie seulement les blocs qui intersectent le quartier lui-mÃªme.
 
 Analyse
 ---------
 
-Le plannificateur de requÃªte de PostgreSQL choisit intelligemment d'utiliser ou non les indexes pour rÃ©aliser une requÃªte. Il n'est pas toujours plus rapide d'utiliser un index pour rÃ©aliser une recherche : si la recherche doit renvoyer l'ensemble des enregistrements d'une table, parcourir l'index pour rÃ©cupÃ©rer chaque valeur sera plus lent que de parcourir linÃ©airement l'ensemble de la table.
+Le planificateur de requÃªte de PostgreSQL choisit intelligemment d'utiliser ou non les index pour rÃ©aliser une requÃªte. Il n'est pas toujours plus rapide d'utiliser un index pour rÃ©aliser une recherche : si la recherche doit renvoyer l'ensemble des enregistrements d'une table, parcourir l'index pour rÃ©cupÃ©rer chaque valeur sera plus lent que de parcourir linÃ©airement l'ensemble de la table.
 
-Afin de savoir dans quelle situation il est nÃ©cessaire d'utiliser les idexes (lire une petite partie de la table plutÃŽt qu'une grande partie), PostgreSQL conserve des statistiques relatives Ã  la distribution des donnÃ©es dans chaque colonne indexÃ©e. Par dÃ©faut, PostgreSQL rassemble les statistiques sur une base rÃ©guliÃšre. NÃ©namoins, si vous changez dramatiquement le contenu de vos tables dans une pÃ©riode courte, les statisuqes ne seront alors plus Ã  jour.
+Afin de savoir dans quelle situation il est nÃ©cessaire d'utiliser les index (lire une petite partie de la table plutÃŽt qu'une grande partie), PostgreSQL conserve des statistiques relatives Ã  la distribution des donnÃ©es dans chaque colonne indexÃ©e. Par dÃ©faut, PostgreSQL rassemble les statistiques sur une base rÃ©guliÃšre. NÃ©anmoins, si vous changez dramatiquement le contenu de vos tables dans une pÃ©riode courte, les statistiques ne seront alors plus Ã  jour.
 
-Pour vous assurez que les statistiques correspondent bien au contenu de la table actuelle, il est courrant d'utiliser la commande ``ANALYZE`` aprÃšs un grand nombre de modifications ou de suppression de vos donnÃ©es. Cela force le systÃšme de gestion des statistiques Ã  rÃ©cupÃ©rer l'ensemble des donnÃ©es des colonnes indexÃ©es.
+Pour vous assurez que les statistiques correspondent bien au contenu de la table actuelle, il est courant d'utiliser la commande ``ANALYZE`` aprÃšs un grand nombre de modifications ou de suppression de vos donnÃ©es. Cela force le systÃšme de gestion des statistiques Ã  rÃ©cupÃ©rer l'ensemble des donnÃ©es des colonnes indexÃ©es.
 
-La commande ``ANALYZE`` demande Ã  PostgreSQL de parcourir la table et de mettre Ã  jour les statistiques utilisÃ©es par le plannificateur de requÃªtes (la plannification des requÃªtes sera traitÃ© utiltÃ©rieurement).
+La commande ``ANALYZE`` demande Ã  PostgreSQL de parcourir la table et de mettre Ã  jour les statistiques utilisÃ©es par le planificateur de requÃªtes (la planification des requÃªtes sera traitÃ© ultÃ©rieurement).
 
 .. code-block:: sql
 
    ANALYZE nyc_census_blocks;
-   
+
 NÃ©ttoyage
 ---------
 
-Il est souvent stressant de constater que la simple crÃ©ation d'un indexe n'est pas suffisant pour que PostgreSQL l'utilise efficacement. Le nettoyage doit Ãªtre rÃ©alisÃ© aprÃšs qu'un indexe soit crÃ©Ã© ou aprÃšs un grand nombre de requÃªtes UDATE, INSERT ou DELETE est Ã©tÃ© rÃ©alisÃ© sur une table. La commande ``VACUUM`` demande Ã  PostgreSQL de rÃ©cupÃ©rer chaque espace non utilisÃ© dans les pages de la table qui sont laissÃ© en l'Ã©tat lors des requÃªtes UPDATE ou DELETE Ã  cause du modÃšle d'estapillage multi-versions.
+Il est souvent stressant de constater que la simple crÃ©ation d'un index n'est pas suffisant pour que PostgreSQL l'utilise efficacement. Le nettoyage doit Ãªtre rÃ©alisÃ© aprÃšs qu'un index soit crÃ©Ã© ou aprÃšs un grand nombre de requÃªtes UDATE, INSERT ou DELETE ait Ã©tÃ© rÃ©alisÃ© sur une table. La commande ``VACUUM`` demande Ã  PostgreSQL de rÃ©cupÃ©rer chaque espace non utilisÃ© dans les pages de la table qui sont laissÃ©es en l'Ã©tat lors des requÃªtes UPDATE ou DELETE Ã  cause du modÃšle d'estampillage multi-versions.
 
 Le nettoyage des donnÃ©es est tellement important pour une utilisation efficace du serveur de base de donnÃ©es PostgreSQL qu'il existe maintenant une option "autovacuum".
 
-ActivÃ©e par dÃ©faut, le processus autovacuum nettoie (rÃ©cupÃšre l'espace libre) et analyse (met Ã  jour les statistiques) vos tables suivant un interval donnÃ© dÃ©terminÃ© par l'activitÃ© des bases de donnÃ©es. Bien que cela fonctionne avec les bases de donnÃ©es hautement transactionnelles, il n'est pas supportable de devoir attendre que le processus autovacuum se lance lors de la mise Ã  jour ou la suppression massive de donnÃ©es. Dans ce cas, il faut lancer la commande ``VACUUM`` manuellement.
+ActivÃ©e par dÃ©faut, le processus autovacuum nettoie (rÃ©cupÃšre l'espace libre) et analyse (met Ã  jour les statistiques) vos tables suivant un intervalle donnÃ© dÃ©terminÃ© par l'activitÃ© des bases de donnÃ©es. Bien que cela fonctionne avec les bases de donnÃ©es hautement transactionnelles, il n'est pas supportable de devoir attendre que le processus autovacuum se lance lors de la mise Ã  jour ou la suppression massive de donnÃ©es. Dans ce cas, il faut lancer la commande ``VACUUM`` manuellement.
 
-Le nettoyage et l'analyse de la base de donnÃ©es peut Ãªtre rÃ©alisÃ© sÃ©parÃ©ment si nÃ©cessaire. Utiliser la commande ``VACUUM`` ne mettra pas Ã  jour les statistiques alors que lancer la commande ``ANALYZE`` ne rÃ©cupÃšrera pas l'espace libre des lignes d'une table. Chacune de ces commandes peut Ãªtre lancÃ©e sur l'intÃ©gralitÃ© de la base de donnÃ©es, sur une table ou sur une seule colonne.
+Le nettoyage et l'analyse de la base de donnÃ©es peuvent Ãªtre rÃ©alisÃ©s sÃ©parÃ©ment si nÃ©cessaire. Utiliser la commande ``VACUUM`` ne mettra pas Ã  jour les statistiques alors que lancer la commande ``ANALYZE`` ne rÃ©cupÃšrera pas l'espace libre des lignes d'une table. Chacune de ces commandes peut Ãªtre lancÃ©e sur l'intÃ©gralitÃ© de la base de donnÃ©es, sur une table ou sur une seule colonne.
 
 .. code-block:: sql
@@ -137,11 +137,11 @@
 -------------------
 
-`geometry_a && geometry_b <http://postgis.org/docs/ST_Geometry_Overlap.html>`_: retourne TRUE si l'Ã©tendue de A cheuvauche celle de B.
+`geometry_a && geometry_b <http://postgis.org/docs/ST_Geometry_Overlap.html>`_: retourne TRUE si l'Ã©tendue de A chevauche celle de B.
 
 `geometry_a = geometry_b <http://postgis.org/docs/ST_Geometry_EQ.html>`_: retourne TRUE si l'Ã©tendue de A est la mÃªme que celle de B.
 
-`ST_Intersects(geometry_a, geometry_b) <http://postgis.org/docs/ST_Intersects.html>`_: retourne TRUE si l'objet Geometrie/Geography "intersecte spatiallement" - (ont une partie en commun) et FALSE sinon (elles sont dijointes). 
+`ST_Intersects(geometry_a, geometry_b) <http://postgis.org/docs/ST_Intersects.html>`_: retourne TRUE si la gÃ©omÃ©trie *a* "intersecte spatialement" la gÃ©omÃ©trie '*b*- (si elles ont une partie en commun) et FALSE sinon (elles sont disjointes).
 
-.. rubric:: Footnotes
+.. rubric:: Notes de bas de page
 
 .. [#RTree] http://postgis.org/support/rtree.pdf
Index: trunk/workshop-foss4g/index.rst
===================================================================
--- trunk/workshop-foss4g/index.rst	(revision 61)
+++ trunk/workshop-foss4g/index.rst	(revision 62)
@@ -19,5 +19,5 @@
 
 **software/**
-  un rÃ©pertoire contenant tout les logiciels que nous installerons
+  un rÃ©pertoire contenant tous les logiciels que nous installerons
 
 **data/**
Index: trunk/workshop-foss4g/joins_advanced.rst
===================================================================
--- trunk/workshop-foss4g/joins_advanced.rst	(revision 61)
+++ 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.
+
Index: trunk/workshop-foss4g/simple_sql.rst
===================================================================
--- trunk/workshop-foss4g/simple_sql.rst	(revision 61)
+++ trunk/workshop-foss4g/simple_sql.rst	(revision 62)
@@ -4,5 +4,7 @@
 ===============================
 
-:term:`SQL`, pour "Structured Query Language", dÃ©finit la maniÃšre d'importer et d'interroger des donnÃ©es dans une base. Vous avez dÃ©jÃ  rÃ©digÃ© du SQL lorsque nous avons crÃ©er notre premiÃšre base de donnÃ©es.  Rappel:
+:term:`SQL`, pour "Structured Query Language", dÃ©finit la maniÃšre d'importer et d'interroger des donnÃ©es dans une base. Vous avez dÃ©jÃ  rÃ©digÃ© du SQL lorsque nous avons crÃ©Ã© notre premiÃšre base de donnÃ©es.
+
+Rappel:
 
 .. code-block:: sql
@@ -10,8 +12,8 @@
    SELECT postgis_full_version();
 
-Maintenant que nous avons charger des donnÃ©es dans notre base, essayons d'utiliser SQL pour les interroger. Par exemple,
+Maintenant que nous avons chargÃ© des donnÃ©es dans notre base, essayons d'utiliser SQL pour les interroger. Par exemple,
 
-  "Quel sont les noms des quartiers de la ville de New York ?"
-  
+  "Quels sont les noms des quartiers de la ville de New York ?"
+
 Ouvrez une fenÃªtre SQL depuis pgAdmin en cliquant sur le bouton SQL
 
@@ -23,14 +25,14 @@
 
   SELECT name FROM nyc_neighborhoods;
-  
+
 et cliquez sur le bouton **Execute Query** (le triangle vert).
-  
-.. image:: ./screenshots/pgadmin_08.png  
+
+.. image:: ./screenshots/pgadmin_08.png
 
 La requÃªte s'exÃ©cutera pendant quelques (mili)secondes et retournera 129 rÃ©sultats.
 
-.. image:: ./screenshots/pgadmin_09.png  
+.. image:: ./screenshots/pgadmin_09.png
 
-Mais que c'est-il exactement passÃ© ici ? Pour le comprendre, commenÃ§ons par prÃ©senter les quatre types de requÃªtes du SQL :
+Mais que s'est-il exactement passÃ© ici ? Pour le comprendre, commenÃ§ons par prÃ©senter les quatre types de requÃªtes du SQL :
 
  * ``SELECT``, retourne des lignes en rÃ©ponse Ã  une requÃªte
@@ -38,6 +40,6 @@
  * ``UPDATE``, modifie des lignes existantes d'une table
  * ``DELETE``, supprime des lignes d'une table
- 
-Nous travaillerons principalement avec des requÃªtes de type ``SELECT``afin d'interroger les tables en utilisant des fonctions spatiales.
+
+Nous travaillerons principalement avec des requÃªtes de type ``SELECT`` afin d'interroger les tables en utilisant des fonctions spatiales.
 
 RequÃªte de type SELECT
@@ -47,70 +49,70 @@
 
   SELECT colonnes FROM donnÃ©es WHERE conditions;
-  
+
 .. note::
 
-    Pour une description exhaustive des paramÃštres possible d'une requÃªte ``SELECT``, consultez la `documentaton de PostgresSQL  <http://www.postgresql.org/docs/8.1/interactive/sql-select.html>`_.
-    
+    Pour une description exhaustive des paramÃštres possible d'une requÃªte ``SELECT``, consultez la `documentation de PostgresSQL  <http://www.postgresql.org/docs/8.1/interactive/sql-select.html>`_.
 
-Les ``colonnes`` sont soit des noms de colonnes, soit des fonctions utilisant les valeurs des colonnes. Les ``donnÃ©es`` sont soit une table seule, soit plusieures tables reliÃ©es ensemble en rÃ©alisant une jointure sur une clef ou une autre condition. Les ``conditions`` reprÃ©sentent le filtre qui restreint le nombre de lignes Ã  retourner.
+
+Les ``colonnes`` sont soit des noms de colonnes, soit des fonctions utilisant les valeurs des colonnes. Les ``donnÃ©es`` sont soit une table seule, soit plusieurs tables reliÃ©es ensemble en rÃ©alisant une jointure sur une clef ou une autre condition. Les ``conditions`` reprÃ©sentent le filtre qui restreint le nombre de lignes Ã  retourner.
 
   "Quel sont les noms des quartiers de Brooklyn ?"
 
-Nous retournons Ã  notre table ``nyc_neighborhoods`` avec le filtre en main. La table contient tout les quartiers de New York et nous voulons uniquement ceux de Brooklyn.
+Nous retournons Ã  notre table ``nyc_neighborhoods`` avec le filtre en main. La table contient tous les quartiers de New York et nous voulons uniquement ceux de Brooklyn.
 
 .. code-block:: sql
 
-  SELECT name 
-    FROM nyc_neighborhoods 
+  SELECT name
+    FROM nyc_neighborhoods
     WHERE boroname = 'Brooklyn';
 
-La requÃªte prendra Ã  nouveau quelque (mili)secondes et retournera les 23 Ã©lÃ©ments rÃ©sultants.
+La requÃªte prendra Ã  nouveau quelque (milli)secondes et retournera les 23 Ã©lÃ©ments rÃ©sultants.
 
-Parfois nous aurons besoin d'appliquer des fonctions sur le rÃ©sultats d'une de nos requÃªtes. Par exemple,
+Parfois, nous aurons besoin d'appliquer des fonctions sur le rÃ©sultat d'une de nos requÃªtes. Par exemple,
 
   "Quel est le nombre de lettres dans les noms des quartiers de Brooklyn ?"
-  
+
 Heureusement PostgreSQL fournit une fonction calculant la longueur d'une chaÃ®ne de caractÃšres : :command:`char_length(string)`.
 
 .. code-block:: sql
 
-  SELECT char_length(name) 
-    FROM nyc_neighborhoods 
+  SELECT char_length(name)
+    FROM nyc_neighborhoods
     WHERE boroname = 'Brooklyn';
 
-Bien souvent nous sommes moins interressÃ©s par une ligne particuliÃšre mais plus par un calcul statistique sur l'ensemble rÃ©sultant. Donc, connaitre la longueur des noms de quartiers est moins interressant que de calculer la moyenne des ces longueurs. Les fonctions qui renvoit un rÃ©sultat unique en utilisant un ensemble de valeurs sont appelÃ©e des "fonctions d'aggrÃ©gations".
+Bien souvent, nous sommes moins interessÃ©s par une ligne particuliÃšre que par un calcul statistique sur l'ensemble rÃ©sultant. Donc, connaÃ®tre la longueur des noms de quartiers est moins intÃ©ressant que de calculer la moyenne de ces longueurs. Les fonctions qui renvoient un rÃ©sultat unique en utilisant un ensemble de valeurs sont appelÃ©es des "fonctions d'aggrÃ©gations".
 
-PostgreSQL fournit un ensemble de fonctions d'aggrÃ©gations, parmis lesquelles :command:`avg()` pour calculer la moyenne, and :command:`stddev()` pour l'Ã©cart type.
+PostgreSQL fournit un ensemble de fonctions d'aggrÃ©gations, parmi lesquelles :command:`avg()` pour calculer la moyenne, and :command:`stddev()` pour l'Ã©cart type.
 
-  "Quel est le nombre moyen et l'Ã©cart type du nombre de lettre dans le noms des quartier de Brooklyn ?"
-  
+  "Quel est le nombre moyen et l'Ã©cart type du nombre de lettres dans le nom des quartier de Brooklyn ?"
+
 .. code-block:: sql
 
-  SELECT avg(char_length(name)), stddev(char_length(name)) 
-    FROM nyc_neighborhoods 
+  SELECT avg(char_length(name)), stddev(char_length(name))
+    FROM nyc_neighborhoods
     WHERE boroname = 'Brooklyn';
-  
+
 ::
 
-           avg         |       stddev       
+           avg         |       stddev
   ---------------------+--------------------
    11.7391304347826087 | 3.9105613559407395
 
-Les fonctions d'agrÃ©gation dans notre dernier exemple sont appliquÃ©es Ã  chaque ligne de l'ensemble des rÃ©sultats. Comment faire si nous voulons rassembler des donnÃ©es ? Pour cela nous utilisons la clause ``GROUP BY``. Les fonctions d'agrÃ©gation ont souvent besoin d'une clause ``GROUP BY`` pour regrouper les Ã©lÃ©ments en utilisant une ou plusieures colonnes.
+Les fonctions d'agrÃ©gation dans notre dernier exemple sont appliquÃ©es Ã  chaque ligne de l'ensemble des rÃ©sultats. Comment faire si nous voulons rassembler des donnÃ©es ? Pour cela, nous utilisons la clause ``GROUP BY``. Les fonctions d'agrÃ©gation ont souvent besoin d'une clause ``GROUP BY`` pour regrouper les Ã©lÃ©ments en utilisant une ou plusieurs colonnes.
 
-  "Quel est la moyenne des les noms de quartier de New York, renvoyer par quartiers ?"
+  "Quel est la moyenne du nombre de caractÃšres des noms de quartiers et l'Ã©cart-type du nombre de caractÃšres des noms de quartiers, renvoyÃ© par section de New York ?"
 
 .. code-block:: sql
 
-  SELECT boroname, avg(char_length(name)), stddev(char_length(name)) 
-    FROM nyc_neighborhoods 
+  SELECT boroname, avg(char_length(name)), stddev(char_length(name))
+    FROM nyc_neighborhoods
     GROUP BY boroname;
- 
 
-Nous ajoutons la colonne ``boroname`` dans le rÃ©sultat afin de pouvoir dÃ©terminer quelle valeur statistique s'applique Ã  quel quartier. Dans une requÃªte agrÃ©gÃ©e, vous pouvez seulement retourner les colonnes qui sont (a) membre de la clause de regroupement ou (b) des fonctions d'agrÃ©gation.
-  
+
+Nous ajoutons la colonne ``boroname`` dans le rÃ©sultat afin de pouvoir dÃ©terminer quelle valeur statistique s'applique Ã  quelle section. Dans une requÃªte agrÃ©gÃ©e, vous pouvez seulement retourner les colonnes qui sont (a) membre de la clause de regroupement ou (b) des fonctions d'agrÃ©gation.
+
 ::
 
-     boroname    |         avg         |       stddev       
+     boroname    |         avg         |       stddev
   ---------------+---------------------+--------------------
    Brooklyn      | 11.7391304347826087 | 3.9105613559407395
@@ -119,5 +121,5 @@
    Queens        | 11.6666666666666667 | 5.0057438272815975
    Staten Island | 12.2916666666666667 | 5.2043390480959474
-  
+
 Liste de fonctions
 ------------------
@@ -125,7 +127,6 @@
 `avg(expression) <http://www.postgresql.org/docs/current/static/functions-aggregate.html#FUNCTIONS-AGGREGATE-TABLE>`_: fonction d'agrÃ©gation de PostgreSQL  qui retourne la valeur moyenne d'une colonne.
 
-`char_length(string) <http://www.postgresql.org/docs/current/static/functions-string.html>`_: fonction s'applicant aux chaÃ®nes de caractÃšre de PostgreSQL qui retourne le nombre de lettres dans une chaÃ®ne.
+`char_length(string) <http://www.postgresql.org/docs/current/static/functions-string.html>`_: fonction s'appliquant aux chaÃ®nes de caractÃšre de PostgreSQL qui retourne le nombre de lettres dans une chaÃ®ne.
 
 `stddev(expression) <http://www.postgresql.org/docs/current/static/functions-aggregate.html#FUNCTIONS-AGGREGATE-STATISTICS-TABLE>`_: fonction d'aggrÃ©gation de PostgreSQL qui retourne l'Ã©cart type d'un ensemble de valeurs.
-  
-  
+
Index: trunk/workshop-foss4g/spatial_relationships_exercises.rst
===================================================================
--- trunk/workshop-foss4g/spatial_relationships_exercises.rst	(revision 61)
+++ trunk/workshop-foss4g/spatial_relationships_exercises.rst	(revision 62)
@@ -1,38 +1,38 @@
 .. _spatial_relationships_exercises:
 
-Partie 11 : Exercises sur les relations spatiales
-===========================================
+Partie 11 : Exercices sur les relations spatiales
+=================================================
 
 Voici un rappel des fonctions que nous avons vu dans les parties prÃ©cÃ©dentes. Elles seront utiles pour les exercices !
 
- * :command:`sum(expression)` agrÃ©gation retournant la somme d'un ensemble
- * :command:`count(expression)` agrÃ©gation retournant le nombre d'Ã©lÃ©ments d'un ensemble
-* :command:`ST_Contains(geometry A, geometry B)` retourne vrai si la gÃ©omÃ©trie A contient la gÃ©omÃ©trie B 
-* :command:`ST_Crosses(geometry A, geometry B)` retourne vrai si la gÃ©omÃ©trie A croise la gÃ©omÃ©trie B
-* :command:`ST_Disjoint(geometry A , geometry B)` retourne vrai si les gÃ©omÃ©trie ne s'intersectent pas
+* :command:`sum(expression)` agrÃ©gation retournant la somme d'un ensemble
+* :command:`count(expression)` agrÃ©gation retournant le nombre d'Ã©lÃ©ments d'un ensemble
+* :command:`ST_Contains(geometry A, geometry B)` retourne TRUE si la gÃ©omÃ©trie A contient la gÃ©omÃ©trie B
+* :command:`ST_Crosses(geometry A, geometry B)` retourne TRUE si la gÃ©omÃ©trie A croise la gÃ©omÃ©trie B
+* :command:`ST_Disjoint(geometry A , geometry B)` retourne TRUE si les gÃ©omÃ©tries ne s'intersectent pas
 * :command:`ST_Distance(geometry A, geometry B)` retourne la distance minimum entre deux gÃ©omÃ©tries
-* :command:`ST_DWithin(geometry A, geometry B, radius)` retourne vrai si la A est distante d'au plus radius de B
-* :command:`ST_Equals(geometry A, geometry B)` retourne vrai si A est la mÃªme gÃ©omÃ©trie que B
-* :command:`ST_Intersects(geometry A, geometry B)` retourne vrai si A intersecte B
-* :command:`ST_Overlaps(geometry A, geometry B)` retourne vrai si A et B on un espace en commun, mais ne sont pas complÃ©tement inclus l'un dans l'autre.
-* :command:`ST_Touches(geometry A, geometry B)` retourne vrai si le contour extÃ©rieur de A touche B
-* :command:`ST_Within(geometry A, geometry B)` retourne vrai si A est hors de B
+* :command:`ST_DWithin(geometry A, geometry B, radius)` retourne TRUE si la A est distante d'au plus radius de B
+* :command:`ST_Equals(geometry A, geometry B)` retourne TRUE si A est la mÃªme gÃ©omÃ©trie que B
+* :command:`ST_Intersects(geometry A, geometry B)` retourne TRUE si A intersecte B
+* :command:`ST_Overlaps(geometry A, geometry B)` retourne TRUE si A et B on un espace en commun, mais ne sont pas complÃštement incluses l'un dans l'autre.
+* :command:`ST_Touches(geometry A, geometry B)` retourne TRUE si le contour extÃ©rieur de A touche B
+* :command:`ST_Within(geometry A, geometry B)` retourne TRUE si A est hors de B
 
 Souvenez-vous les tables Ã  votre disposition :
 
- * ``nyc_census_blocks`` 
- 
+ * ``nyc_census_blocks``
+
    * name, popn_total, boroname, the_geom
- 
+
  * ``nyc_streets``
- 
+
    * name, type, the_geom
-   
+
  * ``nyc_subway_stations``
- 
+
    * name, the_geom
- 
+
  * ``nyc_neighborhoods``
- 
+
    * name, boroname, the_geom
 
@@ -40,6 +40,6 @@
 ---------
 
- * **"Quel est la valeur gÃ©omÃ©trique de la rue nommÃ©e  'Atlantic Commons' ?"**
- 
+ * **"Quelle est la valeur gÃ©omÃ©trique de la rue nommÃ©e  'Atlantic Commons' ?"**
+
    .. code-block:: sql
 
@@ -49,13 +49,13 @@
 
    ::
-   
+
      01050000202669000001000000010200000002000000093235673BE82141F319CD89A22E514170E30E0ADFE82141CB2D3EFFA52E5141
-     
- * **"Quel sont les quartiers et villes qui sont dans Atlantic Commons ?"**
-     
+
+ * **"Quels sont les quartiers et villes qui sont dans Atlantic Commons ?"**
+
    .. code-block:: sql
 
-     SELECT name, boroname 
-     FROM nyc_neighborhoods 
+     SELECT name, boroname
+     FROM nyc_neighborhoods
      WHERE ST_Intersects(
        the_geom,
@@ -64,24 +64,24 @@
 
    ::
-     
-          name    | boroname 
+
+          name    | boroname
       ------------+----------
        Fort Green | Brooklyn
-     
 
- * **"Quelles rues touchent Atlantic Commons ?"** 
- 
+
+ * **"Quelles rues touchent Atlantic Commons ?"**
+
    .. code-block:: sql
 
-     SELECT name 
-     FROM nyc_streets 
+     SELECT name
+     FROM nyc_streets
      WHERE ST_Touches(
-       the_geom, 
+       the_geom,
        '01050000202669000001000000010200000002000000093235673BE82141F319CD89A22E514170E30E0ADFE82141CB2D3EFFA52E5141'
      );
-    
+
    ::
-  
-          name      
+
+          name
      ---------------
       S Oxford St
@@ -89,8 +89,8 @@
 
    .. image:: ./spatial_relationships/atlantic_commons.jpg
-  
 
- * **"Approximativement combien de personnes vivent dans (ou dans une zone de 50 metres autour d') Atlantic Commons ?"**
- 
+
+ * **"Approximativement combien de personnes vivent dans (ou dans une zone de 50 mÃštres autour d') Atlantic Commons ?"**
+
    .. code-block:: sql
 
@@ -102,7 +102,7 @@
         50
         );
-        
-   :: 
-   
-     1186 
-   
+
+   ::
+
+     1186
+
Index: trunk/workshop-foss4g/geometries_exercises.rst
===================================================================
--- trunk/workshop-foss4g/geometries_exercises.rst	(revision 61)
+++ trunk/workshop-foss4g/geometries_exercises.rst	(revision 62)
@@ -2,5 +2,5 @@
 
 Partie 9 : Exercices sur les gÃ©omÃ©tries
-======================================
+=======================================
 
 Voici un petit rappel de toutes les fonction que nous avons abordÃ© jusqu'Ã  prÃ©sent. Elles devraient Ãªtre utiles pour les exercices !
@@ -10,5 +10,5 @@
  * :command:`ST_GeometryType(geometry)` retourne le type de la gÃ©omÃ©trie
  * :command:`ST_NDims(geometry)` retourne le  nombre de dimensions
- * :command:`ST_SRID(geometry)` retourne l'identifiant du systÃšme de rÃ©fÃ©rences spatiales
+ * :command:`ST_SRID(geometry)` retourne l'identifiant du systÃšme de rÃ©fÃ©rence spatiale
  * :command:`ST_X(point)` retourne la coordonnÃ©e X
  * :command:`ST_Y(point)` retourne la coordonnÃ©e Y
@@ -19,7 +19,7 @@
  * :command:`ST_Area(geometry)` retourne l'aire d'un polygone
  * :command:`ST_NRings(geometry)` retourne le nombre de contours (1 ou plus si il y a des trous)
- * :command:`ST_ExteriorRing(polygon)` retourne le contour exterieur (ligne) d'un polygon
+ * :command:`ST_ExteriorRing(polygon)` retourne le contour extÃ©rieur (ligne) d'un polygone
  * :command:`ST_InteriorRingN(polygon, integer)` retourne le contour intÃ©rieur (ligne) d'un polygone
- * :command:`ST_Perimeter(geometry)` retourne la longueur de tout les contours
+ * :command:`ST_Perimeter(geometry)` retourne la longueur de tous les contours
  * :command:`ST_NumGeometries(multi/geomcollection)` retourne le nombre de composantes dans une collection
  * :command:`ST_GeometryN(geometry, integer)` retourne la niÃšme entitÃ© de la collection
@@ -39,18 +39,18 @@
 Souvenez-vous aussi des tables disponibles:
 
- * ``nyc_census_blocks`` 
- 
+ * ``nyc_census_blocks``
+
    * name, popn_total, boroname, the_geom
- 
+
  * ``nyc_streets``
- 
+
    * name, type, the_geom
-   
+
  * ``nyc_subway_stations``
- 
+
    * name, the_geom
- 
+
  * ``nyc_neighborhoods``
- 
+
    * name, boroname, the_geom
 
@@ -59,5 +59,5 @@
 
  * **"Quelle est l'aire du quartier 'West Village'?"**
- 
+
    .. code-block:: sql
 
@@ -65,6 +65,6 @@
        FROM nyc_neighborhoods
        WHERE name = 'West Village';
-       
-   :: 
+
+   ::
 
      1044614.53027344
@@ -72,8 +72,8 @@
    .. note::
 
-      L'aire est donnÃ©e en metres carrÃ©s. Pour obtenir l'aire en hectare, divisez par 10000. Pour obrenir l'aire en acres, divisez par 4047.
-
- * **"Quelle est l'aire de Manhattan en acres ?"** (Astuce: ``nyc_census_blocks`` et ``nyc_neighborhoods`` on toutes deux le champ ``boroname``.)
- 
+      L'aire est donnÃ©e en mÃštres carrÃ©s. Pour obtenir l'aire en hectare, divisez par 10000. Pour obtenir l'aire en acres, divisez par 4047.
+
+ * **"Quelle est l'aire de Manhattan en acres ?"** (Astuce: ``nyc_census_blocks`` et ``nyc_neighborhoods`` ont toutes les deux le champ ``boroname``.)
+
    .. code-block:: sql
 
@@ -82,6 +82,6 @@
        WHERE boroname = 'Manhattan';
 
-   :: 
-   
+   ::
+
      13965.3201224118
 
@@ -94,46 +94,46 @@
        WHERE boroname = 'Manhattan';
 
-   :: 
-   
+   ::
+
      14572.1575543757
 
 
  * **"Combien de blocs de la ville de New York ont des trous ?"**
- 
-   .. code-block:: sql
-
-     SELECT Count(*) 
+
+   .. code-block:: sql
+
+     SELECT Count(*)
        FROM nyc_census_blocks
        WHERE ST_NRings(the_geom) > 1;
 
-   :: 
-   
-     66 
-   
+   ::
+
+     66
+
  * **"Quel est la longueur totale des rues (en kilomÃštres) dans la ville de New York ?"** (Astuce: l'unitÃ© de mesure des donnÃ©es spatiales est le mÃštre, il y a 1000 mÃštres dans un kilomÃštre.)
-  
-    .. code-block:: sql
+
+   .. code-block:: sql
 
      SELECT Sum(ST_Length(the_geom)) / 1000
        FROM nyc_streets;
 
-   :: 
-   
+   ::
+
      10418.9047172
 
  * **"Quelle est la longueur de 'Columbus Cir' (Columbus Circle) ?"**
- 
-     .. code-block:: sql
- 
-      SELECT ST_Length(the_geom)
-        FROM nyc_streets
-        WHERE name = 'Columbus Cir';
-
-     :: 
-   
-       308.34199
+
+   .. code-block:: sql
+
+     SELECT ST_Length(the_geom)
+       FROM nyc_streets
+       WHERE name = 'Columbus Cir';
+
+   ::
+
+     308.34199
 
  * **"Quelle est le contour de 'West Village' au format JSON ?"**
- 
+
    .. code-block:: sql
 
@@ -143,5 +143,5 @@
 
    ::
-     
+
       {"type":"MultiPolygon","coordinates":
        [[[[583263.2776595836,4509242.6260239873],
@@ -149,9 +149,9 @@
           [583263.2776595836,4509242.6260239873]]]]}
 
-La gÃ©omÃ©trie de type "MultiPolygon", interressant !
-   
-      
+La gÃ©omÃ©trie de type "MultiPolygon", intÃ©ressant !
+
+
  * **"Combien de polygones sont dans le multi-polygone 'West Village' ?"**
- 
+
    .. code-block:: sql
 
@@ -163,12 +163,12 @@
 
       1
-       
+
    .. note::
-   
+
       Il n'est pas rare de trouver des Ã©lÃ©ments de type multi-polygone ne contenant qu'un seul polygone dans des tables. L'utilisation du type multi-polygone permet d'utiliser une seule table pour y stocker des gÃ©omÃ©tries simples et multiples sans mÃ©langer les types.
-       
-       
+
+
  * **"Quel est la longueur des rues de la ville de New York, suivant leur type ?"**
- 
+
    .. code-block:: sql
 
@@ -179,6 +179,6 @@
 
    ::
-   
-                            type                       |      length      
+
+                            type                       |      length
      --------------------------------------------------+------------------
       residential                                      | 8629870.33786606
@@ -204,11 +204,7 @@
       motorway_link; residential                       |  215.07778911517
 
-    
+
    .. note::
 
       La clause ``ORDER BY length DESC`` ordonne le rÃ©sultat par la valeur des longueurs dans l'ordre dÃ©croissant. Le rÃ©sultat avec la plus grande valeur se retrouve au dÃ©but la liste de rÃ©sultats.
 
- 
- 
- 
-        
Index: trunk/workshop-foss4g/joins.rst
===================================================================
--- trunk/workshop-foss4g/joins.rst	(revision 61)
+++ 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/
Index: trunk/workshop-foss4g/simple_sql_exercises.rst
===================================================================
--- trunk/workshop-foss4g/simple_sql_exercises.rst	(revision 61)
+++ trunk/workshop-foss4g/simple_sql_exercises.rst	(revision 62)
@@ -4,7 +4,7 @@
 ===================================
 
-En utilisant la table ``nyc_census_blocks``, rÃ©pondez au questions suivantes (et n'allez pas directement aux rÃ©ponses ! ). 
+En utilisant la table ``nyc_census_blocks``, rÃ©pondez au questions suivantes (et n'allez pas directement aux rÃ©ponses ! ).
 
-Vous trouverez ci-dessous des informations utiles pour commencer. RÃ©fÃ©rez-vous Ã  la partie :ref:`Ã propos des nos donnÃ©es` pour la dÃ©finition de notre table ``nyc_census_blocks``.
+Vous trouverez ci-dessous des informations utiles pour commencer. RÃ©fÃ©rez-vous Ã  la partie :ref:`A propos des nos donnÃ©es<about_data>` pour la dÃ©finition de notre table ``nyc_census_blocks``.
 
 .. list-table::
@@ -38,39 +38,39 @@
 Ici se trouvent certaines des fonctions d'aggrÃ©gation qui vous seront utiles pour rÃ©pondre aux questions :
 
- * avg() - la moyenne des vlauers dans un ensemble d'enregistrements
- * sum() - la somme des valeurs d'un ensembe d'enregistrements
- * count() - le nombre d'Ã©lÃ©ment contenu dans un ensembe d'enregistrements.
+ * avg() - la moyenne des valeurs dans un ensemble d'enregistrements
+ * sum() - la somme des valeurs d'un ensemble d'enregistrements
+ * count() - le nombre d'Ã©lÃ©ments contenus dans un ensemble d'enregistrements.
 
 Maintenant les questions :
 
  * **"Quelle est la population de la ville de New York ?"**
- 
+
    .. code-block:: sql
-   
+
      SELECT Sum(popn_total) AS population
        FROM nyc_census_blocks;
-     
-   :: 
-   
-     8008278 
-   
-   .. note:: 
-   
-       Qu'est-ce que ce ``AS`` dans la requÃªte ? vous pouvez donner un nom Ã  une table ou a des colonnes en utilisant un alias. Les alias permettent de rendre les requÃªtes plus simple Ã  Ã©crire et Ã  lire. Donc au lieu que notre colonne rÃ©sultat soit nommÃ©e ``sum`` nous utilisons le  **AS** pour la renommer en ``population``. 
-       
+
+   ::
+
+     8008278
+
+   .. note::
+
+       Qu'est-ce que ce ``AS`` dans la requÃªte ? vous pouvez donner un nom Ã  une table ou Ã  des colonnes en utilisant un alias. Les alias permettent de rendre les requÃªtes plus simple Ã  Ã©crire et Ã  lire. Donc au lieu que notre colonne rÃ©sultat soit nommÃ©e ``sum`` nous utilisons le  **AS** pour la renommer en ``population``.
+
  * **"Quelle est la population du Bronx ?"**
 
    .. code-block:: sql
- 
+
      SELECT Sum(popn_total) AS population
        FROM nyc_census_blocks
        WHERE boroname = 'The Bronx';
-     
-   :: 
-   
-     1332650 
-   
- * **"Quelle est en moyenne le nombre de personne vivant dans chaque appartement de la ville de New York ?"**
- 
+
+   ::
+
+     1332650
+
+ * **"Quelle est en moyenne le nombre de personnes vivant dans chaque appartement de la ville de New York ?"**
+
    .. code-block:: sql
 
@@ -78,21 +78,21 @@
        FROM nyc_census_blocks;
 
-   :: 
-   
-     2.6503540522400804 
-   
+   ::
+
+     2.6503540522400804
+
  * **"Pour chaque quartier, quel est le pourcentage de population blanche ?"**
 
    .. code-block:: sql
 
-     SELECT 
-         boroname, 
+     SELECT
+         boroname,
          100 * Sum(popn_white)/Sum(popn_total) AS white_pct
        FROM nyc_census_blocks
        GROUP BY boroname;
 
-   :: 
-   
-        boroname    |      white_pct      
+   ::
+
+        boroname    |      white_pct
      ---------------+---------------------
       Brooklyn      | 41.2005552206888663
@@ -101,11 +101,12 @@
       Queens        | 44.0806610271290794
       Staten Island | 77.5968611401579346
- 
+
 Liste des fonctions
 -------------------
 
-`avg(expression) <http://www.postgresql.org/docs/8.2/static/functions-aggregate.html#FUNCTIONS-AGGREGATE-TABLE>`_: fonction d'aggrÃ©gation de PostgreSQL qui renvoit la moyenne d'un esemble de nombres.
+`avg(expression) <http://www.postgresql.org/docs/8.2/static/functions-aggregate.html#FUNCTIONS-AGGREGATE-TABLE>`_: fonction d'aggrÃ©gation de PostgreSQL qui renvoie la moyenne d'un ensemble de nombres.
 
-`count(expression) <http://www.postgresql.org/docs/8.2/static/functions-aggregate.html#FUNCTIONS-AGGREGATE-TABLE>`_: une fonction d'aggrÃ©gation de PostgreSQL qui retourne le nombre d'Ã©lÃ©ments dans un esemble.
+`count(expression) <http://www.postgresql.org/docs/8.2/static/functions-aggregate.html#FUNCTIONS-AGGREGATE-TABLE>`_: une fonction d'aggrÃ©gation de PostgreSQL qui retourne le nombre d'Ã©lÃ©ments dans un ensemble.
 
 `sum(expression) <http://www.postgresql.org/docs/8.2/static/functions-aggregate.html#FUNCTIONS-AGGREGATE-TABLE>`_: une fonction d'aggrÃ©gation de PostgreSQL qui retourne la somme des valeurs numÃ©riques d'un ensemble.
+
Index: trunk/workshop-foss4g/welcome.rst
===================================================================
--- trunk/workshop-foss4g/welcome.rst	(revision 61)
+++ trunk/workshop-foss4g/welcome.rst	(revision 62)
@@ -46,5 +46,5 @@
 Par exemple:
 
-   :command:`ST_Touches(geometry A, geometry B)` retourne vrai si un des contours de gÃ©omÃ©trie intersecte l'autre contour de gÃ©omÃ©trie
+   :command:`ST_Touches(geometry A, geometry B)` retourne vrai si un des contours de gÃ©omÃ©trie touche l'autre contour de gÃ©omÃ©trie
 
 Fichiers, Tables et nom de colonne
Index: trunk/workshop-foss4g/joins_exercises.rst
===================================================================
--- trunk/workshop-foss4g/joins_exercises.rst	(revision 61)
+++ trunk/workshop-foss4g/joins_exercises.rst	(revision 62)
@@ -6,33 +6,33 @@
 Voici un petit rappel de certaines des fonctions vues prÃ©cÃ©demment. Elles seront utiles pour les exercices !
 
- * :command:`sum(expression)` agrÃ©gation retournant la somme d'un ensemble
- * :command:`count(expression)` agrÃ©gation retournant le nombre d'Ã©lÃ©ments d'un ensemble
-* :command:`ST_Area(geometry)` retourbe l'aire d'un polygone
-* :command:`ST_AsText(geometry)` returns WKT ``text``
-* :command:`ST_Contains(geometry A, geometry B)` retourne vrai si la gÃ©omÃ©trie A contient la gÃ©omÃ©trie B 
+* :command:`sum(expression)` agrÃ©gation retournant la somme d'un ensemble
+* :command:`count(expression)` agrÃ©gation retournant le nombre d'Ã©lÃ©ments d'un ensemble
+* :command:`ST_Area(geometry)` retourne l'aire d'un polygone
+* :command:`ST_AsText(geometry)` retourne un texte WKT
+* :command:`ST_Contains(geometry A, geometry B)` retourne TRUE si la gÃ©omÃ©trie A contient la gÃ©omÃ©trie B
 * :command:`ST_Distance(geometry A, geometry B)` retourne la distance minimum entre deux gÃ©omÃ©tries
-* :command:`ST_DWithin(geometry A, geometry B, radius)` retourne vrai si la A est distante d'au plus radius de B
-* :command:`ST_GeomFromText(text)` returns ``geometry``
-* :command:`ST_Intersects(geometry A, geometry B)` returns the true if geometry A intersects geometry B
-* :command:`ST_Length(linestring)` retourne la longueur d'une linestring
-* :command:`ST_Touches(geometry A, geometry B)` retourne vrai si le contour extÃ©rieur de A touche B
-* :command:`ST_Within(geometry A, geometry B)` retourne vrai si A est hors de B
+* :command:`ST_DWithin(geometry A, geometry B, radius)` retourne TRUE si la A est distante d'au plus radius de B
+* :command:`ST_GeomFromText(text)` retourne une gÃ©omÃ©trie
+* :command:`ST_Intersects(geometry A, geometry B)` retourne TRUE si la gÃ©omÃ©trie A intersecte la gÃ©omÃ©trie B
+* :command:`ST_Length(linestring)` retourne la longueur d'une ligne
+* :command:`ST_Touches(geometry A, geometry B)` retourne TRUE si le contour extÃ©rieur de A touche B
+* :command:`ST_Within(geometry A, geometry B)` retourne TRUE si A est hors de B
 
-Souvenez-vous aussi des tables Ã  votre disposition : 
+Souvenez-vous aussi des tables Ã  votre disposition :
 
- * ``nyc_census_blocks`` 
- 
+ * ``nyc_census_blocks``
+
    * name, popn_total, boroname, the_geom
- 
+
  * ``nyc_streets``
- 
+
    * name, type, the_geom
-   
+
  * ``nyc_subway_stations``
- 
+
    * name, routes, the_geom
- 
+
  * ``nyc_neighborhoods``
- 
+
    * name, boroname, the_geom
 
@@ -40,33 +40,33 @@
 ---------
 
- * **"Quelle station de mÃ©tros se situe dans le quartier 'Little Italy' ? Quelle est l'itinÃ©raire de mÃ©tro Ã  emprunter ?"**
- 
+ * **"Quelle station de mÃ©tro se situe dans le quartier 'Little Italy' ? Quelle est l'itinÃ©raire de mÃ©tro Ã  emprunter ?"**
+
    .. code-block:: sql
- 
-     SELECT s.name, s.routes 
+
+     SELECT s.name, s.routes
      FROM nyc_subway_stations AS s
-     JOIN nyc_neighborhoods AS n 
-     ON ST_Contains(n.the_geom, s.the_geom)  
+     JOIN nyc_neighborhoods AS n
+     ON ST_Contains(n.the_geom, s.the_geom)
      WHERE n.name = 'Little Italy';
 
-   :: 
-  
-       name    | routes 
+   ::
+
+       name    | routes
     -----------+--------
      Spring St | 6
-     
+
  * **"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')
- 
+
    .. code-block:: sql
-  
-    SELECT DISTINCT n.name, n.boroname 
+
+    SELECT DISTINCT n.name, n.boroname
     FROM nyc_subway_stations AS s
-    JOIN nyc_neighborhoods AS n 
-    ON ST_Contains(n.the_geom, s.the_geom)  
+    JOIN nyc_neighborhoods AS n
+    ON ST_Contains(n.the_geom, s.the_geom)
     WHERE strpos(s.routes,'6') > 0;
-    
+
    ::
-  
-            name        | boroname  
+
+            name        | boroname
     --------------------+-----------
      Midtown            | Manhattan
@@ -87,27 +87,27 @@
 
    .. note::
-  
-     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. 
-        
+
+     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.
+
  * **"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 ?"**
- 
+
    .. code-block:: sql
- 
+
      SELECT Sum(popn_total)
      FROM nyc_neighborhoods AS n
-     JOIN nyc_census_blocks AS c 
-     ON ST_Intersects(n.the_geom, c.the_geom)  
+     JOIN nyc_census_blocks AS c
+     ON ST_Intersects(n.the_geom, c.the_geom)
      WHERE n.name = 'Battery Park';
-   
-   :: 
+
+   ::
 
      9928
-    
+
  * **"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.)
- 
+
    .. code-block:: sql
-   
-     SELECT 
-       n.name, 
+
+     SELECT
+       n.name,
        Sum(c.popn_total) / (ST_Area(n.the_geom) / 1000000.0) AS popn_per_sqkm
      FROM nyc_census_blocks AS c
@@ -117,11 +117,10 @@
      OR n.name = 'Upper East Side'
      GROUP BY n.name, n.the_geom;
-     
+
    ::
-   
-           name       |  popn_per_sqkm   
+
+           name       |  popn_per_sqkm
      -----------------+------------------
       Upper East Side | 47943.3590089405
       Upper West Side | 39729.5779474286
 
-     
Index: trunk/workshop-foss4g/postgis-functions.rst
===================================================================
--- trunk/workshop-foss4g/postgis-functions.rst	(revision 61)
+++ trunk/workshop-foss4g/postgis-functions.rst	(revision 62)
@@ -5,8 +5,8 @@
 
 Constructeurs
-------------
+-------------
 
-:command:`ST_MakePoint(Longitude, Latitude)` 
-  Retourne un nouveau point. Note : ordre des coordonÃ©es (longitude puis latitude).
+:command:`ST_MakePoint(Longitude, Latitude)`
+  Retourne un nouveau point. Note : ordre des coordonnÃ©es (longitude puis latitude).
 
 :command:`ST_GeomFromText(WellKnownText, srid)`
@@ -17,7 +17,7 @@
 
 :command:`ST_Expand(geometry, Radius)`
-  Retourne une nouvelle gÃ©omÃ©trie qui est une extension de l'Ã©tendue de la gÃ©omÃ©trie passÃ© en argument. Cette fonction est utile pour crÃ©er des envelopes pour des recherches utilisants les indexations.
+  Retourne une nouvelle gÃ©omÃ©trie qui est une extension de l'Ã©tendue de la gÃ©omÃ©trie passÃ©e en argument. Cette fonction est utile pour crÃ©er des enveloppes pour des recherches utilisant les indexations.
 
-Srotie
+Sorties
 -------
 
@@ -31,15 +31,15 @@
   Retourne une gÃ©omÃ©trie au format "standard" `GeoJSON <http://geojson.org>`_.
 
-Measures
-------------
+Mesures
+-------
 
 :command:`ST_Area(geometry)`
-  Retourne l'aire d'une gÃ©omÃ©trie dans l'unitÃ© du systÃšme de rÃ©fÃ©rences spatiales.
+  Retourne l'aire d'une gÃ©omÃ©trie dans l'unitÃ© du systÃšme de rÃ©fÃ©rence spatiale.
 
 :command:`ST_Length(geometry)`
-  Retourne la longueur de la gÃ©omÃ©trie dans l'unitÃ© du systÃšme de rÃ©fÃ©rences spatiales.
+  Retourne la longueur de la gÃ©omÃ©trie dans l'unitÃ© du systÃšme de rÃ©fÃ©rence spatiale.
 
 :command:`ST_Perimeter(geometry)`
-  Retourne le pÃ©rimÃ©tre de la gÃ©omÃ©trie dans l'unitÃ© du systÃšme de rÃ©fÃ©rences spatiales.
+  Retourne le pÃ©rimÃštre de la gÃ©omÃ©trie dans l'unitÃ© du systÃšme de rÃ©fÃ©rence spatiale.
 
 :command:`ST_NumPoints(linestring)`
@@ -49,22 +49,23 @@
   Retourne le nombre de contours dans un polygone.
 
-:command:`ST_NumGeometries(geometry)` 
-  Retourne le nombre de gÃ©omÃ©tries dans une collections de gÃ©omÃ©tries.
+:command:`ST_NumGeometries(geometry)`
+  Retourne le nombre de gÃ©omÃ©tries dans une collection de gÃ©omÃ©tries.
 
 Relations
--------------
+---------
 
 :command:`ST_Distance(geometry, geometry)`
-  Retourne la distance entre deux gÃ©omÃ©tries dans l'unitÃ© du  systÃšme de rÃ©fÃ©rences spatiales.
+  Retourne la distance entre deux gÃ©omÃ©tries dans l'unitÃ© du  systÃšme de rÃ©fÃ©rence spatiale.
 
-:command:`ST_DWithin(geometry, geometry, radius)` 
-  Retourne vrai si les gÃ©omÃ©tries sont distant d'un rayon de l'autre, sinon faux.
+:command:`ST_DWithin(geometry, geometry, radius)`
+  Retourne TRUE si les gÃ©omÃ©tries sont distantes d'un rayon de l'autre, sinon FALSE.
 
 :command:`ST_Intersects(geometry, geometry)`
-  Retourne vrai si les gÃ©omÃ©tries sont disjointes, sinon faux.
+  Retourne TRUE si les gÃ©omÃ©tries sont disjointes, sinon FALSE.
 
 :command:`ST_Contains(geometry, geometry)`
-  Retourne vrai si la premiÃšre gÃ©omÃ©trie est totalement contenu dans la seconde, sinon faux.
+  Retourne TRUE si la premiÃšre gÃ©omÃ©trie est totalement contenue dans la seconde, sinon FALSE.
 
 :command:`ST_Crosses(geometry, geometry)`
-  Retourne vrai si une ligne ou les contours d'un polygone croisent une ligne ou un contour de polygone, sinon faux.
+  Retourne TRUE si une ligne ou les contours d'un polygone croisent une ligne ou un contour de polygone, sinon FALSE.
+
Index: trunk/workshop-foss4g/about_data.rst
===================================================================
--- trunk/workshop-foss4g/about_data.rst	(revision 61)
+++ trunk/workshop-foss4g/about_data.rst	(revision 62)
@@ -4,5 +4,5 @@
 ==================================
 
-Les donnÃ©es utilisÃ©es dans ces travaux pratiques sont quatre shapefiles de la ville de New York, et une table attributaire des variables socio-dÃ©mographiques de la ville. Nous les avons charger sous forme de tables PostGIS et nous ajouterons les donnÃ©es  socio-dÃ©mographiques plus tard.
+Les donnÃ©es utilisÃ©es dans ces travaux pratiques sont quatre shapefiles de la ville de New York, et une table attributaire des variables socio-dÃ©mographiques de la ville. Nous les avons chargÃ©s sous forme de tables PostGIS et nous ajouterons les donnÃ©es  socio-dÃ©mographiques plus tard.
 
 Cette partie fournit le nombre d'enregistrements et les attributs de chacun de nos ensembles de donnÃ©es. Ces valeurs attributaires et les relations sont essentielles pour nos futures analyses.
@@ -13,10 +13,10 @@
 -----------------
 
-Un bloc ressencÃ© est la plus petite entitÃ© gÃ©ographique pour laquelle un ressencement est raportÃ©. Toutes les couches reprÃ©sentant les niveaux suppÃ©rieurs (rÃ©gions, zones de mÃ©tro, comtÃ©s) peuvent Ãªtre contruites Ã  partir de ces blocs. Nous avons attachÃ© des donnÃ©es dÃ©mographiques aux blocs.
+Un bloc recensÃ© est la plus petite entitÃ© gÃ©ographique pour laquelle un recensement est rapportÃ©. Toutes les couches reprÃ©sentant les niveaux supÃ©rieurs (rÃ©gions, zones de mÃ©tro, comtÃ©s) peuvent Ãªtre contruites Ã  partir de ces blocs. Nous avons attachÃ© des donnÃ©es dÃ©mographiques aux blocs.
 
 Nombre d'enregistrements : 36592
 
 .. list-table::
-   :widths: 20 80 
+   :widths: 20 80
 
    * - **blkid**
@@ -29,5 +29,5 @@
      - Nombre de personnes se dÃ©clarant comme de couleur noire
    * - **popn_nativ**
-     - Nombre de personnes se dÃ©clarant comme natif d'amÃ©rique du nord
+     - Nombre de personnes se dÃ©clarant comme natif d'AmÃ©rique du nord
    * - **popn_asian**
      - Nombre de personnes se dÃ©clarant comme asiatique
@@ -46,31 +46,31 @@
 
 .. figure:: ./screenshots/nyc_census_blocks.png
-   
-   *Pourcentage de la population qui est de couleur noire* 
 
-.. note:: 
+   *Pourcentage de la population qui est de couleur noire*
 
-    Pour disposer des donnÃ©es d'un recensement dans votre SIG, vous avez besoin de joindre deux informations: Les donnÃ©es socio-dÃ©mographiques et les limites gÃ©ographiques des blocs/quartiers. Il existe plusieurs moyen de se les procurer, dans notre cas elles ont Ã©tÃ© rÃ©cupÃ©rÃ©es sur le site Internet du Census Bureau's `American FactFinder <http://factfinder.census.gov>`_. 
-    
+.. note::
+
+    Pour disposer des donnÃ©es d'un recensement dans votre SIG, vous avez besoin de joindre deux informations: Les donnÃ©es socio-dÃ©mographiques et les limites gÃ©ographiques des blocs/quartiers. Il existe plusieurs moyen de se les procurer, dans notre cas, elles ont Ã©tÃ© rÃ©cupÃ©rÃ©es sur le site Internet du Census Bureau's `American FactFinder <http://factfinder.census.gov>`_.
+
 nyc_neighborhoods
 -----------------
 
-Les quartiers de New York 
+Les quartiers de New York
 
 Nombre d'enregistrements: 129
 
 .. list-table::
-   :widths: 20 80 
+   :widths: 20 80
 
    * - **name**
      - Nom du quartier
    * - **boroname**
-     - Name de la section dans New York (Manhattan, The Bronx, Brooklyn, Staten Island, Queens)
+     - Nom de la section dans New York (Manhattan, The Bronx, Brooklyn, Staten Island, Queens)
    * - **the_geom**
      - Limite polygonale du quartier
-   
+
 .. figure:: ./screenshots/nyc_neighborhoods.png
 
-    *Les quartiers de New York* 
+    *Les quartiers de New York*
 
 nyc_streets
@@ -82,5 +82,5 @@
 
 .. list-table::
-   :widths: 20 80 
+   :widths: 20 80
 
    * - **name**
@@ -92,10 +92,10 @@
    * - **the_geom**
      - Ligne du centre de la rue.
-   
+
 .. figure:: ./screenshots/nyc_streets.png
 
      *Les rues de New York (les rues principales apparaissent en rouge)*
 
-   
+
 nyc_subway_stations
 -------------------
@@ -132,11 +132,11 @@
 .. note::
 
-   La donnÃ©e ``nyc_census_sociodata`` est une table attributaire. Nous devrons nous connecter aux gÃ©omÃ©tries correspondant Ã  la zone du recenssement avant de conduire toute analyse spatiale .
-   
+   La donnÃ©e ``nyc_census_sociodata`` est une table attributaire. Nous devrons nous connecter aux gÃ©omÃ©tries correspondant Ã  la zone du recensement avant de conduire toute analyse spatiale .
+
 .. list-table::
    :widths: 20 80
 
    * - **tractid**
-     - Un code Ã  11 chiffre qui identifie chaque secteur de recessement. **tract**. Eg: 36005000100
+     - Un code Ã  11 chiffre qui identifie chaque secteur de recensement. **tract**. Eg: 36005000100
    * - **transit_total**
      - Nombre de travailleurs dans le secteur
@@ -146,5 +146,5 @@
      - Nombre de travailleurs dans le secteur utilisant un vÃ©hicule privÃ©
    * - **transit_other**
-     - Nombre de travailleurs dans le secteur utilisant un autre moyen de transport 
+     - Nombre de travailleurs dans le secteur utilisant un autre moyen de transport
    * - **transit_time_mins**
      - Nombre total de minutes passÃ©es dans les transports par l'ensemble des travailleurs du secteur (minutes)
@@ -152,5 +152,5 @@
      - Nombre de familles dans le secteur
    * - **family_income_median**
-     - Revenu mÃ©diant par famille du secteur (dollars)
+     - Revenu mÃ©dian par famille du secteur (dollars)
    * - **family_income_aggregate**
      -  Revenu total de toutes les familles du secteur (dollars)
@@ -164,4 +164,4 @@
      - Nombre de personnes ayant un diplÃŽme de lycÃ©e
    * - **edu_graduate_dipl**
-     - Nombre de personnes ayant un diplÃŽme de collÃšge 
+     - Nombre de personnes ayant un diplÃŽme de collÃšge
 
Index: trunk/workshop-foss4g/glossary.rst
===================================================================
--- trunk/workshop-foss4g/glossary.rst	(revision 61)
+++ trunk/workshop-foss4g/glossary.rst	(revision 62)
@@ -2,10 +2,10 @@
 
 Annexes B : Glossaire
-====================
+=====================
 
 .. glossary::
 
     CRS
-        Un "systÃšme de rÃ©fÃ©rences spatiales". La combinaison d'un systÃšme de coordonnÃ©e gÃ©ographiques et un systÃšme de projection.
+        Un "systÃšme de rÃ©fÃ©rence spatiale". La combinaison d'un systÃšme de coordonnÃ©ee gÃ©ographiques et un systÃšme de projection.
 
     GDAL
@@ -13,17 +13,17 @@
 
     GeoJSON
-        "Javascript Object Notation", un format texte qui est trÃšs rapide et qui permet de reprÃ©senter des objet JavaScript. En spatial, la spÃ©cification Ã©tendue `GeoJSON <http://geojson.org>`_ est courramment utilisÃ©e.
-    
+        "Javascript Object Notation", un format texte qui est trÃšs rapide et qui permet de reprÃ©senter des objets JavaScript. En spatial, la spÃ©cification Ã©tendue `GeoJSON <http://geojson.org>`_ est couramment utilisÃ©e.
+
     SIG
-        `SystÃšme d'Information GÃ©ographique <http://en.wikipedia.org/wiki/Geographic_information_system>`_ capture, stock, analyse, gÃšre, et prÃ©sente les donnÃ©es qui sont reliÃ©es Ã  la zone gÃ©ographique.
-    
+        `SystÃšme d'Information GÃ©ographique <http://en.wikipedia.org/wiki/Geographic_information_system>`_ capture, stocke, analyse, gÃšre, et prÃ©sente les donnÃ©es qui sont reliÃ©es Ã  la zone gÃ©ographique.
+
     GML
         `Geography Markup Language <http://www.opengeospatial.org/standards/gml>`_.  Le GML est un format standard XML :term:`OGC` pour reprÃ©senter les donnÃ©es gÃ©ographiques.
 
     JSON
-        "Javascript Object Notation", un format text qui est trÃšs rapide permettant de stocker les objets JavaScript. Au niveau spatial, la spÃ©cification Ã©tendu `GeoJSON <http://geojson.org>`_ est courramment utilisÃ©.
+        "Javascript Object Notation", un format texte qui est trÃšs rapide et permet de stocker des objets JavaScript. Au niveau spatial, la spÃ©cification Ã©tendue `GeoJSON <http://geojson.org>`_ est couramment utilisÃ©.
 
     JSTL
-        "JavaServer Page Template Library", est une bibliothÃšque pour :term:`JSP` qui encapsule plusieurs fonctionalitÃ©s de bases gÃ©rÃ© en JSP (requÃªte de bases de donnÃ©es, itÃ©ration, conditionnel) dans un syntaxe tiÃšrce.
+        "JavaServer Page Template Library", est une bibliothÃšque pour :term:`JSP` qui encapsule plusieurs fonctionnalitÃ©s de bases gÃ©rÃ©es en JSP (requÃªte de bases de donnÃ©es, itÃ©ration, conditionnel) dans un syntaxe tierce.
 
     JSP
@@ -31,42 +31,40 @@
 
     KML
-        "Keyhole Markup Language", le format XML utilisÃ© par Google Earth. Google Earth. Il fÃ»t Ã  l'origine dÃ©veloppÃ© par la sociÃ©tÃ© "Keyhole", ce qui expliqe sa prÃ©sence (maintenant obscure)  dans le nom du format.
+        "Keyhole Markup Language", le format XML utilisÃ© par Google Earth. Google Earth. Il fÃ»t Ã  l'origine dÃ©veloppÃ© par la sociÃ©tÃ© "Keyhole", ce qui explique sa prÃ©sence (maintenant obscure)  dans le nom du format.
 
     OGC
-        Open Geospatial Consortium <http://opengeospatial.org/> (OGC) est une organisation qui dÃ©veloppent des spÃ©cifications pour les services spatiaux.
+        Open Geospatial Consortium `<http://opengeospatial.org/>`_ (OGC) est une organisation qui dÃ©veloppe des spÃ©cifications pour les services spatiaux.
 
     OSGeo
-         Open Source Geospatial Foundation <http://osgeo.org> (OSGeo) est une association Ã  but non lucratif dÃ©diÃ© Ã  la promotion et au support des logiciels cartographiques open source.
+         Open Source Geospatial Foundation `<http://osgeo.org>`_ (OSGeo) est une association Ã  but non lucratif dÃ©diÃ©e Ã  la promotion et au support des logiciels cartographiques open source.
 
     SFSQL
-        La spÃ©cification `Simple Features for SQL <http://www.opengeospatial.org/standards/sfs>`_ (SFSQL) de l':term:`OGC` dÃ©finit les types et les fonctions qui doivent Ãªtre disponibles dans une base de donnÃ©es spatiales.
+        La spÃ©cification `Simple Features for SQL <http://www.opengeospatial.org/standards/sfs>`_ (SFSQL) de l':term:`OGC` dÃ©finit les types et les fonctions qui doivent Ãªtre disponibles dans une base de donnÃ©es spatiale.
 
     SLD
-        Les spÃ©cifications `Styled Layer Descriptor <http://www.opengeospatial.org/standards/sld>`_ (SLD) de l':term:`OGC` dÃ©finissent un format permettant de dÃ©crire la maniÃšre d'afficher des donnÃ©esvectorielles.
+        Les spÃ©cifications `Styled Layer Descriptor <http://www.opengeospatial.org/standards/sld>`_ (SLD) de l':term:`OGC` dÃ©finissent un format permettant de dÃ©crire la maniÃšre d'afficher des donnÃ©es vectorielles.
 
     SRID
-        "Spatial reference ID" est un identifiant unique assignÃ© Ã  un systÃšme de coordonnÃ©es gÃ©ographique particulier. La table PostGIS **spatial_ref_sys** contient un loarge collection de valeurs de SRID connus.
+        "Spatial reference ID" est un identifiant unique assignÃ© Ã  un systÃšme de coordonnÃ©es gÃ©ographiques particulier. La table PostGIS **spatial_ref_sys** contient une large collection de valeurs de SRID connus.
 
     SQL
-        "Structured query language" est un standard permettant de requÃªter les bases de donnÃ©es relationnelle. RÃ©fÃ©rence http://en.wikipedia.org/wiki/SQL.
+        "Structured query language" est un standard permettant de requÃªter les bases de donnÃ©es relationnelles. RÃ©fÃ©rence http://en.wikipedia.org/wiki/SQL.
 
     SQL/MM
-        `SQL Multimedia <http://www.fer.hr/_download/repository/SQLMM_Spatial-_The_Standard_to_Manage_Spatial_Data_in_Relational_Database_Systems.pdf>`_; includes several sections on extended types, including a substantial section on spatial types.
+        `SQL Multimedia <http://www.fer.hr/_download/repository/SQLMM_Spatial-_The_Standard_to_Manage_Spatial_Data_in_Relational_Database_Systems.pdf>`_; spÃ©cification contenant diffÃ©rentes sections sur les types Ã©tendues. Elle inclue une section substantielle sur les types spatiaux.
 
     SVG
-        "Scalable vector graphics" est une famille de spÃ©cifications basÃ© sur le format XML pour dÃ©crire des objet graphiques en 2 dimensions, aussi bien statiques que dynamiques (par exemple interactive ou animÃ©). RÃ©ference : http://en.wikipedia.org/wiki/Scalable_Vector_Graphics.
+        "Scalable vector graphics" est une famille de spÃ©cifications basÃ© sur le format XML pour dÃ©crire des objet graphiques en 2 dimensions, aussi bien statiques que dynamiques (par exemple interactif ou animÃ©). RÃ©ference : http://en.wikipedia.org/wiki/Scalable_Vector_Graphics.
 
     WFS
-        Les spÃ©cifications `Web Feature Service <http://www.opengeospatial.org/standards/wfs>`_ (WFS) de l':term:`OGC` dÃ©finit une interface pour lire et Ã©crire des donnÃ©es gÃ©ographiques Ã  travers internet.
+        La spÃ©cification `Web Feature Service <http://www.opengeospatial.org/standards/wfs>`_ (WFS) de l':term:`OGC` dÃ©finit une interface pour lire et Ã©crire des donnÃ©es gÃ©ographiques Ã  travers internet.
 
     WMS
-        Les spÃ©cifications `Web Map Service <http://www.opengeospatial.org/standards/wms>`_ (WMS) de l':term:`OGC` dÃ©finit une interface pour requÃªter une carte Ã  travers internet.
+        La spÃ©cification `Web Map Service <http://www.opengeospatial.org/standards/wms>`_ (WMS) de l':term:`OGC` dÃ©finit une interface pour requÃªter une carte Ã  travers internet.
 
     WKB
-        "Well-known binary". Fait rÃ©fÃ©rence Ã  la reprÃ©sentation binaire desgÃ©omÃ©tries comme dÃ©crit dans les spÃ©cifications Simple Features for SQL (:term:`SFSQL`).
-        
+        "Well-known binary". Fait rÃ©fÃ©rence Ã  la reprÃ©sentation binaire des gÃ©omÃ©tries comme dÃ©crit dans les spÃ©cifications Simple Features for SQL (:term:`SFSQL`).
+
     WKT
         "Well-known text". Fait rÃ©fÃ©rence Ã  la reprÃ©sentation textuelle de gÃ©omÃ©tries, avec des chaÃ®nes commenÃ§ant par "POINT", "LINESTRING", "POLYGON", etc. Il peut aussi faire rÃ©fÃ©rence Ã  la reprÃ©sentation textuelle d'un :term:`CRS`, avec une chaÃ®ne commenÃ§ant par "PROJCS", "GEOGCS", etc.  Les reprÃ©sentations au format Well-known text sont des standards de l':term:`OGC`, mais n'ont pas leur propres documents de spÃ©cifications. La premiÃšre description du WKT (pour les gÃ©omÃ©tries et pour les CRS) apparaissent dans les spÃ©cifications :term:`SFSQL` 1.0.
-        
 
-  
Index: trunk/workshop-foss4g/tuning.rst
===================================================================
--- trunk/workshop-foss4g/tuning.rst	(revision 61)
+++ trunk/workshop-foss4g/tuning.rst	(revision 62)
@@ -4,11 +4,11 @@
 =================================================
 
-PostgreSQL est une base de donnÃ©es trÃšs versatile, capable de tourner dans des environnements ayant des ressources trÃšs limitÃ©s et partageant ces ressources avec un grand nombre d'autres applications. Afin d'assurer qu'il tournera convenablement dans ces environnements, la configuration par dÃ©faut est trÃšs peu consomatrice de ressource mais terriblement innadapatÃ© pour des bases de donnÃ©es hautes-performances en production. Ajoutez Ã  cela le fait que les base de donnÃ©es spatiales ont diffÃ©rent type d'utilisation, et que les donnÃ©es sont gÃ©nÃ©ralement plus grandes que les autres types de donnÃ©es, vous en arriverez Ã  la conclusion que les parÃštres par dÃ©faut ne sont pas appropriÃ© pour notre utilisasion.
+PostgreSQL est une base de donnÃ©es trÃšs versatile, capable de tourner dans des environnements ayant des ressources trÃšs limitÃ©es et partageant ces ressources avec un grand nombre d'autres applications. Afin d'assurer qu'elle tournera convenablement dans ces environnements, la configuration par dÃ©faut est trÃšs peu consommatrice de ressources mais terriblement inadaptÃ©e pour des bases de donnÃ©es hautes-performances en production. Ajoutez Ã  cela le fait que les bases de donnÃ©es spatiales ont diffÃ©rents types d'utilisation, et que les donnÃ©es sont gÃ©nÃ©ralement plus grandes que les autres types de donnÃ©es, vous en arriverez Ã  la conclusion que les paramÃštres par dÃ©faut ne sont pas appropriÃ©s pour notre utilisation.
 
-Tout ces paramÃštres de configuration peuvent Ãªtre Ã©ditÃ©s dans le fichier de configuration de la base de donnÃ©es : :file:`C:\\Documents and Settings\\%USER\\.opengeo\\pgdata\\%USER`.  Le contenu du fichier est du texte et il peut donc Ãªtre ouvert avec l'outils d'Ã©dition de fichiers de votre choix (Notepad par exemple). Les modifications apportÃ©es Ã  ce fichier ne seront effectives que lors du redÃ©marrage du serveur.
+Tous ces paramÃštres de configuration peuvent Ãªtre Ã©ditÃ©s dans le fichier de configuration de la base de donnÃ©es : :file:`C:\\Documents and Settings\\%USER\\.opengeo\\pgdata\\%USER`.  Le contenu du fichier est du texte et il peut donc Ãªtre ouvert avec l'outil d'Ã©dition de fichiers de votre choix (Notepad par exemple). Les modifications apportÃ©es Ã  ce fichier ne seront effectives que lors du redÃ©marrage du serveur.
 
 .. image:: ./tuning/conf01.png
 
-Une faÃ§on simple d'Ã©diter ce fichier de configuration est d'utiliser l'outils nommÃ© : "Backend Configuration Editor".  Depuis pgAdmin, allez dans *File > Open postgresql.conf...*. Il vous sera demandÃ© le chemin du fichier, naviguez dans votre arborescence jusqu'au fichier :file:`C:\\Documents and Settings\\%USER\\.opengeo\\pgdata\\%USER`.
+Une faÃ§on simple d'Ã©diter ce fichier de configuration est d'utiliser l'outil nommÃ© : "Backend Configuration Editor".  Depuis pgAdmin, allez dans *File > Open postgresql.conf...*. Il vous sera demandÃ© le chemin du fichier, naviguez dans votre arborescence jusqu'au fichier :file:`C:\\Documents and Settings\\%USER\\.opengeo\\pgdata\\%USER`.
 
 .. image:: ./tuning/conf02.png
@@ -16,12 +16,12 @@
 .. image:: ./tuning/conf03.png
 
-Cette partie dÃ©crit certains des paramÃštres de configuration qui doivent Ãªtre modifiÃ©s pour la mise ne place d'une base de donnÃ©es spatiale en production. Pour chaque partie, trouvez le bon paramÃštres dans la liste et double cliquez dessus pour l'Ã©diter. Changez le champs *Value* par la valeur que nous recommendons, assurez-vous que le champs est bien activÃ© pui cliquez sur **OK**.
+Cette partie dÃ©crit certains des paramÃštres de configuration qui doivent Ãªtre modifiÃ©s pour la mise ne place d'une base de donnÃ©es spatiale en production. Pour chaque partie, trouvez le bon paramÃštre dans la liste et double cliquez dessus pour l'Ã©diter. Changez le champ *Value* par la valeur que nous recommandons, assurez-vous que le champ est bien activÃ© puis cliquez sur **OK**.
 
-.. note:: Ces valeurs sont seulement celles que nous recommendons, chaque environnement differera et tester les diffÃ©rents paramÃ©trages est toujours nÃ©cessaire pour s'assurer d'utiliser la configuration optimale. Mais dans cette partie nous vous fournissons un bon point de dÃ©part.
+.. note:: Ces valeurs sont seulement celles que nous recommandons, chaque environnement diffÃšrera et tester les diffÃ©rents paramÃ©trages est toujours nÃ©cessaire pour s'assurer d'utiliser la configuration optimale. Mais dans cette partie nous vous fournissons un bon point de dÃ©part.
 
 shared_buffers
 --------------
 
-Alloue la quantitÃ© de mÃ©moire que le serveur de bases de donnÃ©es utilise pour ses segments de mÃ©moires partagÃ©es. Cela est partagÃ© par tout les processus serveur, comme sont nom l'indique. La valeur par dÃ©faut est affligeante et inadaptÃ©e pour une base de donnÃ©es en production.
+Alloue la quantitÃ© de mÃ©moire que le serveur de bases de donnÃ©es utilise pour ses segments de mÃ©moires partagÃ©es. Cela est partagÃ© par tous les processus serveur, comme son nom l'indique. La valeur par dÃ©faut est affligeante et inadaptÃ©e pour une base de donnÃ©es en production.
 
   *Valeur par dÃ©faut* : typiquement 32MB
@@ -34,7 +34,7 @@
 --------
 
-DÃ©finit la quantitÃ© de mÃ©moire que les opÃ©ration interne d'ordonnancement et les tables de hachages peuvent consommer avec le serveur passe Ã  des fichiers sur le disque. Cette valeur dÃ©finit la mÃ©moire disponible pour chaque opÃ©ration complexe, les requÃªtes complexes peuvent avoir plusieurs ordres ou opÃ©ration de hachage tournant en parallÃšle, et chaque client s connectÃ© peut exÃ©cuter une requÃªte. 
+DÃ©finit la quantitÃ© de mÃ©moire que les opÃ©ration internes d'ordonnancement et les tables de hachages peuvent consommer avec le serveur sur le disque. Cette valeur dÃ©finit la mÃ©moire disponible pour chaque opÃ©ration complexe, les requÃªtes complexes peuvent avoir plusieurs ordres ou opÃ©ration de hachage tournant en parallÃšle, et chaque client connectÃ© peut exÃ©cuter une requÃªte.
 
-Vous devez donc considÃ©rer combient de connexions et quel complexitÃ© est attendu dans les requÃªtes avant d'augmenter cette valeur. Le bÃ©nÃ©fice acquis par l'augmentation de cette valeur est que la plupart des opÃ©ration de classification,dont les clause ORDER BY et DISTINCT, les jointures, les agrÃ©gation basÃ© sur les hachages et l'exÃ©cution de requÃªte imbriquÃ©es, pourront Ãªtre rÃ©alisÃ© sans avoir Ã  passer par un stockage sur disque.
+Vous devez donc considÃ©rer combien de connexions et quelle complexitÃ© est attendue dans les requÃªtes avant d'augmenter cette valeur. Le bÃ©nÃ©fice acquis par l'augmentation de cette valeur est que la plupart des opÃ©ration de classification, dont les clause ORDER BY et DISTINCT, les jointures, les agrÃ©gation basÃ©es sur les hachages et l'exÃ©cution de requÃªte imbriquÃ©es, pourront Ãªtre rÃ©alisÃ©es sans avoir Ã  passer par un stockage sur disque.
 
   *Valeur par dÃ©faut* : 1MB
@@ -47,5 +47,5 @@
 --------------------
 
-DÃ©finit la quantitÃ© de mÃ©moire utilisÃ© pour les opÃ©ration de maintenances, dont le nÃ©ttoyage (VACUUM), les indexes et la crÃ©ation de clef Ã©trangÃšres. Comme ces opÃ©ration sont courremment utilisÃ©es, la valeur par dÃ©faut devrait Ãªtre acceptable. Ce paramÃštre peut Ãªtre augmentÃ© dynamiquement Ã  l'exÃ©cution depuis une connexion au serveur avant l'exÃ©cution d'un grand nombre d'appels Ã  :command:`CREATE INDEX` ou :command:`VACUUM` comme le montre la commande suivante.
+DÃ©finit la quantitÃ© de mÃ©moire utilisÃ©e pour les opÃ©ration de maintenance, dont le nettoyage (VACUUM), les index et la crÃ©ation de clefs Ã©trangÃšres. Comme ces opÃ©ration sont couramment utilisÃ©es, la valeur par dÃ©faut devrait Ãªtre acceptable. Ce paramÃštre peut Ãªtre augmentÃ© dynamiquement Ã  l'exÃ©cution depuis une connexion au serveur avant l'exÃ©cution d'un grand nombre d'appels Ã  :command:`CREATE INDEX` ou :command:`VACUUM` comme le montre la commande suivante.
 
   .. code-block:: sql
@@ -57,5 +57,5 @@
   *Valeur par dÃ©faut* : 16MB
 
-  *Valeur recommendÃ©e* : 128MB
+  *Valeur recommandÃ©e* : 128MB
 
 .. image:: ./tuning/conf06.png
@@ -64,11 +64,11 @@
 -----------
 
-DÃ©finit la quantitÃ© de mÃ©moire utilisÃ© pour l'Ã©criture des donnÃ©es dans le journal respectant la rÃšgle du dÃ©faire (WAL). Elle indique que les informations pour annuler les effets d'une opÃ©ration sur un objet doivent Ãªtre Ã©crites dans le journal en mÃ©moire stable avant que l'objet modifiÃ© ne migre sur le disque. Cette rÃšgle permet d'assurer l'intÃ©gritÃ© des donnÃ©es lors d'une reprise aprÃšs dÃ©faillance. En effet,il suffirÃ© de lire le journal pour retrouver l'Ã©tat de la base lors de sont arrÃªt brutal. 
+DÃ©finit la quantitÃ© de mÃ©moire utilisÃ©e pour l'Ã©criture des donnÃ©es dans le journal respectant la rÃšgle du defer (WAL). Elle indique que les informations pour annuler les effets d'une opÃ©ration sur un objet doivent Ãªtre Ã©crites dans le journal en mÃ©moire stable avant que l'objet modifiÃ© ne migre sur le disque. Cette rÃšgle permet d'assurer l'intÃ©gritÃ© des donnÃ©es lors d'une reprise aprÃšs dÃ©faillance. En effet, il suffira de lire le journal pour retrouver l'Ã©tat de la base lors de son arrÃªt brutal.
 
-La taille de ce tampon nÃ©cessite simplement d'Ãªtre suffisament grand pour stoquer les donnÃ©es WAL pour une seule transaction. Alors que la valeur par dÃ©faut est gÃ©nÃ©ralement siffisante, les donnÃ©es spatiales tendent Ã  Ãªtre plus large. Il est donc recommendÃ© d'augmenter la taille spÃ©cifiÃ©e dans ce paramÃštre.
+La taille de ce tampon nÃ©cessite simplement d'Ãªtre suffisament grand pour stocker les donnÃ©es WAL pour une seule transaction. Alors que la valeur par dÃ©faut est gÃ©nÃ©ralement suffisante, les donnÃ©es spatiales tendent Ã  Ãªtre plus larges. Il est donc recommandÃ© d'augmenter la taille spÃ©cifiÃ©e dans ce paramÃštre.
 
   *Valeur par dÃ©faut* : 64kB
 
-  *Valeur recommendÃ©e* : 1MB
+  *Valeur recommandÃ©e* : 1MB
 
 .. image:: ./tuning/conf07.png
@@ -77,11 +77,11 @@
 -------------------
 
-Cette valeur dÃ©finit le nombre maximum de segements des journaux (typiquement 16MB) qui doit Ãªtre remplit entre chaque point de reprises WAL. Un point de reprise WAL est une partie d'une sÃ©quence de transactions pour lequel on garanti que les fichiers de donnÃ©es ont Ã©tÃ© mis Ã  jour avec toutes les requÃªtes prÃ©cÃ©dent ce point. Ã ce moment-lÃ  toutes les pages sont punaisÃ©es sur le disque et les point de reprises sont Ã©crit dans le fichier de journal. Cela permet au precessus de reprise aprÃšs dÃ©faillance de trouver les dernierspoints de reprises et applique toute les lignes suivantes pour rÃ©cupÃ©rer l'Ã©tat des donnÃ©es avant la dÃ©faillance.
+Cette valeur dÃ©finit le nombre maximum de segments des journaux (typiquement 16MB) qui doit Ãªtre remplit entre chaque point de reprise WAL. Un point de reprise WAL est une partie d'une sÃ©quence de transactions pour lequel on garantit que les fichiers de donnÃ©es ont Ã©tÃ© mis Ã  jour avec toutes les requÃªtes prÃ©cÃ©dant ce point. Ã ce moment-lÃ  toutes les pages sont punaisÃ©es sur le disque et les points de reprise sont Ã©crits dans le fichier de journal. Cela permet au processus de reprise aprÃšs dÃ©faillance de trouver les derniers points de reprise et applique toute les lignes suivantes pour rÃ©cupÃ©rer l'Ã©tat des donnÃ©es avant la dÃ©faillance.
 
-Ãtant donnÃ©e que les point de reprises nÃ©cessitent un punaisage de toutes le pages ayant Ã©tÃ© modifiÃ©e sur le disque, cela va crÃ©er une charge d'entrÃ©es/sorties significative. Le mÃªme arguement que prÃ©cÃ©demment s'applique ici, les donnÃ©es spatiales sont assez grandes pour contrebalancer l'optimisation de donnÃ©es non spatiales. Augmenter cette valeur limitera le nombre de points de reprise, mais impliquera un plus redÃ©marrage en cas de dÃ©faillance.
+Ãtant donnÃ© que les points de reprise nÃ©cessitent un punaisage de toutes le pages ayant Ã©tÃ© modifiÃ©es sur le disque, cela va crÃ©er une charge d'entrÃ©es/sorties significative. Le mÃªme argument que prÃ©cÃ©demment s'applique ici, les donnÃ©es spatiales sont assez grandes pour contrebalancer l'optimisation de donnÃ©es non spatiales. Augmenter cette valeur limitera le nombre de points de reprise, mais impliquera un redÃ©marrage plus lent en cas de dÃ©faillance.
 
   *Valeur par dÃ©faut* : 3
 
-  *Valauer recommendÃ©e* : 6
+  *Valeur recommandÃ©e* : 6
 
 .. image:: ./tuning/conf08.png
@@ -90,5 +90,5 @@
 ----------------
 
-Cette valeur sans unitÃ© reprÃ©sente le coÃ»t d'accÃšs allÃ©atoire au page du disque. Cete valeur est relative au autres paramÃštres de coÃ»t notemment l'accÃšs sÃ©quentiel au pages, et le coÃ»t des opÃ©ration processeur. Bien qu'il n'y ai pas de valeur magique ici, la valeur par dÃ©faut est gÃ©nÃ©ralement trop faible. Cette valeur peut Ãªtre affectÃ©e dynamiquement par session en utilisant la commande ``SET random_page_cost TO 2.0``.
+Cette valeur sans unitÃ© reprÃ©sente le coÃ»t d'accÃšs alÃ©atoire Ã  une page du disque. Cette valeur est relative aux autres paramÃštres de coÃ»t notamment l'accÃšs sÃ©quentiel aux pages, et le coÃ»t des opÃ©rations processeur. Bien qu'il n'y ait pas de valeur magique ici, la valeur par dÃ©faut est gÃ©nÃ©ralement trop faible. Cette valeur peut Ãªtre affectÃ©e dynamiquement par session en utilisant la commande ``SET random_page_cost TO 2.0``.
 
   *Valeur par dÃ©faut* : 4.0
@@ -97,9 +97,9 @@
 
 .. image:: ./tuning/conf09.png
-   
+
 seq_page_cost
 -------------
 
-C'est une paramÃštre qui controle le coÃ»t des accÃšs sÃ©quentiel au pages. Il n'est gÃ©nÃ©ralement pas nÃ©cessaire de modifier cette valeur maus la diffÃ©rence entre cette valeur et la valeurs ``random_page_cost`` affecte drastiquement le choix fait par le plannificateur de requÃªtes. Cette valeur peut aussi Ãªtre affectÃ©e depuis une session.
+C'est une paramÃštre qui contrÃŽle le coÃ»t des accÃšs sÃ©quentiels aux pages. Il n'est gÃ©nÃ©ralement pas nÃ©cessaire de modifier cette valeur mais la diffÃ©rence entre cette valeur et la valeur ``random_page_cost`` affecte drastiquement le choix fait par le planificateur de requÃªtes. Cette valeur peut aussi Ãªtre affectÃ©e depuis une session.
 
   *Valeur par dÃ©faut* : 1.0
@@ -112,10 +112,8 @@
 --------------------------
 
-AprÃšs avoir rÃ©alisÃ© ces changements mentionÃ© dans cette partie sauvez-les puis rechargez la configuration.
+AprÃšs avoir rÃ©alisÃ© les changements mentionnÃ©s dans cette partie sauvez-les puis rechargez la configuration.
 
- * Ceci se fait en cliquant avec le bouton droit sur le nom du serveur (``PostgreSQL 8.4 on localhost:54321``) depuis pgAdmin, selectionnez *Disconnect*. 
- * Cliquez sur le bouton *Shutdown* depuis le Dashboard OpenGeo, puis cliquez sur *Start*. 
+ * Ceci se fait en cliquant avec le bouton droit sur le nom du serveur (``PostgreSQL 8.4 on localhost:54321``) depuis pgAdmin, selectionnez *Disconnect*.
+ * Cliquez sur le bouton *Shutdown* depuis le Dashboard OpenGeo, puis cliquez sur *Start*.
  * Pour finir reconnectez-vous au serveur depuis pgAdmin (cliquez avec le bouton droit sur le serveur puis sÃ©lectionnez *Connect*).
- 
- 
- 
+
