Index: trunk/workshop-foss4g/projection.rst
===================================================================
--- trunk/workshop-foss4g/projection.rst	(revision 81)
+++ trunk/workshop-foss4g/projection.rst	(revision 1)
@@ -1,45 +1,45 @@
 .. _projection:
 
-Partie 15 : Projections des donnÃ©es
-===================================
+Section 15: Projecting Data
+===========================
 
-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.
+The earth is not flat, and there is no simple way of putting it down on a flat paper map (or computer screen), so people have come up with all sorts of ingenious solutions, each with pros and cons. Some projections preserve area, so all objects have a relative size to each other; other projections preserve angles (conformal) like the Mercator projection; some projections try to find a good intermediate mix with only little distortion on several parameters. Common to all projections is that they transform the (spherical) world onto a flat cartesian coordinate system, and which projection to choose depends on how you will be using the data.
 
-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)`.
+We've already encountered projections when we :ref:`loaded our nyc data <loading_data>`.  (Recall that pesky SRID 26918).  Sometimes, however, you need to transform and re-project between spatial reference systems. PostGIS includes built-in support for changing the projection of data, using the :command:`ST_Transform(geometry, srid)` function. For managing the spatial reference identifiers on geometries, PostGIS provides the :command:`ST_SRID(geometry)` and :command:`ST_SetSRID(geometry, srid)` functions.
 
-Nous pouvons vÃ©rifier le SRID de nos donnÃ©es avec la commande :command:`ST_SRID` :
+We can confirm the SRID of our data with the :command:`ST_SRID` command:
 
 .. code-block:: sql
 
   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<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``
+  
+And what is definition of "26918"? As we saw in ":ref:`loading data section <loading_data>`", the definition is contained in the ``spatial_ref_sys`` table. In fact, **two** definitions are there. The "well-known text" (:term:`WKT`) definition is in the ``srtext`` column, and there is a second definition in "proj.4" format in the ``proj4text`` column.
 
 .. 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 :
+   
+In fact, for the internal PostGIS re-projection calculations, it is the contents of the ``proj4text`` column that are used. For our 26918 projection, here is the proj.4 text:
 
 .. code-block:: sql
 
   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 
+  
+In practice, both the ``srtext`` and the ``proj4text`` columns are important: the ``srtext`` column is used by external programs like `GeoServer <http://geoserver.org>`_, `uDig <udig.refractions.net>`_, and `FME <http://www.safe.com/>`_  and others; the ``proj4text`` column is used internally.
 
-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.
+Comparing Data
+--------------
 
-Comparaison de donnÃ©es
-----------------------
+Taken together, a coordinate and an SRID define a location on the globe. Without an SRID, a coordinate is just an abstract notion. A âCartesianâ coordinate plane is defined as a âflatâ coordinate system placed on the surface of Earth. Because PostGIS functions work on such a plane, comparison operations require that both geometries be represented in the same SRID.
 
-CombinÃ©s, une coordonnÃ©e et un SRID dÃ©finissent une position sur le globe. Sans le SRID, une coordonnÃ©e est juste une notion abstraite. Un systÃšme de coordonnÃ©es "cartÃ©siennes" est dÃ©finit comme un systÃšme de coordonnÃ©es "plat" sur la surface de la Terre. Puisque les fonctions de PostGIS utilisent cette surface plane, les opÃ©rations de comparaison nÃ©cessitent que l'ensemble des objets gÃ©omÃ©triques soient reprÃ©sentÃ©s dans le mÃªme systÃšme, ayant le mÃªme SRID.
-
-Si vous utilisÃ© des gÃ©omÃ©tries avec diffÃ©rents SRID vous obtiendrez une erreur comme celle-ci :
+If you feed in geometries with differing SRIDs you will just get an error:
 
 .. code-block:: sql
@@ -54,34 +54,34 @@
   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 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.
+   Be careful of getting too happy with using :command:`ST_Transform` for on-the-fly conversion. Spatial indexes are built using SRID of the stored geometries.  If comparison are done in a different SRID, spatial indexes are (often) not used. It is best practice to choose **one SRID** for all the tables in your database. Only use the transformation function when you are reading or writing data to external applications.
 
 
-Transformer les donnÃ©es
------------------------
+Transforming Data
+-----------------
 
-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.
+If we return to our proj4 definition for SRID 26918, we can see that our working projection is UTM (Universal Transverse Mercator) of zone 18, with meters as the unit of measurement.
 
 ::
 
-   +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".
+Let's convert some data from our working projection to geographic coordinates -- also known as "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 lequel nous souhaitons re-projeter. En d'autre terme, quel est le SRID des coordonnÃ©es gÃ©ographiques ?
+To convert data from one SRID to another, you must first verify that your geometry has a valid SRID. Since we have already confirmed a valid SRID, we next need the SRID of the projection to transform into. In other words, what is the SRID of geographic coordinates?
 
-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.
+The most common SRID for geographic coordinates is 4326, which corresponds to "longitude/latitude on the WGS84 spheroid". You can see the definition at the spatialreference.org site:
 
   http://spatialreference.org/ref/epsg/4326/
-
-Vous pouvez aussi rÃ©cupÃ©rer les dÃ©finitions dans la table  ``spatial_ref_sys`` :
+  
+You can also pull the definitions from the ``spatial_ref_sys`` table:
 
 .. code-block:: sql
 
   SELECT srtext FROM spatial_ref_sys WHERE srid = 4326;
-
+  
 ::
 
@@ -94,28 +94,28 @@
     AUTHORITY["EPSG","4326"]]
 
-Essayons de convertir les cordonnÃ©es de la station 'Broad St' :
+Let's convert the coordinates of the 'Broad St' subway station into geographics:
 
 .. 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. 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.
+If you load data or create a new geometry without specifying an SRID, the SRID value will be -1.  Recall in :ref:`geometries`, that when we created our ``geoemetries`` table we didn't specify an SRID. If we query our database, we should expect all the ``nyc_`` tables to have an SRID of 26918, while  the ``geometries`` table defaulted to an SRID of -1.
 
-Pour visualiser la table d'assignation des SRID, interrogez la table ``geometry_columns`` de la base de donnÃ©es.
+To view a table's SRID assignment, query the database's ``geometry_columns`` table.
 
 .. 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 transformer dans d'autres systÃšmes de projections.
+  
+However, if you know what the SRID of the coordinates is supposed to be, you can set it post-facto, using :command:`ST_SetSRID` on the geometry. Then you will be able to transform the geometry into other systems.
 
 .. code-block:: sql
@@ -137,13 +137,11 @@
    FROM geometries;
 
-Liste des fonctions
--------------------
+Function List
+-------------
+`ST_AsText <http://postgis.org/docs/ST_AsText.html>`_: Returns the Well-Known Text (WKT) representation of the geometry/geography without SRID metadata.
 
-`ST_AsText <http://postgis.org/docs/ST_AsText.html>`_: retourne la reprÃ©sentation au format Well-Known Text (WKT) sans la mÃ©tadonnÃ©e SRID.
+`ST_SetSRID(geometry, srid) <http://postgis.org/docs/ST_SetSRID.html>`_: Sets the SRID on a geometry to a particular integer value.
 
-`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>`_: Returns the spatial reference identifier for the ST_Geometry as defined in spatial_ref_sys table.
 
-`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 avoir 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>`_: Returns a new geometry with its coordinates transformed to the SRID referenced by the integer parameter.
Index: trunk/workshop-foss4g/introduction.rst
===================================================================
--- trunk/workshop-foss4g/introduction.rst	(revision 81)
+++ trunk/workshop-foss4g/introduction.rst	(revision 1)
@@ -1,5 +1,5 @@
 .. _introduction:
 
-Partie 1 : Introduction
+Partie 1 : Introduction 
 ************************
 
@@ -7,194 +7,199 @@
 ============================================
 
-PostGIS est une base de donnÃ©es spatiale. Oracle Spatial et SQL Server 2008 sont aussi des bases de donnÃ©es spatiales. Mais qu'est-ce que cela signifie? Qu'est-ce qui diffÃ©rencie un serveur de base de donnÃ©es spatiales d'un serveur de base de donnÃ©es non spatiale ?
+PostGIS est une base de donnÃ©es spatiales. Oracle Spatial et SQL Server 2008 sont aussi des bases de donnÃ©es spatiales. Mais qu'est-ce que cela signifie, qu'est-ce qui diffÃ©rentie un serveur de base de donnÃ©es spatiales d'un non spatiale ?
 
 La rÃ©ponse courte, est ...
 
-**Les bases de donnÃ©es spatiales permettent le stockage et la manipulation des objets spatiaux comme les autres objets de la base de donnÃ©es.**
-
-Ce qui suit prÃ©sente briÃšvement l'Ã©volution des bases de donnÃ©es spatiales, puis les liens
-entre les donnÃ©es spatiales et la base de donnÃ©es (types de donnÃ©es, index et fonctions).
-
-#. **Types de donnÃ©es spatiales** fait rÃ©fÃ©rence aux gÃ©omÃ©tries de type point, ligne et polygone;
-#. L'**indexation spatiale** est utilisÃ©e pour amÃ©liorer les performances d'exÃ©cution des opÃ©rations spatiales;
-#. Les **fonctions spatiales**, au sens :term:`SQL`, sont utilisÃ©es pour accÃ©der Ã  des propriÃ©tÃ©s ou Ã  des relations spatiales.
-
-UtilisÃ©s de maniÃšre combinÃ©e, les types de donnÃ©es spatiales, les index et les fonctions fournissent une structure flexible pour optimiser les performances et les analyses.
+**Les base de donnÃ©es spatiales permettent les stocage et la manipulation des objets spatiaux comme les autres objets de la base de donnÃ©es.**
+
+Ce qui suit prÃ©sente briÃšvement l'Ã©volution des base de donnÃ©es spatiales, puis les liens
+entre les donnÃ©es spatiales et la base de donnÃ©es (types de donnÃ©es, indexes et fonctions).
+
+#. **Types de donnÃ©es spatiales** fait rÃ©fÃ©rence aux gÃ©omÃ©tries de type point, ligne et polygone; 
+#. L'**indexation spatiale** est utilisÃ©e pour amÃ©liorer les performance d'exÃ©cution des opÃ©rations spatiales;
+#. Les **fonctions spatiales**, au sens :term:`SQL`, sont utilsÃ©es pour accÃ©der Ã  des propriÃ©tÃ©es ou des relations spatiales.
+
+ConbinÃ©, les types de donnÃ©es spatiales, les indexes et les fonctions fournissent une structure flexible pour optimiser les performance et les analyses.
 
 Au commencement
 ----------------
 
-Dans les premiÃšres implÃ©mentations :term:`SIG`, toutes les donnÃ©es spatiales Ã©taient stockÃ©es sous la forme de fichiers plats et certaines applications :term:`SIG` spÃ©cifiques Ã©taient nÃ©cessaires pour les interprÃ©ter et les manipuler. Ces outils de gestion de premiÃšre gÃ©nÃ©ration avaient Ã©tÃ© conÃ§us pour rÃ©pondre aux besoins des utilisateurs pour lesquels toutes les donnÃ©es Ã©taient localisÃ©es au sein de leur agence. Ces outils propriÃ©taires Ã©taient des systÃšmes specifiquement crÃ©Ã©s pour gÃ©rer les donnÃ©es spatiales.
-
-La seconde gÃ©nÃ©ration des systÃšmes de gestion de donnÃ©es spatiales stockait certaines donnÃ©es dans une base de donnÃ©es relationelle (habituellement les "attributs" ou autres parties non spatiales) mais ne fournissaient pas encore la flexibilitÃ© offerte par une intÃ©gration complÃšte des donnÃ©es spatiales.
-
-**Effectivement, les bases de donnÃ©es spatiales sont nÃ©es lorsque les gens ont commencÃ© Ã  considÃ©rer les objet spatiaux comme les autres objets d'une base de donnÃ©es .**
-
-Les bases de donnÃ©es spatiales intÃšgrent les donnÃ©es spatiales sous forme d'objets de la base de donnÃ©es relationnelle. Le changement opÃ©rÃ© passe d'une vision centrÃ©e sur le SIG Ã  une vision centrÃ©e sur les bases de donnÃ©es.
+Dans les premiÃšres implÃ©mentations :term:`SIG` historiques, toutes les donnÃ©es 
+spatiales Ã©taient stoquÃ©es sous la forme de fichiers plats et certaines applications 
+ :term:`SIG` spÃ©cifiques Ã©taient nÃ©cessaires pour interprÃ©ter et manipuler les donnÃ©es.
+Ces outils de gestion de premiÃšre gÃ©nÃ©ration, avaient Ã©tÃ© conÃ§u pour rÃ©pondre aux 
+besoins des utilisateurs pour lesquels toute les donnÃ©es Ã©taient localisÃ© au sein de leur
+agence. C'est outils Ã©taient propriÃ©taire, des systÃšme specifiquement crÃ©Ã© pour gÃ©rer les 
+donnÃ©es spatiales.
+
+La seconde gÃ©nÃ©ration des systÃšmes de gestion de donnÃ©es spatiales stoque certaines donnÃ©es dans une base de donnÃ©es relationelle 
+
+Second-generation spatial systems store some data in relational databases (usually the "attribute" or non-spatial parts) but still lack the flexibility afforded with direct integration.  
+
+**Effectivement, les bases de donnÃ©es spatiales sont nÃ©s lorsque les gens ont commencÃ© Ã  considÃ©rer les objet spatiaux comme des objets de base de donnÃ©es.**  
+
+Spatial databases fully integrate spatial data with an object relational database.  The orientation changes from GIS-centric to database-centric.     
 
 .. image:: ./introduction/beginning.png
 
-.. note:: Un systÃšme de gestion de base de donnÃ©es peut Ãªtre utilisÃ© dans d'autres cadres que celui des SIG. Les bases de donnÃ©es spatiales sont utilisÃ©es dans divers domaines : l'anatomie humaine, les circuits intÃ©grÃ©s de grandes envergures, les structures molÃ©culaires, les champs electro-magnÃ©tiques et bien d'autres encore.
-
-
-Les types de donnÃ©es spatiales
-------------------------------
-
-Une base de donnÃ©es classique propose par exemple les types chaÃ®nes de caractÃšres et date. Une base de donnÃ©es spatiales ajoute les types de donnÃ©es (spatiales) pour reprÃ©senter les **entitÃ©s gÃ©ographiques**. Ces types de donnÃ©es spatiales permettent d'accÃ©der Ã  des propriÃ©tÃ©s de l'entitÃ© gÃ©ographique comme ses contours ou sa dimension. Pour bien des aspects, les types de donnÃ©es spatiales peuvent Ãªtre vus simplement comme des formes.
+.. note:: A spatial database management system may be used in applications besides the geographic world.  Spatial databases are used to manage data related to the anatomy of the human body, large-scale integrated circuits, molecular structures, and electro-magnetic fields, among others.
+
+
+Spatial Data Types
+------------------
+
+An ordinary database has strings, numbers, and dates. A spatial database adds additional (spatial) types for representing **geographic features**. These spatial data types abstract and encapsulate spatial structures such as boundary and dimension. In many respects, spatial data types can be understood simply as shapes.  
 
 .. image:: ./introduction/hierarchy.png
    :align: center
 
-Les types de donnÃ©es spatiales sont organisÃ©s par une hiÃ©rarchie de type. Chaque sous-type hÃ©rite de la structure (les attributs) et du comportement (les mÃ©thodes et fonctions) de son type supÃ©rieur dans la hierarchie.
-
-
-Index spatiaux et Ã©tendue
----------------------------
-
-Une base de donnÃ©es ordinaire fournit des "mÃ©thodes d'accÃšs" -- connues sous le nom d'**index** -- pour permettre un accÃšs efficace et non sÃ©quentiel Ã  un sous ensemble de donnÃ©es. L'indexation des types non gÃ©ographiques (nombre, chaÃ®nes de caractÃšres, dates) est habituellement faite Ã  l'aide des index de type `arbres binaires <http://en.wikipedia.org/wiki/B-tree>`__. Un arbre binaire est un partitionnement des donnÃ©es utilisant l'ordre naturel pour stocker les donnÃ©es hiÃ©rarchiquement.
-
-L'ordre naturel des nombres, des chaÃ®nes de caractÃšres et des dates est assez simple Ã  dÃ©terminer -- chaque valeur est infÃ©rieure, plus grande ou Ã©gale Ã  toutes les autres valeurs. Mais, Ã©tant donnÃ© que les polygones peuvent se chevaucher, peuvent Ãªtre contenus dans un autre et sont reprÃ©sentÃ©s par un tableau en deux dimensions (ou plus), un arbre binaire ne convient pas pour indexer les valeurs. Les vraies bases de donnÃ©es spatiales fournissent un "index spatial" qui rÃ©pond plutÃŽt Ã  la question : "quel objet se trouve dans une Ã©tendue spÃ©cifique ?"
-
-Une **Ã©tendue** correspond au rectangle de plus petite taille capable de contenir un objet gÃ©ographique.
+Spatial data types are organized in a type hierarchy.  Each sub-type inherits the structure (attributes) and the behavior (methods or functions) of its super-type. 
+
+
+Spatial Indexes and Bounding Boxes
+----------------------------------
+
+An ordinary database provides "access methods" -- commonly known as **indexes** -- to allow for fast and random access to subsets of data.  Indexing for standard types (numbers, strings, dates) is usually done with `B-tree <http://en.wikipedia.org/wiki/B-tree>`_ indexes.  A B-tree partitions the data using the natural sort order to put the data into a hierarchical tree.
+
+The natural sort order of numbers, strings, and dates is simple to determine -- every value is less than, greater than or equal to every other value. But because polygons can overlap, can be contained in one another, and are arrayed in a two-dimensional (or more) space, a B-tree cannot be used to efficiently index them. Real spatial databases provide a "spatial index" that instead answers the question "which objects are within this particular bounding box?".  
+
+A **bounding box** is the smallest size rectangle capable of containing a given feature. 
 
 .. image:: ./introduction/boundingbox.png
    :align: center
 
-Les Ã©tendues sont utilisÃ©es car rÃ©pondre Ã  la question : "est-ce que A se trouve Ã  l'intÃ©rieur de B ? " est une opÃ©ration coÃ»teuse pour les polygones mais rapide dans le cas ou ce sont des rectangles. MÃªme des polygones et des lignes complexes peuvent Ãªtre reprÃ©sentÃ©s par une simple Ã©tendue.
-
-Les index spatiaux doivent rÃ©aliser leur ordonnancement rapidement afin d'Ãªtre utiles. Donc au lieu de fournir des rÃ©sultats exacts, comme le font les arbres binaires, les index spatiaux fournissent des rÃ©sultats approximatifs. La question "quelles lignes sont Ã  l'intÃ©rieur de ce polygone" sera interprÃ©tÃ©e par un index spatial comme : "quelles lignes ont une Ã©tendue qui est contenue dans l'Ã©tendue de ce polygone ?"
-
-Les incrÃ©ments spatiaux rÃ©els mis en application par diverses bases de donnÃ©es varient considÃ©rablement.
-Les index spatiaux actuellement utilisÃ©s par les diffÃ©rents systÃšmes de gestion de bases de donnÃ©es varient aussi considÃ©rablement. L'implÃ©mentation la plus commune est l'`arbre R <http://en.wikipedia.org/wiki/R-tree>`_ (utilisÃ© dans PostGIS), mais il existe aussi des implÃ©mentations de type `Quadtrees <http://en.wikipedia.org/wiki/Quadtree>`_, et des `index basÃ©s sur une grille <http://en.wikipedia.org/wiki/Grid_(spatial_index)>`_.
-
-Les fonctions spatiales
+Bounding boxes are used because answering the question "is A inside B?" is very computationally intensive for polygons but very fast in the case of rectangles.  Even the most complex polygons and linestrings can be represented by a simple bounding box.
+
+Indexes have to perform quickly in order to be useful. So instead of providing exact results, as B-trees do, spatial indexes provide approximate results. The question "what lines are inside this polygon?" will be instead interpreted by a spatial index as "what lines have bounding boxes that are contained inside this polygon's bounding box?" 
+
+The actual spatial indexes implemented by various databases vary widely. The most common implementation is the `R-tree <http://en.wikipedia.org/wiki/R-tree>`_ (used in PostGIS), but there are also implementations of `Quadtrees <http://en.wikipedia.org/wiki/Quadtree>`_, and `grid-based indexes <http://en.wikipedia.org/wiki/Grid_(spatial_index)>`_ in shipping spatial databases.
+
+Spatial Functions
+-----------------
+
+For manipulating data during a query, an ordinary database provides **functions** such as concatenating strings, performing hash operations on strings, doing mathematics on numbers, and extracting information from dates.  A spatial database provides a complete set of functions for analyzing geometric components, determining spatial relationships, and manipulating geometries.  These spatial functions serve as the building block for any spatial project.
+
+The majority of all spatial functions can be grouped into one of the following five categories:
+
+#. **Conversion**: Functions that *convert* between geometries and external data formats. 
+#. **Management**: Functions that *manage* information about spatial tables and PostGIS administration.
+#. **Retrieval**: Functions that *retrieve* properties and measurements of a Geometry. 
+#. **Comparison**: Functions that *compare* two geometries with respect to their spatial relation. 
+#. **Generation**: Functions that *generate* new geometries from others.
+
+The list of possible functions is very large, but a common set of functions is defined by the :term:`OGC` :term:`SFSQL` and implemented (along with additional useful functions) by PostGIS.
+
+What is PostGIS?
+================
+
+PostGIS turns the `PostgreSQL <http://www.postgresql.org/>`_ Database Management System into a spatial database by adding adding support for the three features: spatial types, indexes, and functions.  Because it is built on PostgreSQL, PostGIS automatically inherits important "enterprise" features as well as open standards for implementation 
+
+But what is PostgreSQL?
 -----------------------
 
-Pour manipuler les donnÃ©es lors d'une requÃªte, une base de donnÃ©es classique fournit des **fonctions** comme la concatÃ©nation de chaÃ®nes de caractÃšres, le calcul de la clef md5 d'une chaÃ®ne, la rÃ©alisation d'opÃ©rations mathÃ©matiques sur les nombres ou l'extraction d'informations spÃ©cifiques sur une date. Une base de donnÃ©es spatiales fournit un ensemble complet de fonctions pour analyser les composants gÃ©ographiques, dÃ©terminer les relations spatiales et manipuler les objets gÃ©ographiques. Ces fonctions spatiales sont utilisÃ©es comme des piÃšces de Lego pour de nombreux projets SIG.
-
-La majoritÃ© des fonctions spatiales peuvent Ãªtre regroupÃ©es dans l'une des cinq catÃ©gories suivantes :
-
-#. **Conversion**: fonctions qui *convertissent* les donnÃ©es gÃ©ographiques dans un format externe.
-#. **Gestion**: fonctions qui permettent de *gÃ©rer* les informations relatives  aux tables spatiales et l'administration de PostGIS.
-#. **RÃ©cupÃ©ration**: fonctions qui permettent de *rÃ©cupÃ©rer* les propriÃ©tÃ©s et les mesures d'une gÃ©omÃ©trie.
-#. **Comparaison**: fonctions qui permettent de *comparer* deux gÃ©omÃ©tries en respectant leurs relations spatiales.
-#. **Contruction**: fonctions qui permettent de *construire* de nouvelles gÃ©omÃ©tries Ã  partir d'autres.
-
-La liste des fonctions possibles est trÃšs vaste, mais un ensemble commun Ã  l'ensemble des implÃ©mentations est dÃ©fini par la spÃ©cification term:`OGC` :term:`SFSQL`. Cet ensemble commun (avec d'autres fonctions supplÃ©mentaires) est implÃ©mentÃ© dans PostGIS.
-
-
-Qu'est-ce que PostGIS ?
-=======================
-
-PostGIS confÃšre au `systÃšme de gestion de base de donnÃ©es PostgreSQL <http://www.postgresql.org/>`_ le statut de base de donnÃ©es spatiales en ajoutant les trois supports suivants : les types de donnÃ©es spatiales, les index et les fonctions. Ãtant donnÃ© qu'il est basÃ© sur PostgreSQL, PostGIS bÃ©nÃ©ficie automatiquement des capacitÃ©s orientÃ©es "entreprise" ainsi que le respect des standards de cette implÃ©mentation.
-
-Mais qu'est-ce que PostgreSQL ?
--------------------------------
-
-PostgreSQL est un puissant systÃšme de gestion de donnÃ©es relationnel Ã  objets (SGBDRO). Il a Ã©tÃ© publiÃ© sous la licence de style BSD et est donc un logiciel libre. Comme avec beaucoup de logiciels libres, PostgreSQL n'est pas contrÃŽlÃ© par une sociÃ©tÃ© unique mais par une communautÃ© de dÃ©veloppeurs et de sociÃ©tÃ©s qui le dÃ©veloppe.
-
-PostgreSQL a Ã©tÃ© conÃ§u depuis le dÃ©but en conservant Ã  l'esprit qu'il serait potentiellement nÃ©cessaire de l'Ã©tendre Ã  l'aide d'extensions particuliÃšres -- la possibilitÃ© d'ajouter de nouveaux types, des nouvelles fonctions et des mÃ©thodes d'accÃšs Ã  chaud. GrÃ¢ce Ã  cela, une extension de PostgreSQL peut Ãªtre dÃ©veloppÃ©e par une Ã©quipe de dÃ©veloppement indÃ©pendante, bien que le lien soit trÃšs fortement liÃ© au coeur de la base de donnÃ©es PostgreSQL.
-
-Pourquoi choisir PostgreSQL ?
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Une question que se posent souvent les gens dÃ©ja familiarisÃ©s avec les bases de donnÃ©es libres est : "Pourquoi PostGIS n'a pas Ã©tÃ© basÃ© sur MySQL ?"
-
-PostgreSQL a:
-
-  * prouvÃ© sa fiabilitÃ© et son respect de l'intÃ©gritÃ© des donnÃ©es (propriÃ©tÃ©s ACID)
-  * un support soigneux des standard SQL (respecte la norme SQL92)
-  * un support pour le dÃ©veloppement d'extensions et de nouvelles fonctions
-  * un modÃšle de dÃ©veloppement communautaire
-  * pas de limite sur la taille des colonne (les tuples peuvent Ãªtre "TOAST"Ã©s) pour supporter des objets gÃ©ographiques
-  * un structure d'index gÃ©nÃ©rique (GiST) permettant l'indexation Ã  l'aide d'arbres R
-  * une facilitÃ© d'ajout de fonctions personalisÃ©es
-
-Tout ceci combinÃ©, PostgreSQL permet un cheminement simple du dÃ©veloppement nÃ©cessaire Ã  l'ajout des types spatiaux. Dans le monde propriÃ©taire, seul Illustra (maintenant Informix Universal Server) permet une extension aussi simple. Ceci n'est pas une coÃ¯ncidence, Illustra est une version propriÃ©taire modifiÃ©e du code original de PostgreSQL publiÃ© dans les annÃ©es 1980.
-
-Puisque le cheminement du dÃ©veloppement nÃ©cessaire Ã  l'ajout de types Ã  PostgreSQL est direct, il semblait naturel de commencer par lÃ . Lorsque MySQL a publiÃ© des types de donnÃ©es spatiaux de base dans sa version 4.1, l'Ã©quipe de PostGIS a jetÃ© un coup d'oeil dans leur code source et cela a confirmÃ© le choix initial d'utiliser PostgreSQL. Puisque les objets gÃ©ographiques de MySQL doivent Ãªtre considÃ©rÃ©s comme un cas particulier de chaÃ®nes de caractÃšres, le code de MySQL a Ã©tÃ© diffus dans l'intÃ©gralitÃ© du code de base. Le dÃ©veloppement de PostGIS version 0.1 a pris un mois. RÃ©aliser un projet "MyGIS" 0.1 aurait pris beaucoup plus de temps, c'est sans doute pourquoi il n'a jamais vu le jour.
-
-Pourquoi pas des fichiers Shapefile ?
--------------------------------------
-
-Les fichiers `shapefile <http://en.wikipedia.org/wiki/Shapefile>`_ (et les autres formats) ont Ã©tÃ© la maniÃšre standard de stocker et d'interagir avec les donnÃ©es spatiales depuis l'origine des SIG. NÃ©anmoins, ces fichiers "plats" ont les inconvÃ©nients suivants :
-
-* **Les fichier au formats SIG requiÃšrent un logiciel spÃ©cifique pour les lire et les Ã©crire.**  Le langage SQL est une abstraction de l'accÃšs alÃ©atoire aux donnÃ©es et Ã  leur analyse. Sans cette abstraction, vous devrez dÃ©velopper l'accÃšs et l'analyse par vos propre moyens.
-* **L'accÃšs concurrent aux donnÃ©es peut parfois entraÃ®ner un stockage de donnÃ©es corrompues.** Alors qu'il est possible d'Ã©crire du code supplÃ©mentaire afin de garantir la cohÃ©rence des donnÃ©es, une fois ce problÃšme solutionnÃ© et celui de la performance associÃ©e, vous aurez re-Ã©crit la partie la plus importante d'un systÃšme de base de donnÃ©es. Pourquoi ne pas simplement utiliser une base de donnÃ©es standard dans ce cas ?
-* **Les questions compliquÃ©es nÃ©cessitent des logiciels compliquÃ©s pour y rÃ©pondre.** Les question intÃ©ressantes et compliquÃ©es (jointures spatiales, aggrÃ©gations, etc) qui sont exprimables en une ligne de SQL grÃ¢ce Ã  la base de donnÃ©es, nÃ©cessitent une centaine de lignes de code spÃ©cifiques pour y rÃ©pondre dans le cas de fichiers.
-
-La plupart des utilisateurs de PostGIS ont mis en place des systÃšmes oÃ¹ diverses applications sont susceptibles d'accÃ©der aux donnÃ©es, et donc d'avoir les mÃ©thodes d'accÃšs SQL standard, qui simplifient le dÃ©ploiement et le dÃ©veloppement. Certains utilisateurs travaillent avec de grands jeux de donnÃ©es sous forme de fichiers, qui peuvent Ãªtre segmentÃ©s en plusieurs fichiers, mais dans une base de donnÃ©es ces donnÃ©es peuvent Ãªtre stockÃ©es dans une seule grande table.
-
-En rÃ©sumÃ©, la combinaison du support de l'accÃšs concurrent, des requÃªtes complexes spÃ©cifiques et de la performance sur de grands jeux de donnÃ©es diffÃ©rencient les bases de donnÃ©es spatiales des systÃšmes utilisant des fichiers.
-
-Un bref historique de PostGIS
-------------------------------
-
-En mai 2001, la sociÃ©tÃ© `Refractions Research <http://www.refractions.net/>`_  publie la premiÃšre version de PostGIS. PostGIS 0.1 fournissait les objets, les index et des fonctions utiles. Le rÃ©sultat Ã©tait une base de donnÃ©es permettant le stockage et l'accÃšs mais pas encore l'analyse.
-
-Comme le nombre de fonctions augmentait, le besoin d'un principe d'organisation devint clair. La spÃ©cification "Simple Features for SQL" (:term:`SFSQL`) publiÃ©e par l'Open Geospatial Consortium fournit une telle structure avec des indications pour le nommage des fonctions et les prÃ©-requis.
-
-Avec le support dans PostGIS de simples fonctions d'analyses et de jointures spatiales,
-`Mapserver <http://mapserver.org/>`_ devint la premiÃšre application externe permettant de visualiser les donnÃ©es de la base de donnÃ©es.
-
-Au cours de ces derniÃšres annÃ©es, le nombre de fonctions fournies par PostGIS grandissait, mais leur puissance restait limitÃ©e. La plupart des fonctions intÃ©ressantes (ex : ST_Intersects(), ST_Buffer(), ST_Union()) Ã©taient difficiles Ã  implÃ©menter. Les Ã©crire en repartant du dÃ©but promettait des annÃ©es de travail.
-
-Heureusement un second projet, nommÃ© "Geometry Engine, Open Source" ou `GEOS <http://trac.osgeo.org/geos>`_ vit le jour. Cette librairie fournit l'ensemble des algorithmes nÃ©cessaires Ã  l'implÃ©mentation de la spÃ©cification :term:`SFSQL` . En se liant Ã  GEOS, PostGIS fournit alors le support complet de la :term:`SFSQL` depuis la version 0.8.
-
-Alors que les capacitÃ©s de PostGIS grandissaient, un autre problÃšme fit surface : la reprÃ©sentation utilisÃ©e pour stocker les gÃ©omÃ©tries n'Ã©tait pas assez efficace. Pour de petits objets comme les points ou de courtes lignes, les mÃ©tadonnÃ©es dans la reprÃ©sentation occupaient plus de 300% supplÃ©mentaires. Pour des raisons de performances, il fut nÃ©cessaire de faire faire un rÃ©gime Ã  la reprÃ©sentation. En rÃ©duisant l'entÃªte des mÃ©tadonnÃ©es et les dimensions requises, l'espace supplÃ©mentaire fut rÃ©duit drastiquement. Dans PostGIS 1.0, cette nouvelle reprÃ©sentation plus rapide et plus lÃ©gÃšre devint la reprÃ©sentation par dÃ©faut.
-
-Les mises Ã  jour rÃ©centes de PostGIS ont permis d'Ã©tendre la compatibilitÃ© avec les standards, d'ajouter les gÃ©omÃ©tries courbes et les signatures de fonctions spÃ©cifiÃ©es dans la norme ISO :term:`SQL/MM`. Dans un soucis de performance, PostGIS 1.4 a aussi augmentÃ© considÃ©rablement la rapiditÃ© d'exÃ©cution des fonctions de tests sur les gÃ©omÃ©tries.
-
-Qui utilise PostGIS ?
----------------------
-
-Pour une liste complÃšte des cas d'utilisation, consultez la page web : `Cas d'utilisations de PostGIS (en anglais) <http://www.postgis.org/documentation/casestudies/>`_.
-
-Institut GÃ©ographique National, France
+PostgreSQL is a powerful, object-relational database management system (ORDBMS). It is released under a BSD-style license and is thus free and open source software. As with many other open source programs, PostgreSQL is not controlled by any single company, but has a global community of developers and companies to develop it.
+
+PostgreSQL was designed from the very start with type extension in mind -- the ability to add new data types, functions and access methods at run-time. Because of this, the PostGIS extension can be developed by a separate development team, yet still integrate very tightly into the core PostgreSQL database.
+
+Why choose PostgreSQL?
+~~~~~~~~~~~~~~~~~~~~~~
+
+A common question from people familiar with open source databases is, "Why wasn't PostGIS built on MySQL?".
+
+PostgreSQL has:
+
+  * Proven reliability and transactional integrity by default (ACID)
+  * Careful support for SQL standards (full SQL92)
+  * Pluggable type extension and function extension
+  * Community-oriented development model
+  * No limit on column sizes ("TOAST"able tuples) to support big GIS objects
+  * Generic index structure (GiST) to allow R-Tree index
+  * Easy to add custom functions
+
+Combined, PostgreSQL provides a very easy development path to add new spatial types. In the proprietary world, only Illustra (now Informix Universal Server) allows such easy extension. This is no coincidence; Illustra is a proprietary re-working of the original PostgreSQL code base from the 1980's. 
+
+Because the development path for adding types to PostgreSQL was so straightforward, it made sense to start there. When MySQL released basic spatial types in version 4.1, the PostGIS team took a look at their code, and the exercise reinforced the original decision to use PostgreSQL. Because MySQL spatial objects had to be hacked on top of the string type as a special case, the MySQL code was spread over the entire code base. Development of PostGIS 0.1 took under a month. Doing a "MyGIS" 0.1 would have taken a lot longer, and as such, might never have seen the light of day.
+
+Why not Shapefiles?
+-------------------
+
+The `shapefile <http://en.wikipedia.org/wiki/Shapefile>`_ (and other file formats) have been the standard way of storing and interacting with spatial data since GIS software was first written. However, these "flat" files have the following disadvantages:
+
+* **Files require special software to read and write.**  SQL is an abstraction for random data access and analysis. Without that abstraction, you will need to write all the access and analysis code yourself.
+* **Concurrent users can cause corruption.** While it's possible to write extra code to ensure that multiple writes to the same file do not corrupt the data, by the time you have solved the problem and also solved the associated performance problem, you will have written the better part of a database system. Why not just use a standard database?
+* **Complicated questions require complicated software to answer.** Complicated and interesting questions (spatial joins, aggregations, etc) that are expressible in one line of SQL in the database take hundreds of lines of specialized code to answer when programming against files.
+
+Most users of PostGIS are setting up systems where multiple applications will be expected to access the data, so having a standard SQL access method simplifies deployment and development. Some users are working with large data sets; with files, they might be segmented into multiple files, but in a database they can be stored as a single large table.
+
+In summation, the combination of support for multiple users, complex ad hoc queries, and performance on large data sets are what sets spatial databases apart from file-based systems.
+
+A brief history of PostGIS
+--------------------------
+
+In the May of 2001, `Refractions Research <http://www.refractions.net/>`_  released the first version of PostGIS. PostGIS 0.1 had objects, indexes and a handful of functions. The result was a database suitable for storage and retrieval, but not analysis.
+
+As the number of functions increased, the need for an organizing principle became clear.  The "Simple Features for SQL" (:term:`SFSQL`) specification from the Open Geospatial Consortium provided such structure with guidelines for function naming and requirements.
+
+With PostGIS support for simple analysis and spatial joins, `Mapserver <http://mapserver.org/>`_ became the first external application to provide visualization of data in the database. 
+
+Over the next several years the number of PostGIS functions grew, but its power remained limited. Many of the most interesting functions (e.g., ST_Intersects(), ST_Buffer(), ST_Union()) were very difficult to code.  Writing them from scratch promised years of work.
+
+Fortunately a second project, the "Geometry Engine, Open Source" or `GEOS <http://trac.osgeo.org/geos>`_, came along. The GEOS library provides the necessary algorithms for implementing the :term:`SFSQL` specification. By linking in GEOS, PostGIS provided complete support for :term:`SFSQL` by version 0.8.
+
+As PostGIS data capacity grew, another issue surfaced: the representation used to store geometry proved relatively inefficient. For small objects like points and short lines, the metadata in the representation had as much as a 300% overhead. For performance reasons, it was necessary to put the representation on a diet.  By shrinking the metadata header and required dimensions, overhead greatly reduced. In PostGIS 1.0, this new, faster, lightweight representation became the default.
+
+Recent updates of PostGIS have worked on expanding standards compliance, adding support for curve-based geometries and function signatures specified in the ISO :term:`SQL/MM` standard. Through a continued focus on performance,  PostGIS 1.4 significantly improved the speed of geometry testing routines.
+
+Who uses PostGIS?
+-----------------
+
+For a complete list of case studies, see the `PostGIS case studies <http://www.postgis.org/documentation/casestudies/>`_ page.
+
+Institut Geographique National, France
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-L'IGN utilise PostGIS pour stocker des cartes topographiques de grande rÃ©solution de la France : la "BDUni". La BDUni a plus de 100 millions d'entitÃ©s, et est maintenue par une Ã©quipe de 100 personnes qui vÃ©rifie les observations et ajoute quotidiennement de nouvelles donnÃ©es Ã  la base. L'installation de l'IGN utilise le systÃšme transactionnel de la base de donnÃ©es pour assurer la consistance durant les phases de mises Ã  jour et utilise un `serveur de warm-standby par transfert de journaux <http://docs.postgresql.fr/9.1/warm-standby.html>`_ afin de conserver un Ã©tat cohÃ©rent en cas de dÃ©faillance du systÃšme.
+IGN is the national mapping agency of France, and uses PostGIS to store the high resolution topographic map of the country, "BDUni". BDUni has more than 100 million features, and is maintained by a staff of over 100 field staff who verify observations and add new mapping to the database daily. The IGN installation uses the database transactional system to ensure consistency during update processes, and a `warm standby system <http://developer.postgresql.org/pgdocs/postgres/warm-standby.html>`_ to maintain uptime in the event of a system failure.
 
 GlobeXplorer
 ~~~~~~~~~~~~
 
-GlobeXplorer est un service web fournissant un accÃšs en ligne Ã  une imagerie satellite et photos aÃ©riennes de plusieurs petabytes. GlobeXplorer utilise PostGIS pour gÃ©rer les mÃ©tadonnÃ©es associÃ©es avec le catalogue d'images. Les requÃªtes pour accÃ©der aux images recherchent d'abord dans le catalogue PostGIS pour rÃ©cupÃ©rer la localisation des images demandÃ©es, puis rÃ©cupÃšrent ces images et les retournent au client. Lors du proccessus de mise en place de leur systÃšme, GlobeXplorer a essayÃ© d'autres systÃšmes de base de donnÃ©es spatiales mais a conservÃ© PostGIS Ã  cause de la combinaison du prix et de la performance qu'il offre.
-
-Quest-ce qu'une application qui supporte PostGIS ?
---------------------------------------------------
-
-PostGIS est devenu une base de donnÃ©es spatiale communÃ©ment utilisÃ©e, et le nombre d'applications tierces qui supportent le stockage ou la rÃ©cupÃ©ration des donnÃ©es n'a cessÃ© d'augmenter. `Les application qui supportent PostGIS <http://trac.osgeo.org/postgis/wiki/UsersWikiToolsSupportPostgis>`_  contiennent Ã  la fois des applications libres et des application propriÃ©taires tournant sur un serveur ou localement depuis votre bureau.
-
-La table suivante propose une liste des logiciels qui tirent profit de PostGIS :
+GlobeXplorer is a web-based service providing online access to petabytes of global satellite and aerial imagery. GlobeXplorer uses PostGIS to manage the metadata associated with the imagery catalogue, so queries for imagery first search the PostGIS catalogue to find the location of the relevant images, then pull the images from storage and return them to the client. In building their system, GlobeXplorer tried other spatial databases but eventually settled on PostGIS because of the great combination of price and performance it offers.
+
+What applications support PostGIS?
+----------------------------------
+
+PostGIS has become a widely used spatial database, and the number of third-party programs that support storing and retrieving data using it has increased as well. The `programs that support PostGIS <http://trac.osgeo.org/postgis/wiki/UsersWikiToolsSupportPostgis>`_ include both open source and proprietary software on both server and desktop systems.
+
+The following table shows a list of some of the software that leverages PostGIS:
 
 +-------------------------------------------------+----------------------------------------------+
-| Libre/Gratuit                                   | FermÃ©/PropriÃ©taire                           |
+| Open/Free                                       | Closed/Proprietary                           |
 +=================================================+==============================================+
-|                                                 |                                              |
-| * Chargement/Extraction                         | * Chargement/Extraction                      |
-|                                                 |                                              |
-|   * Shp2Pgsql                                   |   * Safe FME Desktop Translator/Converter    |
-|   * ogr2ogr                                     |                                              |
-|   * Dxf2PostGIS                                 |                                              |
-|                                                 | * BasÃ© sur le web                            |
-| * BasÃ© sur le web                               |                                              |
-|                                                 |   * Ionic Red Spider (now ERDAS)             |
-|   * Mapserver                                   |   * Cadcorp GeognoSIS                        |
-|   * GeoServer (Java-based WFS / WMS -server )   |   * Iwan Mapserver                           |
-|   * SharpMap SDK - for ASP.NET 2.0              |   * MapDotNet Server                         |
-|   * MapGuide Open Source (using FDO)            |   * MapGuide Enterprise (using FDO)          |
-|                                                 |   * ESRI ArcGIS Server 9.3+                  |
-| * Logiciels bureautiques                        |                                              |
-|                                                 | * Logiciels bureautiques                     |
-|   * uDig                                        |                                              |
-|   * QGIS                                        |   * Cadcorp SIS                              |
-|   * mezoGIS                                     |   * Microimages TNTmips GIS                  |
-|   * OpenJUMP                                    |   * ESRI ArcGIS 9.3+                         |
-|   * OpenEV                                      |   * Manifold                                 |
-|   * SharpMap SDK for Microsoft.NET 2.0          |   * GeoConcept                               |
-|   * ZigGIS for ArcGIS/ArcObjects.NET            |   * MapInfo (v10)                            |
-|   * GvSIG                                       |   * AutoCAD Map 3D (using FDO)               |
-|   * GRASS                                       |                                              |
-|                                                 |                                              |
+|                                                 |                                              |   
+| * Loading/Extracting                            | * Loading/Extracting                         |   
+|                                                 |                                              |     
+|   * Shp2Pgsql                                   |   * Safe FME Desktop Translator/Converter    |      
+|   * ogr2ogr                                     |                                              |        
+|   * Dxf2PostGIS                                 |                                              |          
+|                                                 | * Web-Based                                  |         
+| * Web-Based                                     |                                              |             
+|                                                 |   * Ionic Red Spider (now ERDAS)             |              
+|   * Mapserver                                   |   * Cadcorp GeognoSIS                        |            
+|   * GeoServer (Java-based WFS / WMS -server )   |   * Iwan Mapserver                           |     
+|   * SharpMap SDK - for ASP.NET 2.0              |   * MapDotNet Server                         |      
+|   * MapGuide Open Source (using FDO)            |   * MapGuide Enterprise (using FDO)          |   
+|                                                 |   * ESRI ArcGIS Server 9.3+                  |         
+| * Desktop                                       |                                              |           
+|                                                 | * Desktop                                    |               
+|   * uDig                                        |                                              |           
+|   * QGIS                                        |   * Cadcorp SIS                              |      
+|   * mezoGIS                                     |   * Microimages TNTmips GIS                  |         
+|   * OpenJUMP                                    |   * ESRI ArcGIS 9.3+                         |           
+|   * OpenEV                                      |   * Manifold                                 |   
+|   * SharpMap SDK for Microsoft.NET 2.0          |   * GeoConcept                               |       
+|   * ZigGIS for ArcGIS/ArcObjects.NET            |   * MapInfo (v10)                            |           
+|   * GvSIG                                       |   * AutoCAD Map 3D (using FDO)               |   
+|   * GRASS                                       |                                              |           
+|                                                 |                                              |             
 +-------------------------------------------------+----------------------------------------------+
 
Index: trunk/workshop-foss4g/geography.rst
===================================================================
--- trunk/workshop-foss4g/geography.rst	(revision 81)
+++ trunk/workshop-foss4g/geography.rst	(revision 1)
@@ -1,23 +1,21 @@
 .. _geography:
 
-Partie 17 : CoordonnÃ©es gÃ©ographiques
-=====================================
-
-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.
+Section 17: Geography
+=====================
+
+It is very common to have data in which the coordinate are "geographics" or "latitude/longitude". 
+
+Unlike coordinates in Mercator, UTM, or Stateplane, geographic coordinates are **not cartesian coordinates**. Geographic coordinates do not represent a linear distance from an origin as plotted on a plane. Rather, these **spherical coordinates** describe the angular distance between the equator and the poles. In spherical coordinates a point is specified by the distance from the origin (the radius), the angle of rotation from the initial meridian plane, and the angle from the polar axis (analogous to a vector from the origin through the North Pole).
 
 .. 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 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.
+You can treat geographic coordinates as approximate cartesian coordinates and continue to do spatial calculations. However, measurements of distance, length and area will be nonsensical. Since spherical coordinates measure **angular** distance, the units are in "degrees." Further, the approximate results from indexes and true/false tests like intersects and contains can become terribly wrong. The distance between points get larger as problem areas like the poles or the international dateline are approached.
+
+For example, here are the coordinates of Los Angeles and Paris.
 
  * 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Ã©rence spatiale gÃ©ographique.
+ 
+The following calculates the distance between Los Angeles and Paris using the standard PostGIS cartesian :command:`ST_Distance(geometry, geometry)`.  Note that the SRID of 4326 declares a geographic spatial reference system.
 
 .. code-block:: sql
@@ -31,23 +29,25 @@
 
   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 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``.
+  
+Aha! 121! But, what does that mean? 
+
+The units for spatial reference 4326 are degrees. So our answer is 121 degrees. But (again), what does that mean? 
+
+On a sphere, the size of one "degree square" is quite variable, becoming smaller as you move away from the equator. Think of the meridians (vertical lines) on the globe getting closer to each other as you go towards the poles. So, a distance of 121 degrees doesn't *mean* anything. It is a nonsense number.
+
+In order to calculate a meaningful distance, we must treat geographic coordinates not as approximate cartesian coordinates but rather as true spherical coordinates.  We must measure the distances between points as true paths over a sphere -- a portion of a great circle. 
+
+Starting with version 1.5, PostGIS provides this functionality through the ``geography`` type.
 
 .. note::
 
-  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 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``, 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)`.
+  Different spatial databases have different approaches for "handling geographics" 
+  
+  * Oracle attempts to paper over the differences by transparently doing geographic calculations when the SRID is geographic. 
+  * SQL Server uses two spatial types, "STGeometry" for cartesian data and "STGeography" for geographics. 
+  * Informix Spatial is a pure cartesian extension to Informix, while Informix Geodetic is a pure geographic extension. 
+  * Similar to SQL Server, PostGIS uses two types, "geometry" and "geography".
+  
+Using the ``geography`` instead of ``geometry`` type, let's try again to measure the distance between Los Angeles and Paris. Instead of :command:`ST_GeometryFromText(text)`, we will use :command:`ST_GeographyFromText(text)`.
 
 .. code-block:: sql
@@ -62,13 +62,13 @@
   9124665.26917268
 
-Toutes les valeurs retournÃ©es Ã©tant en mÃštres, notre rÃ©ponse est donc 9124 kilomÃštres.
-
-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?"
+A big number! All return values from ``geography`` calculations are in meters, so our answer is 9124km. 
+
+Older versions of PostGIS supported very basic calculations over the sphere using the :command:`ST_Distance_Spheroid(point, point, measurement)` function. However, :command:`ST_Distance_Spheroid` is substantially limited. The function only works on points and provides no support for indexing across the poles or international dateline.
+
+The need to support non-point geometries becomes very clear when posing a question like "How close will a flight from Los Angeles to Paris come to Iceland?" 
 
 .. 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, 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.
+Working with geographic coordinates on a cartesian plane (the purple line) yields a *very* wrong answer indeed! Using great circle routes (the red lines) gives the right answer. If we convert our LAX-CDG flight into a line string and calculate the distance to a point in Iceland using ``geography`` we'll get the right answer (recall) in meters.
 
 .. 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 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.
+  
+So the closest approach to Iceland on the LAX-CDG route is a relatively small 532km.
+  
+The cartesian approach to handling geographic coordinates breaks down entirely for features that cross the international dateline. The shortest great-circle route from Los Angeles to Tokyo crosses the Pacific Ocean. The shortest cartesian route crosses the Atlantic and Indian Oceans.
 
 .. image:: ./geography/lax_nrt.png
@@ -94,64 +94,64 @@
      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
 
 
-Utiliser le type 'Geography'
-----------------------------
-
-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.
+Using Geography
+---------------
+
+In order to load geometry data into a geography table, the geometry first needs to be projected into EPSG:4326 (longitude/latitude), then it needs to be changed into geography.  The :command:`ST_Transform(geometry,srid)` function converts coordinates to geographics and the :command:`Geography(geometry)` function "casts" them from geometry to geography.
 
 .. 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 ``geography`` est exactement identique Ã  la mÃ©thode employÃ©e pour les gÃ©omÃ©tries :
-
-.. code-block:: sql
-
-  CREATE INDEX nyc_subway_stations_geog_gix
+   
+Building a spatial index on a geography table is exactly the same as for geometry:
+
+.. code-block:: sql
+
+  CREATE INDEX nyc_subway_stations_geog_gix 
   ON nyc_subway_stations_geog USING GIST (geog);
 
-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``
- * :command:`ST_AsBinary(geography)` retourne la reprÃ©sentation binaire ``bytea``
- * :command:`ST_GeogFromWKB(bytea)` retourne un objet de type ``geography``
- * :command:`ST_AsSVG(geography)` retourne ``text``
- * :command:`ST_AsGML(geography)` retourne ``text``
- * :command:`ST_AsKML(geography)` retourne ``text``
- * :command:`ST_AsGeoJson(geography)` retourne ``text``
- * :command:`ST_Distance(geography, geography)` retourne ``double``
- * :command:`ST_DWithin(geography, geography, float8)` retourne ``boolean``
- * :command:`ST_Area(geography)` retourne ``double``
- * :command:`ST_Length(geography)` retourne ``double``
- * :command:`ST_Covers(geography, geography)` retourne ``boolean``
- * :command:`ST_CoveredBy(geography, geography)` retourne ``boolean``
- * :command:`ST_Intersects(geography, geography)` retourne ``boolean``
- * :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Ã©ographies
----------------------------------------------
-
-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 :
+The difference is under the covers: the geography index will correctly handle queries that cover the poles or the international date-line, while the geometry one will not.
+
+There are only a small number of native functions for the geography type:
+ 
+ * :command:`ST_AsText(geography)` returns ``text``
+ * :command:`ST_GeographyFromText(text)` returns ``geography``
+ * :command:`ST_AsBinary(geography)` returns ``bytea``
+ * :command:`ST_GeogFromWKB(bytea)` returns ``geography``
+ * :command:`ST_AsSVG(geography)` returns ``text``
+ * :command:`ST_AsGML(geography)` returns ``text``
+ * :command:`ST_AsKML(geography)` returns ``text``
+ * :command:`ST_AsGeoJson(geography)` returns ``text``
+ * :command:`ST_Distance(geography, geography)` returns ``double``
+ * :command:`ST_DWithin(geography, geography, float8)` returns ``boolean``
+ * :command:`ST_Area(geography)` returns ``double``
+ * :command:`ST_Length(geography)` returns ``double``
+ * :command:`ST_Covers(geography, geography)` returns ``boolean``
+ * :command:`ST_CoveredBy(geography, geography)` returns ``boolean``
+ * :command:`ST_Intersects(geography, geography)` returns ``boolean``
+ * :command:`ST_Buffer(geography, float8)` returns ``geography`` [#Casting_note]_
+ * :command:`ST_Intersection(geography, geography)` returns ``geography`` [#Casting_note]_
+ 
+Creating a Geography Table
+--------------------------
+ 
+The SQL for creating a new table with a geography column is much like that for creating a geometry table. However, geography includes the ability to specify the object type directly at the time of table creation. For example:
 
 .. code-block:: sql
@@ -161,34 +161,35 @@
     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Ã©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``.
+  
+In the table definition, the ``GEOGRAPHY(Point)`` specifies our airport data type as points. The new geography fields don't get registered in the ``geometry_columns``. Instead, they are registered in a new view called ``geography_columns`` that is automatically kept up to date without need for an :command:`AddGeom...` like functions.
 
 .. 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.
-
-Conversion de type
+  The ability to define geometry types and SRIDs inside the table ``CREATE`` statement, and the automatic update of the ``geometry_columns`` metadata are features that have been prototyped with ``geography`` and will be added to the ``geometry`` type for PostGIS 2.0.
+  
+
+Casting to Geometry
 -------------------
 
-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 ?
+While the basic functions for geography types can handle many use cases, there are times when you might need access to other functions only supported by the geometry type. Fortunately, you can convert objects back and forth from geography to geometry.
+
+The PostgreSQL syntax convention for casting is to append ``::typename`` to the end of the value you wish to cast. So, ``2::text`` with convert a numeric two to a text string '2'. And ``'POINT(0 0)'::geometry`` will convert the text representation of point into a geometry point.
+
+The :command:`ST_X(point)` function only supports the geometry type. How can we read the X coordinate from our geographies?
 
 .. code-block:: sql
@@ -198,43 +199,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 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 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, 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 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:: 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Ã©.
-
+By appending ``::geometry`` to our geography value, we convert the object to a geometry with an SRID of 4326. From there we can use as many geometry functions as strike our fancy. But, remember -- now that our object is a geometry, the coordinates will be interpretted as cartesian coordinates, not spherical ones.
+ 
+ 
+Why (Not) Use Geography
+-----------------------
+
+Geographics are universally accepted coordinates -- everyone understands what latitude/longitude mean, but very few people understand what UTM coordinates mean. Why not use geography all the time?
+
+ * First, as noted earlier, there are far fewer functions available (right now) that directly support the geography type. You may spend a lot of time working around geography type limitations.
+ * Second, the calculations on a sphere are computationally far more expensive than cartesian calculations. For example, the cartesian formula for distance (Pythagoras) involves one call to sqrt(). The spherical formula for distance (Haversine) involves two sqrt() calls, an arctan() call, four sin() calls and two cos() calls. Trigonometric functions are very costly, and spherical calculations involve a lot of them.
+ 
+The conclusion? 
+
+If your data is geographically compact (contained within a state, county or city), use the ``geometry`` type with a cartesian projection that makes sense with your data. See the http://spatialreference.org site and type in the name of your region for a selection of possible reference systems.
+
+If, on the other hand, you need to measure distance with a dataset that is geographically dispersed (covering much of the world), use the ``geography`` type. The application complexity you save by working in ``geography`` will offset any performance issues. And, casting to ``geometry`` can offset most functionality limitations.
+
+Function List
+-------------
+
+`ST_Distance(geometry, geometry) <http://postgis.org/docs/ST_Distance.html>`_: For geometry type Returns the 2-dimensional cartesian minimum distance (based on spatial ref) between two geometries in projected units. For geography type defaults to return spheroidal minimum distance between two geographies in meters.
+
+`ST_GeographyFromText(text) <http://postgis.org/docs/ST_GeographyFromText.html>`_: Returns a specified geography value from Well-Known Text representation or extended (WKT).
+
+`ST_Transform(geometry, srid) <http://postgis.org/docs/ST_Transform.html>`_: Returns a new geometry with its coordinates transformed to the SRID referenced by the integer parameter.
+
+`ST_X(point) <http://postgis.org/docs/ST_X.html>`_: Returns the X coordinate of the point, or NULL if not available. Input must be a point.
+
+
+.. rubric:: Footnotes
+
+.. [#Casting_note] The buffer and intersection functions are actually wrappers on top of a cast to geometry, and are not carried out natively in spherical coordinates. As a result, they may fail to return correct results for objects with very large extents that cannot be cleanly converted to a planar representation.
+ 
+   For example, the :command:`ST_Buffer(geography,distance)` function transforms the geography object into a "best" projection, buffers it, and then transforms it back to geographics. If there is no "best" projection (the object is too large), the operation can fail or return a malformed buffer.
+
Index: trunk/workshop-foss4g/validity.rst
===================================================================
--- trunk/workshop-foss4g/validity.rst	(revision 81)
+++ trunk/workshop-foss4g/validity.rst	(revision 1)
@@ -1,56 +1,56 @@
 .. _validity:
 
-Partie 20 : ValiditÃ©
+Section 20: Validity
 ====================
 
-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 ?
+In 90% of the cases the answer to the question, "why is my query giving me a 'TopologyException' error" is "one or more of the inputs are invalid".  Which begs the question: what does it mean to be invalid, and why should we care?
 
-Qu'est-ce que la validitÃ© ?
----------------------------
+What is Validity
+----------------
 
-La validitÃ© est surtout importante pour les polygones, qui dÃ©finissent des aires et requiÃšrent une bonne structuration. Les lignes sont vraiment simples et ne peuvent pas Ãªtre invalides ainsi que les points.
+Validity is most important for polygons, which define bounded areas and require a good deal of structure. Lines are very simple and cannot be invalid, nor can points.
 
-Certaines des rÃšgles de validation des polygones semble Ã©videntes, et d'autre semblent arbitraires (et le sont vraiment).
+Some of the rules of polygon validity feel obvious, and others feel arbitrary (and in fact, are arbitrary).
 
- * 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.
+ * Polygon rings must close.
+ * Rings that define holes should be inside rings that define exterior boundaries.
+ * Rings may not self-intersect (they may neither touch nor cross one another).
+ * Rings may not touch other rings, except at a point.
 
-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.
+The last two rules are in the arbitrary category. There are other ways to define polygons that are equally self-consistent but the rules above are the ones used by the :term:`OGC` :term:`SFSQL` standard that PostGIS conforms to.
 
-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".
+The reason the rules are important is because algorithms for geometry calculations depend on consistent structure in the inputs. It is possible to build algorithms that have no structural assumptions, but those routines tend to be very slow, because the first step in any structure-free routine is to *analyze the inputs and build structure into them*.
 
-Voici un exemple de pourquoi cette structuration est importante. Ce polygone n'est pas valide :
+Here's an example of why structure matters. This polygon is invalid:
 
 ::
 
   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 :
+  
+You can see the invalidity a little more clearly in this diagram:
 
 .. image:: ./validity/figure_eight.png
 
-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.
+The outer ring is actually a figure-eight, with a self-intersection in the middle. Note that the graphic routines successfully render the polygon fill, so that visually it is appears to be an "area": two one-unit squares, so a total area of two units of area.
 
-Essayons maintenant de voir ce que pense la base de donnÃ©es de notre polygone :
+Let's see what the database thinks the area of our polygon is:
 
 .. code-block:: sql
 
   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'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".
+What's going on here? The algorithm that calculates area assumes that rings to not self-intersect. A well-behaved ring will always have the area that is bounded (the interior) on one side of the bounding line (it doesn't matter which side, just that it is on *one* side). However, in our (poorly behaved) figure-eight, the bounded area is to the right of the line for one lobe and to the left for the other. This causes the areas calculated for each lobe to cancel out (one comes out as 1, the other as -1) hence the "zero area" result.
 
 
-DÃ©tecter la validitÃ©
---------------------
+Detecting Validity
+------------------
 
-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 :
+In the previous example we had one polygon that we **knew** was invalid. How do we detect invalidity in a table with millions of geometries? With the :command:`ST_IsValid(geometry)` function. Used against our figure-eight, we get a quick answer:
 
 .. 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 utiliser la fonction :command:`ST_IsValidReason(geometry)` pour trouver la cause de non validitÃ© :
+Now we know that the feature is invalid, but we don't know why. We can use the :command:`ST_IsValidReason(geometry)` function to find out the source of the invalidity:
 
 .. code-block:: sql
@@ -72,11 +72,11 @@
   Self-intersection[1 1]
 
-Vous remarquerez qu'en plus de la raison (intersection) la localisation de la non validitÃ© (coordonnÃ©e (1 1)) est aussi renvoyÃ©e.
+Note that in addition to the reason (self-intersection) the location of the invalidity (coordinate (1 1)) is also returned.
 
-Nous pouvons aussi utiiliser la fonction :command:`ST_IsValid(geometry)` pour tester nos tables :
+We can use the :command:`ST_IsValid(geometry)` function to test our tables too:
 
 .. code-block:: sql
 
-  -- Trouver tous les polygones non valides et leur problÃšme
+  -- Find all the invalid polygons and what their problem is
   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]
@@ -94,37 +94,37 @@
 
 
-RÃ©parer les invalides
----------------------
+Repairing Invalidity
+--------------------
 
-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.
+First the bad news: there is no guaranteed way to fix invalid geometries. The worst case scenario is identifying them with the :command:`ST_IsValid(geometry)` function, moving them to a side table, exporting that table, and repairing them externally.
 
-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.
+Here's an example of SQL to move invalid geometries out of the main table into a side table suitable for dumping to an external cleaning process.
 
 .. code-block:: sql
 
-  -- Table Ã  part des gÃ©omÃ©tries non-valides
+  -- Side table of invalids
   CREATE TABLE nyc_neighborhoods_invalid AS
   SELECT * FROM nyc_neighborhoods
   WHERE NOT ST_IsValid(the_geom);
-
-  -- Suppression de la table principale
+  
+  -- Remove them from the main table
   DELETE FROM nyc_neighborhoods
   WHERE NOT ST_IsValid(the_geom);
+  
+A good tool for visually repairing invalid geometry is OpenJump (http://openjump.org) which includes a validation routine under **Tools->QA->Validate Selected Layers**.
 
-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**.
+Now the good news: a large proportion of invalidities **can be fixed inside the database** using the :command:`ST_Buffer` function.
 
-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`.
+The buffer trick takes advantage of the way buffers are built: a buffered geometry is a brand new geometry, constructed by offsetting lines from the original geometry. If you offset the original lines by **nothing** (zero) then the new geometry will be structurally identical to the original one, but because it is built using the :term:`OGC` topology rules, it will be valid.
 
-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.
+For example, here's a classic invalidity -- the "banana polygon" -- a single ring that encloses an area but bends around to touch itself, leaving a "hole" which is not actually a hole.
 
-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
 
-En crÃ©ant un buffer de zero sur le polygone retourne un polygone :term:`OGC` valide, le contour externe et un contour interne qui touche l'autre en un seul point.
+Running the zero-offset buffer on the polygon returns a valid :term:`OGC` polygon, consisting of an outer and inner ring that touch at one point.
 
 .. code-block:: sql
@@ -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 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.
-
+  The "banana polygon" (or "inverted shell") is a case where the :term:`OGC` topology model for valid geometry and the model used internally by ESRI differ. The ESRI model considers rings that touch to be invalid, and prefers the banana form for this kind of shape. The OGC model is the reverse. 
+  
Index: trunk/workshop-foss4g/projection_exercises.rst
===================================================================
--- trunk/workshop-foss4g/projection_exercises.rst	(revision 81)
+++ trunk/workshop-foss4g/projection_exercises.rst	(revision 1)
@@ -1,45 +1,45 @@
 .. _projection_exercises:
 
-Partie 16 : Exercices sur les projections
-=========================================
+Section 16: Projection Exercises
+================================
 
-Voici un rappel de certaines fonctions que nous avons vu. Elles seront utiles pour les exercices !
+Here's a reminder of some of the functions we have seen.  Hint: they should be useful for the exercises!
 
-* :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Ã©rence spatiale
-* :command:`ST_GeomFromText(text)` retourne un objet ``geometry``
-* :command:`ST_AsText(geometry)` retourne un WKT (``texte``)
-* :command:`ST_AsGML(geometry)` retourne un GML (``texte``)
+* :command:`sum(expression)` aggregate to return a sum for a set of records
+* :command:`ST_Length(linestring)` returns the length of the linestring
+* :command:`ST_SRID(geometry, srid)` returns the SRID of the geometry
+* :command:`ST_Transform(geometry, srid)` converts geometries into different spatial reference systems
+* :command:`ST_GeomFromText(text)` returns ``geometry``
+* :command:`ST_AsText(geometry)` returns WKT ``text``
+* :command:`ST_AsGML(geometry)` returns GML ``text``
 
-Rappelez-vous les ressources en ligne :
+Remember the online resources that are available to you:
 
 * http://spatialreference.org
 * http://prj2epsg.org
 
-Et les tables disponibles :
+Also remember the tables we have available:
 
- * ``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
 
-Exercices
+Exercises
 ---------
 
- * **"Quelle est la longueur des rue de New York, mesurÃ©e en UTM 18 ?"**
-
+ * **"What is the length of all streets in New York, as measured in UTM 18?"**
+ 
    .. code-block:: sql
 
@@ -47,10 +47,10 @@
        FROM nyc_streets;
 
-   ::
-
+   :: 
+   
      10418904.7172
-
- * **"Quelle est la dÃ©finition du SRID 2831 ?"**
-
+      
+ * **"What is the WKT definition of SRID 2831?"**   
+    
    .. code-block:: sql
 
@@ -58,35 +58,35 @@
      WHERE SRID = 2831;
 
-Ou, via `prj2epsg <http://prj2epsg.org/epsg/2831>`_
+Or, via `prj2epsg <http://prj2epsg.org/epsg/2831>`_
 
  ::
 
-  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 rues de New York, mesurÃ©e en utilisant le SRID 2831 ?"**
-
+ * **"What is the length of all streets in New York, as measured in SRID 2831?"**
+ 
    .. code-block:: sql
 
@@ -94,24 +94,23 @@
        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 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' ?"**
-
+   
+     The difference between the UTM 18 and the Stateplane Long Island measurements is (10421993 - 10418904)/10418904, or 0.02%. Calculated on the spheroid using :ref:`geography` the total street length is 10421999, which is closer to the Stateplane value. This is not surprising, since the Stateplane Long Island projection is precisely calibrated for a very small area (New York City) while UTM 18 has to provide reasonable results for a large regional area.
+     
+ * **"What is the KML representation of the point at 'Broad St' subway station?"**
+ 
    .. 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.
-
+     
+Hey! The coordinates are in geographics even though we didn't call :command:`ST_Transform`, why? Because the KML standard dictates that all coordinates *must* be in geographics (ESPG:4326, in fact) so the :command:`ST_AsKML` function does the transformation automatically.
Index: trunk/workshop-foss4g/geometry_returning.rst
===================================================================
--- trunk/workshop-foss4g/geometry_returning.rst	(revision 81)
+++ trunk/workshop-foss4g/geometry_returning.rst	(revision 1)
@@ -1,15 +1,15 @@
 .. _geometry_returning:
 
-Partie 18 : Fonctions de construction de gÃ©omÃ©tries
-====================================================
+Section 18: Geometry Constructing Functions
+===========================================
 
-Toute les fonctions que nous avons vu jusqu'Ã  prÃ©sent traitent les gÃ©omÃ©tries "comme elles sont" et retournent:
+All the functions we have seen so far work with geometries "as they are" and returns
+ 
+* analyses of the objects (:command:`ST_Length(geometry)`, :command:`ST_Area(geometry)`), 
+* serializations of the objects (:command:`ST_AsText(geometry)`, :command:`ST_AsGML(geometry)`), 
+* parts of the object (:command:`ST_RingN(geometry,n)`) or 
+* true/false tests (:command:`ST_Contains(geometry,geometry)`, :command:`ST_Intersects(geometry,geometry)`).
 
-* 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)`).
-
-Les "fonctions de construction de gÃ©omÃ©tries" prennent des gÃ©omÃ©tries en entrÃ©e et retourne de nouvelles formes.
+"Geometry constructing functions" take geometries as inputs and output new shapes.
 
 
@@ -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 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.
+A common need when composing a spatial query is to replace a polygon feature with a point representation of the feature. This is useful for spatial joins (as discussed in :ref:`polypolyjoins`) because using :command:`ST_Intersects(geometry,geometry)` on two polygon layers often results in double-counting: a polygon on a boundary will intersect an object on both sides; replacing it with a point forces it to be on one side or the other, not both.
 
- * :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.
-
+ * :command:`ST_Centroid(geometry)` returns a point that is approximately on the center of mass of the input argument. This simple calculation is very fast, but sometimes not desirable, because the returned point is not necessarily in the feature itself. If the input feature has a convexity (imagine the letter 'C') the returned centroid might not be in the interior of the feature.
+ * :command:`ST_PointOnSurface(geometry)` returns a point that is guaranteed to be inside the input argument. It is substantially more computationally expensive than the centroid operation.
+ 
 .. image:: ./geometry_returning/centroid.jpg
 
@@ -28,24 +28,24 @@
 ---------
 
-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.
+The buffering operation is common in GIS workflows, and is also available in PostGIS. :command:`ST_Buffer(geometry,distance)` takes in a buffer distance and geometry type and outputs a polygon with a boundary the buffer distance away from the input geometry. 
 
 .. image:: ./geometry_returning/st_buffer.png
 
-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.
+For example, if the US Park Service wanted to enforce a marine traffic zone around Liberty Island, they might build a 500 meter buffer polygon around the island. Liberty Island is a single census block in our ``nyc_census_blocks`` table, so we can easily extract and buffer it.
 
 .. code-block:: sql
 
-  -- CrÃ©ation d'une nouvelle table avec une zone tampon de 500 m autour de 'Liberty Island'
+  -- Make a new table with a Liberty Island 500m buffer zone
   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();
-
+  -- Update the geometry_columns table
+  SELECT Populate_Geometry_Columns(); 
+  
 .. image:: ./geometry_returning/liberty_positive.jpg
 
-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.
+The :command:`ST_Buffer` function also accepts negative distances and builds inscribed polygons within polygonal inputs. For lines and points you will just get an empty return.
 
 .. image:: ./geometry_returning/liberty_negative.jpg
@@ -55,13 +55,13 @@
 ---------------
 
-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.
+Another classic GIS operation -- the "overlay" -- creates a new coverage by calculating the intersection of two superimposed polygons. The resultant has the property that any polygon in either of the parents can be built by merging polygons in the resultant.
 
-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.
+The :command:`ST_Intersection(geometry A, geometry B)` function returns the spatial area (or line, or point) that both arguments have in common. If the arguments are disjoint, the function returns an empty geometry.
 
 .. code-block:: sql
 
-  -- Quelle est l'aire que ces deux cercles ont en commun ?
-  -- Utilisons la fonction ST_Buffer pour crÃ©er ces cercles !
-
+  -- What is the area these two circles have in common?
+  -- Using ST_Buffer to make the circles!
+  
   SELECT ST_AsText(ST_Intersection(
     ST_Buffer('POINT(0 0)', 2),
@@ -76,32 +76,31 @@
 --------
 
-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` :
+In the previous example we intersected geometries, creating a new geometry that had lines from both the inputs. The :command:`ST_Union` does the reverse; it takes inputs and removes common lines. There are two forms of the :command:`ST_Union` function: 
 
- * :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.
-
+ * :command:`ST_Union(geometry, geometry)`: A two-argument version that takes in two geometries and returns the merged union.  For example, our two-circle example from the previous section looks like this when you replace the intersection with a union.
+ 
    .. code-block:: sql
 
-     -- Quelle est l'aire totale de ces deux cercles ?
-     -- Utilisons ST_Buffer pour crÃ©er les cercles !
-
+     -- What is the total area these two circles cover?
+     -- Using ST_Buffer to make the circles!
+ 
      SELECT ST_AsText(ST_Union(
        ST_Buffer('POINT(0 0)', 2),
        ST_Buffer('POINT(3 0)', 2)
      ));
+  
+   .. image:: ./geometry_returning/union.jpg
+   
 
-   .. image:: ./geometry_returning/union.jpg
+ * :command:`ST_Union([geometry])`: An aggregate version that takes in a set of geometries and returns the merged geometry for the entire group. The aggregate ST_Union can be used with the ``GROUP BY`` SQL statement to create carefully merged subsets of basic geometries. It is very powerful,
+ 
+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.
-
-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.
+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:
 
 ::
 
   360610001009000 = 36 061 00100 9000
-
+  
   36     = State of New York
   061    = New York County (Manhattan)
@@ -109,33 +108,33 @@
   9      = Census Block Group
   000    = Census Block
-
-Ainsi, nous pouvons crÃ©er une carte du comtÃ© en fusionnant toutes les gÃ©omÃ©tries qui partagent les 5 premiers chiffres de  ``blkid``.
+  
+So, we can create a county map by merging all geometries that share the same first 5 digits of their ``blkid``.
 
 .. code-block:: sql
 
-  -- CrÃ©ation d'une table nyc_census_counties en regroupant les blocs
+  -- Create a nyc_census_counties table by merging census blocks
   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
+  
+  -- Update the geometry_columns table
   SELECT Populate_Geometry_Columns();
-
+  
 .. image:: ./geometry_returning/union_counties.png
 
-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.
+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.
 
 .. 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 +144,5 @@
   36085    | 149806077.958252
 
-Ensuite nous calculons l'aire de chaque zone de nos nouveaux polygones de rÃ©gion de la table count :
+Then we calculate the area of each of our new county polygons from the county table:
 
 .. code-block:: sql
@@ -154,5 +153,5 @@
 ::
 
-  countyid |       area
+  countyid |       area       
  ----------+------------------
   36005    | 109807439.720947
@@ -162,19 +161,18 @@
   36085    | 149806077.958252
 
-La mÃªme rÃ©ponse ! Nous avons construit avec succÃšs une table des rÃ©gions de NYC Ã  partir de nos donnÃ©es initiales.
+The same answer! We have successfully built an NYC county table from our census blocks data.
 
-Liste des fonctions
--------------------
+Function List
+-------------
 
-`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_AsText(text) <http://postgis.org/docs/ST_AsText.html>`_: Returns the Well-Known Text (WKT) representation of the geometry/geography without SRID metadata.
 
-`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_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_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_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_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.
+`ST_Union() <http://postgis.org/docs/ST_Union.html>`_: Returns a geometry that represents the point set union of the Geometries.
 
-`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.
+`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.
 
-`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.
-
+`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.
Index: trunk/workshop-foss4g/equality.rst
===================================================================
--- trunk/workshop-foss4g/equality.rst	(revision 81)
+++ trunk/workshop-foss4g/equality.rst	(revision 1)
@@ -1,21 +1,21 @@
 .. _equality:
 
-Partie 22 : ÃgalitÃ©
+Section 22: Equality
 =================================
 
-ÃgalitÃ©
+Equality
 --------
 
-Ã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.
+Determining equality when dealing with geometries can be tricky.  PostGIS supports three different functions that can be used to determine different levels of equality, though for clarity we will use the definitions below.  To illustrate these functions, we will use the following polygons.
 
 .. image:: ./equality/polygon-table.png
 
-Ces polygones sont charger Ã  l'aide des commandes suivantes.
+These polygons are loaded using the following commands.
 
 .. code-block:: sql
 
   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,15 +27,15 @@
         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();
 
 .. image:: ./equality/start13.png
 
-Exactement Ã©gaux
-^^^^^^^^^^^^^^^^
+Exactly Equal
+^^^^^^^^^^^^^
 
-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Ã©.
+Exact equality is determined by comparing two geometries, vertex by vertex, in order, to ensure they are identical in position.  The following examples show how this method can be limited in its effectiveness.
 
 .. 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 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.
+In this example, the polygons are only equal to themselves, not to other seemingly equivalent polygons (as in the case of Polygons 1 through 3).  In the case of Polygons 1, 2, and 3, the vertices are in identical positions but are defined in differing orders.  Polygon 4 has colinear (and thus redundant) vertices on the hexagon edges causing inequality with Polygon 1.
 
-Spatialement Ã©gaux
-^^^^^^^^^^^^^^^^^^
+Spatially Equal
+^^^^^^^^^^^^^^^
 
-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.
+As we saw above, exact equality does not take into account the spatial nature of the geometries.  There is an function, aptly named :command:`ST_Equals`, available to test the spatial equality or equivalence of geometries.
 
 .. 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 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.
+These results are more in line with our intuitive understanding of equality.  Polygons 1 through 4 are considered equal, since they enclose the same area.  Note that neither the direction of the polygon is drawn, the starting point for defining the polygon, nor the number of points used are important here.  What is important is that the polygons contain the same space.  
 
-ÃgalitÃ© des Ã©tendues
-^^^^^^^^^^^^^^^^^^^^^
+Equal Bounds
+^^^^^^^^^^^^
 
-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.
+Exact equality requires, in the worst case, comparison of each and every vertex in the geometry to determine equality.  This can be slow, and may not be appropriate for comparing huge numbers of geometries.  To allow for speedier comparison, the equal bounds operator, :command:`=`, is provided.  This operates only on the bounding box (rectangle), ensuring that the geometries occupy the same two dimensional extent, but not necessarily the same space.
 
 .. 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 Ã©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.
+As you can see, all of our spatially equal geometries also have equal bounds.  Unfortunately, Polygon 5 is also returned as equal under this test, because it shares the same bounding box as the other geometries.  Why is this useful, then?  Although this will be covered in detail later, the shot answer is that this enables the use of spatial indexing that can quickly reduce huge comparison sets into more manageable blocks when joining or filtering data.
 
Index: trunk/workshop-foss4g/spatial_relationships.rst
===================================================================
--- trunk/workshop-foss4g/spatial_relationships.rst	(revision 81)
+++ trunk/workshop-foss4g/spatial_relationships.rst	(revision 1)
@@ -1,32 +1,32 @@
 .. _spatial_relationships:
 
-Partie 10 : Les relations spatiales
-===================================
+Section 10: Spatial Relationships
+=================================
 
-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.
+So far we have only used spatial functions that measure (:command:`ST_Area`, :command:`ST_Length`), serialize (:command:`ST_GeomFromText`) or deserialize (:command:`ST_AsGML`) geometries. What these functions have in common is that they only work on one geometry at a time.
 
-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*.
+Spatial databases are powerful because they not only store geometry, they also have the ability to compare *relationships between geometries*. 
 
-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.
+Questions like âWhich are the closet bike racks to a park?â or âWhere are the intersections of subway lines and streets?â can only be answered by comparing geometries representing the bike racks, streets, and subway lines.
 
-Le standard de l'OGC dÃ©finit l'ensemble de fonctions suivantes pour comparer les gÃ©omÃ©tries.
+The OGC standard defines the following set of methods to compare geometries.
 
 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)` tests the spatial equality of two geometries. 
 
 .. figure:: ./spatial_relationships/st_equals.png
    :align: center
 
-ST_Equals retourne TRUE si les deux gÃ©omÃ©tries sont du mÃªme type et ont des coordonnÃ©es x.y identiques.
+ST_Equals returns TRUE if two geometries of the same type have identical x,y coordinate values, i.e. if the secondary shape is equal (identical) to the primary shape object.
 
-PremiÃšrement, essayons de rÃ©cupÃ©rer la reprÃ©sentation d'un point de notre table ``nyc_subway_stations``. Nous ne prendrons que l'entrÃ©e : 'Broad St'.
+First, let's retrieve a representation of a point from our ``nyc_subway_stations`` table. We'll take just the entry for 'Broad St'.
 
 .. code-block:: sql
 
   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`:
+ 
+Then, plug the geometry representation back into an :command:`ST_Equals` test:
 
 .. code-block:: sql
 
-  SELECT name
-  FROM nyc_subway_stations
+  SELECT name 
+  FROM nyc_subway_stations 
   WHERE ST_Equals(the_geom, '0101000020266900000EEBD4CF27CF2141BC17D69516315141');
 
@@ -50,37 +50,37 @@
 .. note::
 
-  La reprÃ©sentation du point n'est pas vraiment comprÃ©hensible (``0101000020266900000EEBD4CF27CF2141BC17D69516315141``) mais c'est exactement la reprÃ©sentation des coordonnÃ©es. Pour tester l'Ã©galitÃ©, l'utilisation de ce format est nÃ©cessaire.
+  The representation of the point was not very human readable (``0101000020266900000EEBD4CF27CF2141BC17D69516315141``) but it was an exact representation of the coordinate values. For a test like equality, using the exact coordinates in necessary.
 
 
-ST_Intersects, ST_Disjoint, ST_Crosses et ST_Overlaps
+ST_Intersects, ST_Disjoint, ST_Crosses and ST_Overlaps
 ------------------------------------------------------
 
-:command:`ST_Intersects`, :command:`ST_Crosses`, et :command:`ST_Overlaps` teste si l'intÃ©rieur des gÃ©omÃ©tries s'intersecte, se croise ou se chevauche.
+:command:`ST_Intersects`, :command:`ST_Crosses`, and :command:`ST_Overlaps` test whether the interiors of the geometries intersect. 
 
 .. figure:: ./spatial_relationships/st_intersects.png
    :align: center
 
-: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.
+:command:`ST_Intersects(geometry A, geometry B)` returns t (TRUE) if the intersection does not result in an empty set. Intersects returns the exact opposite result of 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 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.
+The opposite of ST_Intersects is :command:`ST_Disjoint(geometry A , geometry B)`. If two geometries are disjoint, they do not intersect, and vice-versa. In fact, it is often more efficient to test "not intersects" than to test "disjoint" because the intersects tests can be spatially indexed, while the disjoint test cannot.
 
-.. figure:: ./spatial_relationships/st_crosses.png
+.. figure:: ./spatial_relationships/st_crosses.png  
    :align: center
 
-Pour les comparaisons de couples de types multipoint/polygon, multipoint/linestring, linestring/linestring, linestring/polygon, et linestring/multipolygon, :command:`ST_Crosses(geometry A, geometry B)` retourne t (TRUE) si les rÃ©sultats de l'intersection sont Ã  l'intÃ©rieur des deux gÃ©omÃ©tries.
+For multipoint/polygon, multipoint/linestring, linestring/linestring, linestring/polygon, and linestring/multipolygon comparisons, :command:`ST_Crosses(geometry A, geometry B)` returns t (TRUE) if the intersection results in a geometry whose dimension is one less than the maximum dimension of the two source geometries and the intersection set is interior to both source geometries.
 
 .. figure:: ./spatial_relationships/st_overlaps.png
    :align: center
 
-: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.
+:command:`ST_Overlaps(geometry A, geometry B)` compares two geometries of the same dimension and returns TRUE if their intersection set results in a geometry different from both but of the same dimension.
 
-Essayons de prendre la station de mÃ©tro de Broad Street et de dÃ©terminer son voisinage en utilisant la fonction :command:`ST_Intersects` :
+Let's take our Broad Street subway station and determine its neighborhood using the :command:`ST_Intersects` function:
 
 .. 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
@@ -97,30 +97,30 @@
 ----------
 
-:command:`ST_Touches` teste si deux gÃ©omÃ©tries se touchent en leur contours extÃ©rieurs, mais leur contours intÃ©rieurs ne s'intersectent pas
+:command:`ST_Touches` tests whether two geometries touch at their boundaries, but do not intersect in their interiors 
 
 .. figure:: ./spatial_relationships/st_touches.png
    :align: center
 
-: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.
+:command:`ST_Touches(geometry A, geometry B)` returns TRUE if either of the geometries' boundaries intersect or if only one of the geometry's interiors intersects the other's boundary.
 
-ST_Within et ST_Contains
+ST_Within and ST_Contains
 -------------------------
 
-:command:`ST_Within` et :command:`ST_Contains` teste si une gÃ©omÃ©trie est totalement incluse dans l'autre.
+:command:`ST_Within` and :command:`ST_Contains` test whether one geometry is fully within the other. 
 
 .. figure:: ./spatial_relationships/st_within.png
    :align: center
+    
+:command:`ST_Within(geometry A , geometry B)` returns TRUE if the first geometry is completely within the second geometry. ST_Within tests for the exact opposite result of 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.
+:command:`ST_Contains(geometry A, geometry B)` returns TRUE if the second geometry is completely contained by the first geometry. 
 
 
-ST_Distance et ST_DWithin
+ST_Distance and ST_DWithin
 --------------------------
 
-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".
+An extremely common GIS question is "find all the stuff within distance X of this other stuff". 
 
-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.
+The :command:`ST_Distance(geometry A, geometry B)` calculates the *shortest* distance between two geometries and returns it as a float. This is useful for actually reporting back the distance between objects.
 
 .. code-block:: sql
@@ -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 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.
+For testing whether two objects are within a distance of one another, the :command:`ST_DWithin` function provides an index-accelerated true/false test. This is useful for questions like "how many trees are within a 500 meter buffer of the road?". You don't have to calculate an actual buffer, you just have to test the distance relationship.
 
   .. 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 :
+    
+Using our Broad Street subway station again, we can find the streets nearby (within 10 meters of) the subway stop:
 
 .. 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,29 +159,31 @@
      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.
+And we can verify the answer on a map. The Broad St station is actually at the intersection of Wall, Broad and Nassau Streets.
 
 .. image:: ./spatial_relationships/broad_st.jpg
 
-Liste des fonctions
--------------------
+Function List
+-------------
 
-`ST_Contains(geometry A, geometry B) <http://postgis.org/docs/ST_Contains.html>`_ : retourne TRUE si aucun des points de B n'est Ã  l'extÃ©rieur de A, et au moins un point de l'intÃ©rieur de B est Ã  l'intÃ©rieur de A.
+`ST_Contains(geometry A, geometry B) <http://postgis.org/docs/ST_Contains.html>`_: Returns true if and only if no points of B lie in the exterior of A, and at least one point of the interior of B lies in the interior of A.
 
-`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_Crosses(geometry A, geometry B)  <http://postgis.org/docs/ST_Crosses.html>`_: Returns TRUE if the supplied geometries have some, but not all, interior points in common.
 
-`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_Disjoint(geometry A , geometry B) <http://postgis.org/docs/ST_Disjoint.html>`_: Returns TRUE if the Geometries do not "spatially intersect" - if they do not share any space together.
 
-`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>`_: Returns the 2-dimensional cartesian minimum distance (based on spatial ref) between two geometries in projected units. 
 
-`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>`_: Returns true if the geometries are within the specified distance (radius) of one another. 
 
-`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_Equals(geometry A, geometry B) <http://postgis.org/docs/ST_Equals.html>`_: Returns true if the given geometries represent the same geometry. Directionality is ignored.
 
-`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>`_: Returns TRUE if the Geometries/Geography "spatially intersect" - (share any portion of space) and FALSE if they don't (they are Disjoint). 
 
-`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.
+`ST_Overlaps(geometry A, geometry B) <http://postgis.org/docs/ST_Overlaps.html>`_: Returns TRUE if the Geometries share space, are of the same dimension, but are not completely contained by each other.
 
-`ST_Touches(geometry A, geometry B)  <http://postgis.org/docs/ST_Touches.html>`_ : retourne TRUE si les gÃ©omÃ©tries ont au moins un point en commun, mais leur intÃ©rieurs ne s'intersectent pas.
+`ST_Touches(geometry A, geometry B)  <http://postgis.org/docs/ST_Touches.html>`_: Returns TRUE if the geometries have at least one point in common, but their interiors do not intersect.
 
-`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
+`ST_Within(geometry A , geometry B) <http://postgis.org/docs/ST_Within.html>`_: Returns true if the geometry A is completely inside geometry B
 
+
+
Index: trunk/workshop-foss4g/geometries.rst
===================================================================
--- trunk/workshop-foss4g/geometries.rst	(revision 81)
+++ trunk/workshop-foss4g/geometries.rst	(revision 1)
@@ -1,17 +1,17 @@
 .. _geometries:
 
-Partie 8 : Les gÃ©ometries
-=========================
+Section 8: Geometries
+=====================
 
 Introduction
 ------------
 
-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.
+In the previous :ref:`section <loading_data>`, we loaded a variety of data.  Before we start playing with our data lets have a look at some simpler examples.  In pgAdmin, once again select the **nyc** database and open the SQL query tool.  Paste this example SQL code into the pgAdmin SQL Editor window (removing any text that may be there by default) and then execute.
 
 .. 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,27 +19,26 @@
     ('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 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
--------------------------
-
-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 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.
+The above example CREATEs a table (**geometries**) then INSERTs five geometries: a point, a line, a polygon, a polygon with a hole, and a collection. Finally, the inserted rows are SELECTed and displayed in the Output pane.
+
+Metadata Tables
+---------------
+
+In conformance with the Simple Features for SQL (:term:`SFSQL`) specification, PostGIS provides two tables to track and report on the geometry types available in a given database. 
+
+* The first table, ``spatial_ref_sys``, defines all the spatial reference systems known to the database and will be described in greater detail later.  
+* The second table, ``geometry_columns``, provides a listing of all "features" (defined as an object with geometric attributes), and the basic details of those features.  
 
 .. image:: ./geometries/table01.png
 
-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 :
-
+In our introductory example, the :command:`Populate_Geometry_Columns()` function finds all the columns in the database that contain geometry and updates the ``geometry_columns`` table to include references to them.  
+
+Lets have a look at the ``geometry_columns`` table in our database.  Paste this command in the Query Tool as before:
 
 .. code-block:: sql
@@ -49,21 +48,21 @@
 .. 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 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Ã©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.
-
-Notre table exemple contient diffÃ©rents types de gÃ©omÃ©tries. Nous pouvons rÃ©cupÃ©rer les informations de chaque objet en utilisant les fonctions qui lisent les mÃ©tadonnÃ©es de la gÃ©omÃ©trie.
-
- * :command:`ST_GeometryType(geometry)` retourne le type de la gÃ©omÃ©trie
- * :command:`ST_NDims(geometry)` retourne le nombre de dimensions d'une gÃ©omÃ©trie
- * :command:`ST_SRID(geometry)` retourne l'identifiant de rÃ©fÃ©rence spatiale de la gÃ©omÃ©trie
+* ``f_table_catalog``, ``f_table_schema``, and ``f_table_name`` provide the fully qualified name of the feature table containing a given geometry.  Because PostgreSQL doesn't make use of catalogs, ``f_table_catalog`` will tend to be empty.  
+* ``f_geometry_column`` is the name of the column that geometry containing column -- for feature tables with multiple geometry columns, there will be one record for each.  
+* ``coord_dimension`` and ``srid`` define the the dimension of the geometry (2-, 3- or 4-dimensional) and the Spatial Reference system identifier that refers to the ``spatial_ref_sys`` table respectively.  
+* The ``type`` column defines the type of geometry as described below; we've seen Point and Linestring types so far.  
+
+By querying this table, GIS clients and libraries can determine what to expect when retrieving data and can perform any necessary projection, processing or rendering without needing to inspect each geometry.
+
+Representing Real World Objects
+-------------------------------
+
+The Simple Features for SQL (:term:`SFSQL`) specification, the original guiding standard for PostGIS development, defines how a real world object is represented.  By taking a continuous shape and digitizing it at a fixed resolution we achieve a passable representation of the object.  SFSQL only handled 2-dimensional representations.  PostGIS has extended that to include 3- and 4-dimensional representations; more recently the SQL-Multimedia Part 3 (:term:`SQL/MM`) specification has officially defined their own representation.  
+
+Our example table contains a mixture of different geometry types. We can collect general information about each object using functions that read the geometry metadata.
+
+ * :command:`ST_GeometryType(geometry)` returns the type of the geometry
+ * :command:`ST_NDims(geometry)` returns the number of dimensions of the geometry
+ * :command:`ST_SRID(geometry)` returns the spatial reference identifier number of the geometry
 
 .. code-block:: sql
@@ -74,5 +73,5 @@
 ::
 
-       name       |    st_geometrytype    | st_ndims | st_srid
+       name       |    st_geometrytype    | st_ndims | st_srid 
  -----------------+-----------------------+----------+---------
   Point           | ST_Point              |        2 |      -1
@@ -84,15 +83,15 @@
 
 
-Les points
-~~~~~~~~~~~
+Points
+~~~~~~
 
 .. image:: ./introduction/points.png
    :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Ã©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)
+A spatial **point** represents a single location on the Earth.  This point is represented by a single coordinate (including either 2-, 3- or 4-dimensions).  Points are used to represent objects when the exact details, such as shape and size, are not important at the target scale.  For example, cities on a map of the world can be described as points, while a map of a single state might represent cities as polygons.  
+
+.. code-block:: sql
+
+  SELECT ST_AsText(geom) 
     FROM geometries
     WHERE name = 'Point';
@@ -102,10 +101,10 @@
   POINT(0 0)
 
-Certaines des fonctions spÃ©cifiques pour travailler avec les points sont :
-
- * :command:`ST_X(geometry)` retourne la composante X
- * :command:`ST_Y(geometry)` retourne la composante Y
-
-Donc, nous pouvons lire les coordonnÃ©es d'un point de la maniÃšre suivante :
+Some of the specific spatial functions for working with points are:
+
+ * :command:`ST_X(geometry)` returns the X ordinate
+ * :command:`ST_Y(geometry)` returns the Y ordinate
+
+So, we can read the ordinates from a point like this:
 
 .. code-block:: sql
@@ -115,5 +114,5 @@
     WHERE name = 'Point';
 
-La table des stations de mÃ©tro de la ville de New York  (``nyc_subway_stations``) est un ensemble de donnÃ©es reprÃ©sentÃ© sous la forme de points. La requÃªte SQL suivante renverra la gÃ©omÃ©trie associÃ©e Ã  un point (dans la colonne :command:`ST_AsText`).
+The New York City subway stations (``nyc_subway_stations``) table is a data set represented as points. The following SQL query will return the geometry associated with one point (in the :command:`ST_AsText` column).
 
 .. code-block:: sql
@@ -124,5 +123,5 @@
 
 
-Les lignes
+Linestrings
 ~~~~~~~~~~~
 
@@ -130,32 +129,32 @@
    :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Ã©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`) :
-
-.. code-block:: sql
-
-  SELECT ST_AsText(geom)
+A **linestring** is a path between locations.  It takes the form of an ordered series of two or more points.  Roads and rivers are typically represented as linestrings.  A linestring is said to be **closed** if it starts and ends on the same point.  It is said to be **simple** if it does not cross or touch itself (except at its endpoints if it is closed).  A linestring can be both **closed** and **simple**.
+
+The street network for New York (``nyc_streets``) was loaded earlier in the workshop.  This dataset contains details such as name, and type.  A single real world street may consist of many linestrings, each representing a segment of road with different attributes.
+
+The following SQL query will return the geometry associated with one linestring (in the :command:`ST_AsText` column).
+
+.. code-block:: sql
+
+  SELECT ST_AsText(geom) 
     FROM geometries
     WHERE name = 'Linestring';
-
+  
 ::
 
   LINESTRING(0 0, 1 1, 2 1, 2 2)
 
-Les fonctions spatiales permettant de travailler avec les lignes sont les suivantes :
-
- * :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 dernier point d'une ligne
- * :command:`ST_NPoints(geometry)` retourne le nombre de points dans une ligne
-
-Donc, la longueur de notre ligne est :
-
-.. code-block:: sql
-
-  SELECT ST_Length(geom)
+Some of the specific spatial functions for working with linestrings are:
+
+ * :command:`ST_Length(geometry)` returns the length of the linestring
+ * :command:`ST_StartPoint(geometry)` returns the first coordinate as a point
+ * :command:`ST_EndPoint(geometry)` returns the last coordinate as a point
+ * :command:`ST_NPoints(geometry)` returns the number of coordinates in the linestring
+
+So, the length of our linestring is:
+
+.. code-block:: sql
+
+  SELECT ST_Length(geom) 
     FROM geometries
     WHERE name = 'Linestring';
@@ -166,19 +165,19 @@
 
 
-Les polygones
-~~~~~~~~~~~~~~
+Polygons
+~~~~~~~~
 
 .. image:: ./introduction/polygons.png
   :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Ã©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`).
-
-.. code-block:: sql
-
-  SELECT ST_AsText(geom)
+A polygon is a representation of an area.  The outer boundary of the polygon is represented by a ring.  This ring is a linestring that is both closed and simple as defined above.  Holes within the polygon are also represented by rings.
+
+Polygons are used to represent objects whose size and shape are important.  City limits, parks, building footprints or bodies of water are all commonly represented as polygons when the scale is sufficiently high to see their area.  Roads and rivers can sometimes be represented as polygons.
+
+The following SQL query will return the geometry associated with one linestring (in the :command:`ST_AsText` column).
+
+.. code-block:: sql
+
+  SELECT ST_AsText(geom) 
     FROM geometries
     WHERE name LIKE 'Polygon%';
@@ -186,5 +185,5 @@
 .. note::
 
-  PlutÃŽt que d'utiliser le signe ``=`` dans notre clause ``WHERE``, nous avons utilisÃ© l'opÃ©rateur ``LIKE`` pour pouvoir dÃ©finir notre comparaison. Vous auriez sans doute voulu utiliser le symbole ``*`` pour exprimer "n'importe quelle valeur" mais en SQL vous devez utiliser : ``%`` et l'opÃ©rateur ``LIKE`` pour informer le systÃšme que cette comparaison doit Ãªtre possible.
+  Rather than using an ``=`` sign in our ``WHERE`` clause, we are using the ``LIKE`` operator to carry out a string matching operation. You may be used to the ``*`` symbol as a "glob" for pattern matching, but in SQL the ``%`` symbol is used, along with the ``LIKE`` operator to tell the system to do globbing.
 
 ::
@@ -193,21 +192,21 @@
  POLYGON((0 0, 10 0, 10 10, 0 10, 0 0),(1 1, 1 2, 2 2, 2 1, 1 1))
 
-Le premier polygone a seulement une ligne. Le second a un "trou". La plupart des systÃšmes de rendu graphique supportent le concept de "polygone", mais les systÃšmes SIG sont les seuls Ã  accepter que les polygones puissent contenir des trous.
+The first polygon has only one ring. The second one has an interior "hole". Most graphics systems include the concept of a "polygon", but GIS systems are relatively unique in allowing polygons to explicitly have holes.
 
 .. image:: ./screenshots/polygons.png
 
-Certaines des fonctions spatiales spÃ©cifiques de traitement des polygones sont :
-
- * :command:`ST_Area(geometry)` retourne l'aire d'un polygone
- * :command:`ST_NRings(geometry)` retourne le nombre de contours (habituellement 1, plus lorsqu'il y a des trous)
- * :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 tous les contours
-
-Nous pouvons calculer l'aire de nos polygones en utilisant la fonction area :
-
-.. code-block:: sql
-
-  SELECT name, ST_Area(geom)
+Some of the specific spatial functions for working with polygons are:
+
+ * :command:`ST_Area(geometry)` returns the area of the polygons
+ * :command:`ST_NRings(geometry)` returns the number of rings (usually 1, more of there are holes)
+ * :command:`ST_ExteriorRing(geometry)` returns the outer ring as a linestring
+ * :command:`ST_InteriorRingN(geometry,n)` returns a specified interior ring as a linestring
+ * :command:`ST_Perimeter(geometry)` returns the length of all the rings
+
+We can calculate the area of our polygons using the area function:
+
+.. code-block:: sql
+
+  SELECT name, ST_Area(geom) 
     FROM geometries
     WHERE name LIKE 'Polygon%';
@@ -218,25 +217,25 @@
   PolygonWithHole    99
 
-Remarquez que le polygone contenant un trou a une aire Ã©gale Ã  l'aire du contour externe (un carrÃ© de 10 sur 10) moins l'aire du trou (un carrÃ© de 1 sur 1).
-
-Les collections
-~~~~~~~~~~~~~~~~
-
-Il y a quatre types de collections, qui regroupent ensemble plusieurs gÃ©omÃ©tries simples.
-
- * **MultiPoint**, une collection de points
- * **MultiLineString**, une collection de lignes
- * **MultiPolygon**, une collection de polygones
- * **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 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.
+Note that the polygon with a hole has an area that is the area of the outer shell (a 10x10 square) minus the area of the hole (a 1x1 square).
+
+Collections
+~~~~~~~~~~~
+
+There are four collection types, which group multiple simple geometries into sets.  
+
+ * **MultiPoint**, a collection of points
+ * **MultiLineString**, a collection of linestrings
+ * **MultiPolygon**, a collection of polygons
+ * **GeometryCollection**, a heterogeneous collection of any geometry (including other collections)
+
+Collections are another concept that shows up in GIS software more than in generic graphics software. They are useful for directly modeling real world objects as spatial objects. For example, how to model a lot that is split by a right-of-way? As a **MultiPolygon**, with a part on either side of the right-of-way.
 
 .. image:: ./screenshots/collection2.png
 
-Notre collection exemple contient un polygone et un point :
-
-.. code-block:: sql
-
-  SELECT name, ST_AsText(geom)
+Our example collection contains a polygon and a point:
+
+.. code-block:: sql
+
+  SELECT name, ST_AsText(geom) 
     FROM geometries
     WHERE name = 'Collection';
@@ -248,61 +247,63 @@
 .. image:: ./screenshots/collection.png
 
-Certaines des fonctions spatiales spÃ©cifiques Ã  la manipulation des collections sont :
-
- * :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 type polygone
- * :command:`ST_Length(geometry)` retourne la longueur totale des composantes de type ligne
-
-EntrÃ© / Sortie des gÃ©omÃ©tries
------------------------------
-
-Dans la base de donnÃ©es, les gÃ©omÃ©tries sont stockÃ©es dans un format utilisÃ© uniquement par le programme PostGIS. Afin que des programmes externes puissent insÃ©rer et rÃ©cupÃ©rer les donnÃ©es utiles, elles ont besoin d'Ãªtre converties dans un format compris par l'application. Heureusement, PostGIS supporte un grand nombre de formats en entrÃ©e et en sortie :
-
- * 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``
-
+Some of the specific spatial functions for working with collections are:
+
+ * :command:`ST_NumGeometries(geometry)` returns the number of parts in the collection
+ * :command:`ST_GeometryN(geometry,n)` returns the specified part
+ * :command:`ST_Area(geometry)` returns the total area of all polygonal parts
+ * :command:`ST_Length(geometry)` returns the total length of all linear parts
+
+
+
+Geometry Input and Output
+-------------------------
+
+Within the database, geometries are stored on disk in a format only used by the PostGIS program. In order for external programs to insert and retrieve useful geometries, they need to be converted into a format that other applications can understand. Fortunately, PostGIS supports emitting and consuming geometries in a large number of formats:
+
+ * Well-known text (:term:`WKT`)
+ 
+   * :command:`ST_GeomFromText(text)` returns ``geometry``
+   * :command:`ST_AsText(geometry)` returns ``text``
+   * :command:`ST_AsEWKT(geometry)` returns ``text``
+   
+ * Well-known binary (:term:`WKB`)
+ 
+   * :command:`ST_GeomFromWKB(bytea)` returns ``geometry``
+   * :command:`ST_AsBinary(geometry)` returns ``bytea``
+   * :command:`ST_AsEWKB(geometry)` returns ``bytea``
+   
  * Geographic Mark-up Language (:term:`GML`)
-
-   * :command:`ST_GeomFromGML(text)` retourne ``geometry``
-   * :command:`ST_AsGML(geometry)` retourne ``text``
-
+ 
+   * :command:`ST_GeomFromGML(text)` returns ``geometry``
+   * :command:`ST_AsGML(geometry)` returns ``text``
+   
  * Keyhole Mark-up Language (:term:`KML`)
-
-   * :command:`ST_GeomFromKML(text)` retourne ``geometry``
-   * :command:`ST_AsKML(geometry)` retourne ``text``
-
+ 
+   * :command:`ST_GeomFromKML(text)` returns ``geometry``
+   * :command:`ST_AsKML(geometry)` returns ``text``
+   
  * :term:`GeoJSON`
-
-   * :command:`ST_AsGeoJSON(geometry)` retourne ``text``
-
+ 
+   * :command:`ST_AsGeoJSON(geometry)` returns ``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) :
+ 
+   * :command:`ST_AsSVG(geometry)` returns ``text``
+ 
+The following SQL query shows an example of :term:`WKB` representation (the call to :command:`encode()` is required to convert the binary output into an ASCII form for printing):
 
 .. code-block:: sql
 
   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');
 
 .. image:: ./geometries/represent-04.png
 
-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 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 :
+For the purposes of this workshop we will continue to use WKT to ensure you can read and understand the geometries we're viewing.  However, most actual processes, such as viewing data in a GIS application, transferring data to a web service, or processing data remotely, WKB is the format of choice.  
+
+Since WKT and WKB were defined in the  :term:`SFSQL` specification, they do not handle 3- or 4-dimensional geometries.  For these cases PostGIS has defined the Extended Well Known Text (EWKT) and Extended Well Known Binary (EWKB) formats.  These provide the same formatting capabilities of WKT and WKB with the added dimensionality.
+
+Here is an example of a 3D linestring in WKT:
 
 .. code-block:: sql
@@ -319,5 +320,5 @@
 .. image:: ./geometries/represent-06.png
 
-En plus de pouvoir gÃ©nÃ©rer les diffÃ©rents formats en sortie (WKT, WKB, GML, KML, JSON, SVG), PostGIS permet aussi de lire 4 de ces formats (WKT, WKB, GML, KML). La plupart des applications utilisent des fonctions crÃ©ant des gÃ©omÃ©tries Ã  l'aide du format WKT ou WKB, mais les autres marchent aussi. Voici un exemple qui lit du GML et retourne du JSON :
+In addition to emitters for the various forms (WKT, WKB, GML, KML, JSON, SVG), PostGIS also has consumers for four (WKT, WKB, GML, KML). Most applications use the WKT or WKB geometry creation functions, but the others work too. Here's an example that consumes GML and output JSON:
 
 .. code-block:: sql
@@ -327,63 +328,64 @@
 .. image:: ./geometries/represent-07.png
 
-Liste des fonctions
--------------------
-
-`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 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.
-
-`ST_AsGML <http://postgis.org/docs/ST_AsGML.html>`_: retourne la gÃ©omÃ©trie au format GML version 2 ou 3.
-
-`ST_AsKML <http://postgis.org/docs/ST_AsKML.html>`_: retourne la gÃ©omÃ©trie au format KML. Nombreuses variantes. Par dÃ©faut : version=2 et precision=15.
-
-`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-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.
-
-`ST_GeomFromKML <http://postgis.org/docs/ST_GeomFromKML.html>`_: prend en entrÃ©e une reprÃ©sentation KML de la gÃ©omÃ©trie et retourne un object PostGIS de type geometry.
-
-`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Ã©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.
-
-`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Ã©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.
-
-`ST_NPoints <http://postgis.org/docs/ST_NPoints.html>`_: retourne le nombre de points dans une gÃ©omÃ©trie.
-
-`ST_NRings <http://postgis.org/docs/ST_NRings.html>`_: si la gÃ©omÃ©trie est un polygone ou un multi-polygone, retourne le nombre de contours.
-
-`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 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.
-
-`ST_StartPoint <http://postgis.org/docs/ST_StartPoint.html>`_: retourne le premier point d'une ligne.
-
-`ST_X <http://postgis.org/docs/ST_X.html>`_: retourne la coordonnÃ©e X d'un point, ou NULL si non prÃ©sent. L'argument passÃ© doit Ãªtre un point.
-
-`ST_Y <http://postgis.org/docs/ST_Y.html>`_: retourne la coordonnÃ©e Y d'un point, ou NULL si non prÃ©sent. L'argument passÃ© doit Ãªtre un point.
-
+Function List
+-------------
+
+`Populate_Geometry_Columns <http://postgis.org/docs/Populate_Geometry_Columns.html>`_: Ensures geometry columns have appropriate spatial constraints and exist in the geometry_columns table..
+
+`ST_Area <http://postgis.org/docs/ST_Area.html>`_: Returns the area of the surface if it is a polygon or multi-polygon. For "geometry" type area is in SRID units. For "geography" area is in square meters.
+
+`ST_AsText <http://postgis.org/docs/ST_AsText.html>`_: Returns the Well-Known Text (WKT) representation of the geometry/geography without SRID metadata.
+
+`ST_AsBinary <http://postgis.org/docs/ST_AsBinary.html>`_: Returns the Well-Known Binary (WKB) representation of the geometry/geography without SRID meta data.
+
+`ST_EndPoint <http://postgis.org/docs/ST_EndPoint.html>`_: Returns the last point of a LINESTRING geometry as a POINT.
+
+`ST_AsEWKB <http://postgis.org/docs/ST_AsEWKB.html>`_: Returns the Well-Known Binary (WKB) representation of the geometry with SRID meta data.
+
+`ST_AsEWKT <http://postgis.org/docs/ST_AsEWKT.html>`_: Returns the Well-Known Text (WKT) representation of the geometry with SRID meta data.
+
+`ST_AsGeoJSON <http://postgis.org/docs/ST_AsGeoJSON.html>`_: Returns the geometry as a GeoJSON element.
+
+`ST_AsGML <http://postgis.org/docs/ST_AsGML.html>`_: Returns the geometry as a GML version 2 or 3 element.
+
+`ST_AsKML <http://postgis.org/docs/ST_AsKML.html>`_: Returns the geometry as a KML element. Several variants. Default version=2, default precision=15.
+
+`ST_AsSVG <http://postgis.org/docs/ST_AsSVG.html>`_: Returns a Geometry in SVG path data given a geometry or geography object.
+
+`ST_ExteriorRing <http://postgis.org/docs/ST_ExteriorRing.html>`_: Returns a line string representing the exterior ring of the POLYGON geometry. Return NULL if the geometry is not a polygon. Will not work with MULTIPOLYGON
+
+`ST_GeometryN <http://postgis.org/docs/ST_GeometryN.html>`_: Returns the 1-based Nth geometry if the geometry is a GEOMETRYCOLLECTION, MULTIPOINT, MULTILINESTRING, MULTICURVE or MULTIPOLYGON. Otherwise, return NULL.
+
+`ST_GeomFromGML <http://postgis.org/docs/ST_GeomFromGML.html>`_: Takes as input GML representation of geometry and outputs a PostGIS geometry object.
+
+`ST_GeomFromKML <http://postgis.org/docs/ST_GeomFromKML.html>`_: Takes as input KML representation of geometry and outputs a PostGIS geometry object
+
+`ST_GeomFromText <http://postgis.org/docs/ST_GeomFromText.html>`_: Returns a specified ST_Geometry value from Well-Known Text representation (WKT).
+
+`ST_GeomFromWKB <http://postgis.org/docs/ST_GeomFromWKB.html>`_: Creates a geometry instance from a Well-Known Binary geometry representation (WKB) and optional SRID.
+
+`ST_GeometryType <http://postgis.org/docs/ST_GeometryType.html>`_: Returns the geometry type of the ST_Geometry value.
+
+`ST_InteriorRingN <http://postgis.org/docs/ST_InteriorRingN.html>`_: Returns the Nth interior linestring ring of the polygon geometry. Return NULL if the geometry is not a polygon or the given N is out of range.
+
+`ST_Length <http://postgis.org/docs/ST_Length.html>`_: Returns the 2d length of the geometry if it is a linestring or multilinestring. geometry are in units of spatial reference and geography are in meters (default spheroid)
+
+`ST_NDims <http://postgis.org/docs/ST_NDims.html>`_: Returns coordinate dimension of the geometry as a small int. Values are: 2,3 or 4.
+
+`ST_NPoints <http://postgis.org/docs/ST_NPoints.html>`_: Returns the number of points (vertexes) in a geometry.
+
+`ST_NRings <http://postgis.org/docs/ST_NRings.html>`_: If the geometry is a polygon or multi-polygon returns the number of rings.
+
+`ST_NumGeometries <http://postgis.org/docs/ST_NumGeometries.html>`_: If geometry is a GEOMETRYCOLLECTION (or MULTI*) returns the number of geometries, otherwise return NULL.
+
+`ST_Perimeter <http://postgis.org/docs/ST_Perimeter.html>`_: Returns the length measurement of the boundary of an ST_Surface or ST_MultiSurface value. (Polygon, Multipolygon)
+
+`ST_SRID <http://postgis.org/docs/ST_SRID.html>`_: Returns the spatial reference identifier for the ST_Geometry as defined in spatial_ref_sys table.
+
+`ST_StartPoint <http://postgis.org/docs/ST_StartPoint.html>`_: Returns the first point of a LINESTRING geometry as a POINT.
+
+`ST_X <http://postgis.org/docs/ST_X.html>`_: Returns the X coordinate of the point, or NULL if not available. Input must be a point.
+
+`ST_Y <http://postgis.org/docs/ST_Y.html>`_: Returns the Y coordinate of the point, or NULL if not available. Input must be a point.
+
+
Index: trunk/workshop-foss4g/indexing.rst
===================================================================
--- trunk/workshop-foss4g/indexing.rst	(revision 81)
+++ trunk/workshop-foss4g/indexing.rst	(revision 1)
@@ -1,26 +1,26 @@
 .. _indexing:
 
-Partie 14 : L'indexation spatiale
-=================================
+Section 14: Spatial Indexing
+============================
 
-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.
+Recall that spatial index is one of the three key features of a spatial database. Indexes are what make using a spatial database for large data sets possible. Without indexing, any search for a feature would require a âsequential scanâ of every record in the database. Indexing speeds up searching by organizing the data into a search tree which can be quickly traversed to find a particular record. 
 
-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.
+Spatial indices are one of the greatest assets of PostGIS.  In the previous example building spatial joins requires comparing whole tables with each other. This can get very costly: joining two tables of 10,000 records each without indexes would require 100,000,000 comparisons; with indexes the cost could be as low as 20,000 comparisons.
 
-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``.
+When we loaded the ``nyc_census_blocks`` table, the pgShapeLoader automatically created a spatial index called ``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 index.
+To demonstrate how important indexes are for performance, let's search ``nyc_census_blocks`` **without** our spatial index. 
 
-La premiÃšre Ã©tape consiste Ã  supprimer l'index.
+Our first step is to remove the index.
 
 .. code-block:: sql
 
   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.
+   The ``DROP INDEX`` statement drops an existing index from the database system. For more information, see the PostgreSQL `documentation <http://www.postgresql.org/docs/7.4/interactive/sql-dropindex.html>`_.
+   
+Now, watch the "Timing" meter at the lower right-hand corner of the pgAdmin query window and run the following. Our query searches through every single census block in order to identify the Broad Street entry.
 
 .. code-block:: sql
@@ -31,14 +31,14 @@
   ON ST_Contains(blocks.the_geom, subways.the_geom)
   WHERE subways.name = 'Broad St';
-
+  
 ::
 
-       blkid
+       blkid      
  -----------------
   360610007003006
+  
+The ``nyc_census_blocks`` table is very small (only a few thousand records) so even without an index, the query only takes **55 ms** on my test computer.
 
-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.
+Now add the spatial index back in and run the query again. 
 
 .. code-block:: sql
@@ -46,87 +46,87 @@
   CREATE INDEX nyc_census_blocks_the_geom_gist ON nyc_census_blocks USING GIST (the_geom);
 
-.. 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``.
+.. note:: The ``USING GIST`` clause tells PostgreSQL to use the generic index structure (GIST) when building the index.  If you receive an error that looks like ``ERROR: index row requires 11340 bytes, maximum size is 8191`` when creating your index, you have likely neglected to add the ``USING GIST`` clause.
 
-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.
+On my test computer the time drops to **9 ms**. The larger your table, the larger the relative speed improvement of an indexed query will be.
 
-Comment les index spatiaux fonctionnent
----------------------------------------
+How Spatial Indexes Work
+------------------------
 
-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.
+Standard database indexes create a hierarchical tree based on the values of the column being indexed. Spatial indexes are a little different -- they are unable to index the geometric features themselves  and instead index the bounding boxes of the features.
 
 .. image:: ./indexing/bbox.png
 
-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.
+In the figure above, the number of lines that intersect the yellow star is **one**, the red line. But the bounding boxes of features that intersect the yellow box is **two**, the red and blue ones. 
 
-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**.
+The way the database efficiently answers the question "what lines intersect the yellow star" is to first answer the question "what boxes intersect the yellow box" using the index (which is very fast) and then do an exact calculation of "what lines intersect the yellow star" **only for those features returned by the first 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'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.
+For a large table, this "two pass" system of evaluating the approximate index first, then carrying out an exact test can radically reduce the amount of calculations necessary to answer a query.
 
-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.
+Both PostGIS and Oracle Spatial share the same "R-Tree" [#RTree]_ spatial index structure. R-Trees break up data into rectangles, and sub-rectangles, and sub-sub rectangles, etc.  It is a self-tuning index structure that automatically handles variable data density and object size.
 
 .. image:: ./indexing/index-01.png
 
-RequÃªte avec seulement des index
---------------------------------
+Index-Only Queries
+------------------
 
-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.
+Most of the commonly used functions in PostGIS (:command:`ST_Contains`, :command:`ST_Intersects`, :command:`ST_DWithin`, etc) include an index filter automatically. But some functions (e.g., :command:`ST_Relate`) do not include and index filter.
 
-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.
+To do a bounding-box search using the index (and no filtering), make use of the :command:`&&` operator. For geometries, the :command:`&&` operator means "bounding boxes overlap or touch" in the same way that for number the :command:`=` operator means "values are the same".
 
-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 :
+Let's compare an index-only query for the population of the 'West Village' to a more exact query. Using :command:`&&` our index-only query looks like the following:
 
 .. 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`.
+  
+Now let's do the same query using the more exact :command:`ST_Intersects` function.
 
 .. 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 renvoie tous les blocs qui intersectent l'Ã©tendue du quartier, la seconde nous renvoie seulement les blocs qui intersectent le quartier lui-mÃªme.
+A much lower answer! The first query summed up every block that intersected the neighborhood's bounding box; the second query only summed up those blocks that intersected the neighborhood itself.
 
-Analyse
+Analyzing
 ---------
 
-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.
+The PostgreSQL query planner intelligently chooses when to use or not to use indexes to evaluate a query. Counter-intuitively, it is not always faster to do an index search: if the search is going to return every record in the table, traversing the index tree to get each record will actually be slower than just linearly reading the whole table from the start.
 
-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.
+In order to figure out what situation it is dealing with (reading a small part of the table versus reading a large portion of the table), PostgreSQL keeps statistics about the distribution of data in each indexed table column.  By default, PostgreSQL gathers statistics on a regular basis. However, if you dramatically change the make-up of your table within a short period of time, the statistics will not be up-to-date.
 
-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.
+To ensure your statistics match your table contents, it is wise the to run the ``ANALYZE`` command after bulk data loads and deletes in your tables. This force the statistics system to gather data for all your indexed columns.
 
-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).
+The ``ANALYZE`` command asks PostgreSQL to traverse the table and update its internal statistics used for query plan estimation (query plan analysis will be discussed later). 
 
 .. code-block:: sql
 
    ANALYZE nyc_census_blocks;
-
-NÃ©ttoyage
+   
+Vacuuming
 ---------
 
-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.
+It's worth stressing that just creating an index is not enough to allow PostgreSQL to use it effectively.  VACUUMing must be performed whenever a new index is created or after a large number of UPDATEs, INSERTs or DELETEs are issued against a table.  The ``VACUUM`` command asks PostgreSQL to reclaim any unused space in the table pages left by updates or deletes to records. 
 
-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".
+Vacuuming is so critical for the efficient running of the database that PostgreSQL provides an "autovacuum" option.
 
-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.
+Enabled by default, autovacuum both vacuums (recovers space) and analyzes (updates statistics) on your tables at sensible intervals determined by the level of activity.  While this is essential for highly transactional databases, it is not advisable to wait for an autovacuum run after adding indices or bulk-loading data.  If a large batch update is performed, you should manually run ``VACUUM``.
 
-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.
+Vacuuming and analyzing the database can be performed separately as needed.  Issuing ``VACUUM`` command will not update the database statistics; likewise issuing an ``ANALYZE`` command will not recover unused table rows.  Both commands can be run against the entire database, a single table, or a single column.
 
 .. code-block:: sql
@@ -134,14 +134,14 @@
    VACUUM ANALYZE nyc_census_blocks;
 
-Liste des fonctions
--------------------
+Function List
+-------------
 
-`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_Overlap.html>`_: Returns TRUE if A's bounding box overlaps B's.
 
-`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.
+`geometry_a = geometry_b <http://postgis.org/docs/ST_Geometry_EQ.html>`_: Returns TRUE if A's bounding box is the same as B's.
 
-`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).
+`ST_Intersects(geometry_a, geometry_b) <http://postgis.org/docs/ST_Intersects.html>`_: Returns TRUE if the Geometries/Geography "spatially intersect" - (share any portion of space) and FALSE if they don't (they are Disjoint). 
 
-.. rubric:: Notes de bas de page
+.. rubric:: Footnotes
 
 .. [#RTree] http://postgis.org/support/rtree.pdf
Index: trunk/workshop-foss4g/conf.py
===================================================================
--- trunk/workshop-foss4g/conf.py	(revision 81)
+++ trunk/workshop-foss4g/conf.py	(revision 1)
@@ -33,5 +33,5 @@
 
 # General substitutions.
-project = u'Introduction Ã  PostGIS'
+project = u'Introduction to PostGIS'
 copyright = u'2010, Paul Ramsey, OpenGeo | Mark Leslie, LISAsoft'
 
Index: trunk/workshop-foss4g/loading_data.rst
===================================================================
--- trunk/workshop-foss4g/loading_data.rst	(revision 81)
+++ trunk/workshop-foss4g/loading_data.rst	(revision 1)
@@ -1,16 +1,16 @@
 .. _loading_data:
 
-Partie 4 : Charger des donnÃ©es spatiales
-=========================================
+Section 4: Loading spatial data
+===============================
 
-SupportÃ© par une grande variÃ©tÃ© de librairies et d'applications, PostGIS fournit de nombreux outils pour charger des donnÃ©es. Cette partie traitera uniquement du chargement basique de donnÃ©es, c'est Ã  dire le chargement de fichiers Shapefile (.shp) en utilisant l'outil dÃ©diÃ© de PostGIS.
+Supported by a wide variety of libraries and applications, PostGIS provides many options for loading data.  This section will focus on the basics -- loading shapefiles using the PostGIS shapefile loading tool.  
 
-#. PremiÃšrement, retournez sur le Dashboard et cliquez sur le lien **Import shapefiles** de la section PostGIS. L'interface d'import de donnÃ©es Shapefile pgShapeLoader se lance.
+#. First, return to the Dashboard, and click on the **Import shapefiles** link in the PostGIS section. The GUI shapefile importer pgShapeLoader will launch.
 
    .. image:: ./screenshots/pgshapeloader_01.png
 
-#. Ensuite, ouvrez le navigateur de fichier *Shape File* puis dans le rÃ©pertoire file:`\\postgisintro\\data` sÃ©lectionnez le fichier :file:`nyc_census_blocks.shp`.
+#. Next, open the *Shape File* browser and navigate to the data directory, file:`\\postgisintro\\data`. Select the :file:`nyc_census_blocks.shp` file. 
 
-#. Saisissez les dÃ©tails de la section *connexion PostGIS* et cliquez sur le bouton **Test Connection...**.
+#. Fill in the details for the *PostGIS Connection* section and click on the **Test Connection...** button.
 
    .. list-table::
@@ -25,9 +25,9 @@
         - ``nyc``
 
-  .. note::
+  .. note:: 
+  
+     Setting the port number to **54321** is very important! The OpenGeo PostGIS runs on port 54321, not the default PostgreSQL port of 5432.
 
-     Affecter le numÃ©ro de port **54321** est trÃšs important ! Le serveur PostGIS d'OpenGeo utilise ce port et non le port par dÃ©faut (5432).
-
-#. Saisissez les dÃ©tails de la section *Configuration*.
+#. Fill in the details for the *Configuration* section.
 
    .. list-table::
@@ -42,60 +42,61 @@
         - ``the_geom``
 
-#. Cliquez sur le bouton **Options** et sÃ©lectionnez "Load data using COPY rather than INSERT." Ce qui implique que le chargement des donnÃ©es sera plus rapide.
+#. Click the **Options** button and select "Load data using COPY rather than INSERT." This will make the data load process a little faster.
 
    .. image:: ./screenshots/pgshapeloader_02.png
 
-#. Pour finir, cliquez sur le bouton **Import** et regardez l'importation s'exÃ©cuter. Cela peut prendre plusieurs minutes pour charger, mais ce fichier est le plus gros que nous aurons Ã  charger.
+#. Finally, click the **Import** button and watch the import process. It may take a few minutes to load, but this is the largest file in our test set.
 
-#. RepÃ©tez la mÃ©thode afin d'importer les autres donnÃ©es prÃ©sentes dans le rÃ©pertoire data. Hormis le nom du fichier et le nom de la table de sortie, les autres paramÃštres de pgShapeLoader devrait rester les mÃªmes :
+#. Repeat the import process for the remaining shapefiles in the data directory. Except for the input file and output table name, all the other fields in pgShapeLoader should remain the same:
 
    * ``nyc_streets.shp``
    * ``nyc_neighborhoods.shp``
    * ``nyc_subway_stations.shp``
-
-#. Lorsque tous les fichiers sont chargÃ©s, cliquez sur le bouton "Refresh" de pgAdmin pour mettre Ã  jour l'arbre affichÃ©. Vous devriez voir vos quatre nouvellles tables affichÃ©es dans la section **Tables** de l'arbre.
+ 
+#. When all the files are loaded, click the "Refresh" button in pgAdmin to update the tree view. You should see your four tables show up in the **Tables** section of the tree.
 
    .. image:: ./screenshots/refresh.png
+ 
+ 
+Shapefiles? What's that?
+------------------------
+
+You may be asking yourself -- "What's this shapefile thing?"  A "shapefile" commonly refers to a collection of files with ``.shp``, ``.shx``, ``.dbf``, and other extensions on a common prefix name (e.g., nyc_census_blocks). The actual shapefile relates specifically to files with the ``.shp`` extension. However, the ``.shp`` file alone is incomplete for distribution without the required supporting files.
+
+Mandatory files:
+
+  * ``.shp`` â shape format; the feature geometry itself
+  * ``.shx`` â shape index format; a positional index of the feature geometry 
+  * ``.dbf`` â attribute format; columnar attributes for each shape, in dBase III
+    
+Optional files include:
+
+  * ``.prj`` â projection format; the coordinate system and projection information, a plain text file describing the projection using well-known text format
+
+In order to analyze a shapefile in PostGIS, you need to convert a shapefile into a series SQL commands.  By running pgShapeLoader, a shapefile converts into a table that PostgreSQL can understand. 
 
 
-Shapefile ? Qu'est-ce que c'est ?
----------------------------------
+SRID 26918? What's with that?
+-----------------------------
 
-Il est possible que vous vous demandiez "Qu'est-ce que c'est ce shapefile ?" On utilise communÃ©ment le terme "Shapefile" pour parler d'un ensemble de fichiers d'extension ``.shp``, ``.shx``, ``.dbf``, ou autre ayant un nom commun (ex: nyc_census_blocks). Le fichier Shapefile est en rÃ©alitÃ© le fichier d'extension ``.shp``, mais ce fichier seul n'est pas complet sans ses fichiers associÃ©s.
+Most of the import process is self-explanatory, but even experienced GIS professionals can trip over an **SRID**.
 
-Fichiers obligatoires :
+An "SRID" stands for "Spatial Reference IDentifier." It defines all the parameters of our data's geographic coordinate system and projection. An SRID is convenient because it packs all the information about a map projection (which can be quite complex) into a single number.
 
-  * ``.shp`` â les formes; les entitÃ©s gÃ©ographiques elle-mÃªmes
-  * ``.shx`` â l'index de formes; un index basÃ© sur les positions des entitÃ©s gÃ©ographiques
-  * ``.dbf`` â les attributs; les donnÃ©es attributaires associÃ©es Ã  chaque forme, au format dBase III
-
-Les fichiers optionnels possibles:
-
-  * ``.prj`` â la projection; le systÃšme de coordonnÃ©es et l'information de projection, un fichier texte dÃ©crivant la projection utilisant le format texte bien connu (WKT)
-
-Afin d'utiliser un fichier Shapefile dans PostGIS, vous devez le convertir en une sÃ©rie de requÃªtes SQL. En utilisant pgShapeLoader, un Shapefile est converti en une table que PostgreSQL peut comprendre.
-
-
-SRID 26918 ? Qu'est que c'est ?
--------------------------------
-
-La plupart des paramÃštres de l'importation de donnÃ©es sont explicites mais mÃªme les professionnels du SIG peuvent rencontrer des difficultÃ© Ã  propos du  **SRID**.
-
-"SRID" signifie "IDentifiant de RÃ©fÃ©rence Spatiale". Il dÃ©finit tous les paramÃštres de nos donnÃ©es, telles les coordonnÃ©es gÃ©ographiques et la projection. Un SRID est pratique car il encapsule sous la forme d'un nombre toutes les informations Ã  propos de la projection de la carte (ce qui peut Ãªtre trÃšs compliquÃ©).
-
-Vou pouvez consulter la dÃ©finition de la projection de la carte en consultant la base de donnÃ©es en ligne suivante :
+You can see the definition of our workshop map projection by looking it up either in an online database,
 
   http://spatialreference.org/ref/epsg/26918/
 
-ou directement depuis PostGIS en interrogeant la table ``spatial_ref_sys``.
+or directly inside PostGIS with a query to the ``spatial_ref_sys`` table.
 
 .. code-block:: sql
 
   SELECT srtext FROM spatial_ref_sys WHERE srid = 26918;
+  
+.. note::
 
-.. note::
-   La table ``spatial_ref_sys`` de PostGIS est une table standard OGC qui dÃ©finit tous les systÃšmes de rÃ©fÃ©rence spatiale connus par la base de donnÃ©es. Les donnÃ©es livrÃ©es avec PostGIS, contiennent 3000 systÃšmes de rÃ©fÃ©rence spatiale et prÃ©cisent les informations nÃ©cessaires Ã  la transformation ou la reprojection.
-
-Dans les deux cas, vous obtiendrez une reprÃ©sentation du systÃšme de rÃ©fÃ©rence spatiale **26918** (affichÃ©e sur plusieurs lignes ici pour plus de clartÃ©).
+   The PostGIS ``spatial_ref_sys`` table is an OGC-standard table that defines all the spatial reference systems known to the database. The data shipped with PostGIS, lists over 3000 known spatial reference systems and details needed to transform/re-project between them.  
+   
+In both cases, you see a textual representation of the **26918** spatial reference system (pretty-printed here for clarity):
 
 ::
@@ -120,35 +121,35 @@
     AXIS["Northing",NORTH]]
 
-Si vous ouvrez le fichier ``nyc_neighborhoods.prj`` du rÃ©pertoire data, vous verrez la mÃªme dÃ©finition.
+If you open up the ``nyc_neighborhoods.prj`` file from the data directory, you'll see the same projection definition. 
 
-Un problÃšme auquel se confronte la plupart des dÃ©butants en PostGIS est de savoir quel SRID il doit utiliser pour ses donnÃ©es. Tout ce qu'ils ont c'est un fichier ``.prj``. Mais comment un humain peut-il reconnaitre le numÃ©ro de SRID correct en lisant le contenu du fichier ``.prj`` ?
+A common problem for people getting started with PostGIS is figuring out what SRID number to use for their data. All they have is a ``.prj`` file. But how do humans translate a ``.prj`` file into the correct SRID number?
 
-La rÃ©ponse simple est d'utiliser un ordinateur. Copiez le contenu du fichier ``.prj`` dans le formulaire du site http://prj2epsg.org. Cela vous donnera le nombre (ou la liste de nombres) qui correspond le plus Ã  votre dÃ©finition de projection. Il n'y a pas de nombre pour *toutes* les projections de cartes existantes dans le monde, mais les plus courants sont disponibles dans la base de donnÃ©es de prj2epsg.
+The easy answer is to use a computer.  Plug the contents of the ``.prj`` file into http://prj2epsg.org. This will give you the number (or a list of numbers) that most closely match your projection definition. There aren't numbers for *every* map projection in the world, but most common ones are contained within the prj2epsg database of standard numbers.
 
 .. image:: ./screenshots/prj2epsg_01.png
 
-Les donnÃ©es que vous recevez des agences locales de l'Etat - comme la ville de New York - utilisent la plupart du temps des projections locales notÃ©es "state plane" ou "UTM". Dans notre cas, la projection est "Universal Transverse Mercator (UTM) Zone 18 North" soit EPSG:26918.
+Data you receive from local agencies -- such as New York City -- will usually be in a local projection noted by "state plane" or "UTM".  Our projection is "Universal Transverse Mercator (UTM) Zone 18 North" or EPSG:26918.  
 
 
-Les choses Ã  essayer : rendre spatiale une base de donnÃ©es existante
---------------------------------------------------------------------
+Things to Try: Spatially Enable an Existing Database
+----------------------------------------------------
 
-Vous avez dÃ©jÃ  vu comment crÃ©er une base de donnÃ©es en utilisant le modÃšle ``postgis_template`` depuis pgAdmin. NÃ©anmoins, lorsque vous installÃ© depuis les sources ou que vous ajoutez le module PostGIS Ã  une base existante, il n'est pas toujours appropriÃ© de crÃ©er une nouvelle base de donnÃ©es en utilisant le modÃšle PostGIS.
+You have already seen how to create a database using the ``postgis_template`` in pgAdmin. However when installing from source or adding PostGIS functionality to an existing database, it is not always appropriate to create a fresh database from the PostGIS template.
 
-Votre tÃ¢che consiste dans cette section Ã  crÃ©er une base de donnÃ©es et Ã  ajouter les types et les fonctions PostGIS ensuite. Les script SQL nÃ©cessaires - :file:`postgis.sql` et :file:`spatial_ref_sys.sql` - se trouvent dans le rÃ©pertoire :file:`contrib` de votre installation de PostgreSQL. Pour vous guider, vous pouvez consulter la documentation PostGIS expliquant comment installer PostGIS [#PostGIS_Install]_.
+Your task in this section is to create a database and add PostGIS types and functions after the fact.  The SQL scripts needed -- :file:`postgis.sql` and :file:`spatial_ref_sys.sql` -- can be found in the :file:`contrib` directory of your PostgreSQL install.  For guidance, refer to the PostGIS documentation on installing from source [#PostGIS_Install]_.
 
 .. note::
 
-   N'oubliez pas saisir le nom de l'utilisateur et le numÃ©ro de port lorsque vous crÃ©ez une base de donnÃ©es en ligne de commande.
+   Remember to include your username and port number when creating a database from the command line.
+    
+Things to Try: View data using uDig
+-----------------------------------
 
-Les choses Ã  essayer : visualiser des donnÃ©es avec uDig
--------------------------------------------------------
+`uDig <http://udig.refractions.org>`_, (User-friendly Desktop Internet GIS), is a desktop GIS viewer/editor for quickly looking at data. You can view a number of data formats including flat shapefiles and a PostGIS database. Its graphical interface allows for easy exploration of your data, as well as simple testing and fast styling. 
 
-`uDig <http://udig.refractions.org>`_, (User-friendly Desktop Internet GIS) est un outil bureautique de visualisation/Ã©dition SIG permettant de visualiser rapidement ses donnÃ©es. Vous pouvez visualiser un grand nombre de formats diffÃ©rents dont les Shapefiles et les bases de donnÃ©es PostGIS. Son interface graphique vous permet d'explorer vos donnÃ©es facilement mais aussi de les tester et les styler rapidement.
+Use this software to connect your PostGIS database.  The application is included in the ``software`` folder.
 
-Utilisez cette application pour vous connecter Ã  votre base de donnÃ©es PostGIS. L'application est contenue dans le rÃ©pertoire ``software``.
+.. rubric:: Footnotes
 
-.. rubric:: Notes de bas de page
+.. [#PostGIS_Install] "Chapter 2.5. Installation" PostGIS Documentation. May 2010 <http://postgis.org/documentation/manual-1.5/ch02.html#id2786223>
 
-.. [#PostGIS_Install] "Chapter 2.5. Installation" PostGIS Documentation. Mai 2010 <http://postgis.org/documentation/manual-1.5/ch02.html#id2786223>
-
Index: trunk/workshop-foss4g/Makefile
===================================================================
--- trunk/workshop-foss4g/Makefile	(revision 81)
+++ trunk/workshop-foss4g/Makefile	(revision 1)
@@ -3,6 +3,6 @@
 
 # You can set these variables from the command line.
-SPHINXOPTS    = -Dlanguage=fr
-SPHINXBUILD   = sphinx-build  
+SPHINXOPTS    =
+SPHINXBUILD   = sphinx-build
 PAPER         =
 
Index: trunk/workshop-foss4g/index.rst
===================================================================
--- trunk/workshop-foss4g/index.rst	(revision 81)
+++ trunk/workshop-foss4g/index.rst	(revision 1)
@@ -2,37 +2,39 @@
 
 Introduction Ã  PostGIS
-======================
+=======================
 
-Tenez vous prÃªt
+Tennez vous prÃªt
 ---------------
 
 * Ce document utilise une archive contenant des applications et des donnÃ©es : http://s3.opengeo.org/postgisintro-2010-2.zip
-* TÃ©lÃ©charger l'archive et dÃ©compressez-la dans le rÃ©pertoire de votre choix.
+* TÃ©lÃ©charger l'archive et dÃ©compressez-le dans le rÃ©petoire de votre choix.
 
 Contenu de l'archive
---------------------
+------------------
 
 Dans l'archive liÃ©e Ã  ce document, vous trouverez:
 
-**workshop/**
+**workshop/** 
   un rÃ©pertoire contenant ce document au format HTML
 
-**software/**
-  un rÃ©pertoire contenant tous les logiciels que nous installerons
+**software/** 
+  un rÃ©pertoire contenant tout les logiciels que nous installerons
 
-**data/**
+**data/** 
   un rÃ©pertoire contenant les fichier au format Shapefiles que nous utiliserons
 
-L'ensemble des donnÃ©es prÃ©sentes dans cette archive sont du domaine public et librement redistribuables. Toute les applications de l'archive sont des logiciels libres, et librement redistribuables. Le document est publiÃ© sous licence Creative Commons
-"`share alike with attribution <http://creativecommons.org/licenses/by-sa/3.0/us/>`_",
-et est librement redistribuable en respectant les termes de cette license.
+L'ensemble des donnÃ©es prÃ©sentes dans cette archive sont du domaine publique et 
+librement redistribuables. Toute les applications de l'archive sont des logiciels libres, et 
+librement redistribuables. The document est publiÃ© sous licence Creative Commons 
+"`share alike with attribution <http://creativecommons.org/licenses/by-sa/3.0/us/>`_", 
+et est librement redisctribuable en respectant les termes de cette license.
 
 Table des matiÃšres
-------------------
+----------------
 
 .. toctree::
    :maxdepth: 1
 
-   welcome
+   welcome 
    introduction
    installation
@@ -50,5 +52,5 @@
    indexing
    projection
-   projection_exercises
+   projection_exercises   
    geography
    geometry_returning
@@ -62,15 +64,15 @@
 
 
-Les liens Ã  garder sous la main
--------------------------------
+Links to have on hand
+---------------------
 
-* PostGIS - http://postgis.org/
+* PostGIS - http://postgis.org/ 
 
-  - Documentation - http://postgis.org/docs/
+  - Docs - http://postgis.org/docs/
 
-* PostgreSQL - http://www.postgresl.org/
+* PostgreSQL - http://www.postgresl.org/ 
 
-  - TÃ©lÃ©chargement - http://www.postgresql.org/download/
-  - Documentation - http://www.postgresql.org/docs/
+  - Downloads - http://www.postgresql.org/download/
+  - Docs - http://www.postgresql.org/docs/
   - JDBC Driver - http://jdbc.postgresql.org/
   - .Net Driver - http://npgsql.projects.postgresql.org/
@@ -78,7 +80,7 @@
   - C/C++ Driver - http://www.postgresql.org/docs/8.4/static/libpq.html
 
-* PgAdmin III - http://www.pgadmin.org/
+* PgAdmin III - http://www.pgadmin.org/ 
 
-* Clients bureautiques Open Source
+* Open Source Desktop Clients
 
   - uDig - http://udig.refractions.net/
Index: trunk/workshop-foss4g/joins_advanced.rst
===================================================================
--- trunk/workshop-foss4g/joins_advanced.rst	(revision 81)
+++ trunk/workshop-foss4g/joins_advanced.rst	(revision 1)
@@ -1,41 +1,41 @@
 .. _joins_advanced:
 
-Partie 19 : Plus de jointures spatiales
-=======================================
-
-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.
+Section 19: More Spatial Joins
+==============================
+
+In the last section we saw the :command:`ST_Centroid(geometry)` and :command:`ST_Union([geometry])` functions, and some simple examples. In this section we will do some more elaborate things with them.
 
 .. _creatingtractstable:
 
-CrÃ©ation de la table de traÃ§age des recensements
-------------------------------------------------
-
-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
-
- * Charger la table ``nyc_census_sociodata.sql``
- * CrÃ©er une table spatiale pour les traces de recensement
- * Joindre les donnÃ©es attributaires Ã  nos donnÃ©es spatiales
- * 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
- #. 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 tables devrait contenir votre nouvelle table ``nyc_census_sociodata``
-
-CrÃ©ation de la table traces de recensement
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-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``.
-
+Creating a Census Tracts Table
+------------------------------
+
+In the workshop ``\data\`` directory, is a file that includes attribute data, but no geometry, ``nyc_census_sociodata.sql``. The table includes interesting socioeconomic data about New York: commute times, incomes, and education attainment. There is just one problem. The data are summarized by "census tract" and we have no census tract spatial data! 
+
+In this section we will
+
+ * Load the ``nyc_census_sociodata.sql`` table
+ * Create a spatial table for census tracts 
+ * Join the attribute data to the spatial data
+ * Carry out some analysis using our new data
+ 
+Loading nyc_census_sociodata.sql
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ #. Open the SQL query window in PgAdmin
+ #. Select **File->Open** from the menu and browse to the ``nyc_census_sociodata.sql`` file
+ #. Press the "Run Query" button
+ #. If you press the "Refresh" button in PgAdmin, the list of tables should now include at ``nyc_census_sociodata`` table
+ 
+Creating a Census Tracts Table
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ 
+As we saw in the previous section, we can build up higher level geometries from the census block by summarizing on substrings of the ``blkid`` key. In order to get census tracts, we need to summarize grouping on the first 11 characters of the ``blkid``.
+ 
   ::
 
     360610001009000 = 36 061 00100 9000
 
-    36     = State of New York
+    36     = State of New York 
     061    = New York County (Manhattan)
     000100 = Census Tract
@@ -43,32 +43,32 @@
     000    = Census Block
 
-CrÃ©ation de la nouvelle table en utilisant la fonction d'agrÃ©gation :command:`ST_Union` :
-
-.. code-block:: sql
-
-   -- CrÃ©ation de la table
+Create the new table using the :command:`ST_Union` aggregate:
+ 
+.. code-block:: sql
+   
+   -- Make the tracts 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
+     
+   -- Index the tractid
    CREATE INDEX nyc_census_tract_geoms_tractid_idx ON nyc_census_tract_geoms (tractid);
-
-   -- Mise Ã  jour de la table geometry_columns
+     
+   -- Update the geometry_columns table
    SELECT Populate_Geometry_Columns();
 
-Regrouper les donnÃ©es attributaires et spatiales
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-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
+Join the Attributes to the Spatial Data
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Join the table of tract geometries to the table of tract attributes with a standard attribute join
+  
+.. code-block:: sql
+  
+  -- Make the tracts table
   CREATE TABLE nyc_census_tracts AS
-  SELECT
+  SELECT 
     g.the_geom,
     a.*
@@ -76,26 +76,26 @@
   JOIN nyc_census_sociodata a
   ON g.tractid = a.tractid;
-
-  -- Indexation des gÃ©omÃ©tries
+    
+  -- Index the geometries
   CREATE INDEX nyc_census_tract_gidx ON nyc_census_tracts USING GIST (the_geom);
-
-  -- Mise Ã  jour de la table geometry_columns
+    
+  -- Update the geometry_columns table
   SELECT Populate_Geometry_Columns();
 
 .. _interestingquestion:
 
-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)
+Answer an Interesting Question
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+     
+Answer an interesting question! "List top 10 New York neighborhoods ordered by the proportion of people who have graduate degrees."
+  
+.. 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 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
+We sum up the statistics we are interested, then divide them together at the end. In order to avoid divide-by-zero errors, we don't bother bringing in tracts that have a population count of zero.
+
+::
+  
+   graduate_pct |       name        | boroname  
   --------------+-------------------+-----------
            40.4 | Carnegie Hill     | Manhattan
@@ -119,40 +119,40 @@
            29.8 | West Village      | Manhattan
            29.7 | Central Park      | Manhattan
-
-
+    
+  
 .. _polypolyjoins:
 
-Polygones/Jointures de polygones
---------------------------------
-
-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.
+Polygon/Polygon Joins
+---------------------
+
+In our interesting query (in :ref:`interestingquestion`) we used the :command:`ST_Intersects(geometry_a, geometry_b)` function to determine which census tract polygons to include in each neighborhood summary. Which leads to the question: what if a tract falls on the border between two neighborhoods? It will intersect both, and so will be included in the summary statistics for **both**.
 
 .. image:: ./screenshots/centroid_neighborhood.png
 
-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Ã©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))
+To avoid this kind of double counting there are two methods:
+
+ * The simple method is to ensure that each tract only falls in **one** summary area (using :command:`ST_Centroid(geometry)`)
+ * The complex method is to divide crossing tracts at the borders (using :command:`ST_Intersection(geometry,geometry)`)
+ 
+Here is an example of using the simple method to avoid double counting in our graduate education query:
+
+.. 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)) 
   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
+  
+Note that the query takes longer to run now, because the :command:`ST_Centroid` function  has to be run on every census tract.
+
+::
+
+   graduate_pct |       name        | boroname  
   --------------+-------------------+-----------
            49.2 | Carnegie Hill     | Manhattan
@@ -166,16 +166,16 @@
            30.1 | Downtown          | Brooklyn
            28.4 | Cobble Hill       | Brooklyn
-
-Ãviter le double comptage change le rÃ©sultat !
+  
+Avoiding double counting changes the results! 
 
 
 .. _largeradiusjoins:
 
-Jointures utilisant un large rayon de distance
-----------------------------------------------
-
-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 :
+Large Radius Distance Joins
+---------------------------
+
+A query that is fun to ask is "How do the commute times of people near (within 500 meters) subway stations differ from those of people far away from subway stations?"
+
+However, the question runs into some problems of double counting: many people will be within 500 meters of multiple subway stations. Compare the population of 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 mÃštres d'une station de mÃ©tro :
+  
+With the population of the people in New York within 500 meters of a subway station:
 
 .. 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 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.
+There's more people close to the subway than there are people! Clearly, our simple SQL is making a big double-counting error. You can see the problem looking at the picture of the buffered subways.
 
 .. image:: ./screenshots/subways_buffered.png
 
-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 :
+The solution is to ensure that we have only distinct census blocks before passing them into the summarization portion of the query. We can do that by breaking our query up into a subquery that finds the distinct blocks, wrapped in a summarization query that returns our answer:
 
 .. code-block:: sql
@@ -216,9 +216,11 @@
     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Ã© (500m, environ 5 Ã  7 minutes de marche) du mÃ©tro.
-
+That's better! So a bit over half the population of New York is within 500m (about a 5-7 minute walk) of the subway.
+
+
+
Index: trunk/workshop-foss4g/simple_sql.rst
===================================================================
--- trunk/workshop-foss4g/simple_sql.rst	(revision 81)
+++ trunk/workshop-foss4g/simple_sql.rst	(revision 1)
@@ -1,10 +1,8 @@
 .. _simple_sql:
 
-Partie 6 : RequÃªtes SQL simples
-===============================
+Section 6: Simple SQL
+=====================
 
-: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:
+:term:`SQL`, or "Structured Query Language", is a means of asking questions of, and updating data in, relational databases. You have already seen SQL when we created our first database.  Recall:
 
 .. code-block:: sql
@@ -12,107 +10,105 @@
    SELECT postgis_full_version();
 
-Maintenant que nous avons chargÃ© des donnÃ©es dans notre base, essayons d'utiliser SQL pour les interroger. Par exemple,
+But that was a question about the database.  Now that we've loaded data into our database, let's use SQL to ask questions of the data! For example,
 
-  "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
+  "What are the names of all the neighborhoods in New York City?"
+  
+Open up the SQL query window in pgAdmin by clicking the SQL button
 
 .. image:: ./screenshots/pgadmin_05.png
 
-Puis saisissez la requÃªte suivante dans la fenÃªtre
+then enter the following query in to the query window
 
 .. code-block:: sql
 
   SELECT name FROM nyc_neighborhoods;
+  
+and click the **Execute Query** button (the green triangle).
+  
+.. image:: ./screenshots/pgadmin_08.png  
 
-et cliquez sur le bouton **Execute Query** (le triangle vert).
+The query will run for a few (mili)seconds and return the 129 results.
 
-.. image:: ./screenshots/pgadmin_08.png
+.. image:: ./screenshots/pgadmin_09.png  
 
-La requÃªte s'exÃ©cutera pendant quelques (mili)secondes et retournera 129 rÃ©sultats.
+But what exactly happened here?  To understand, let's begin with the four "verbs" of SQL, 
 
-.. image:: ./screenshots/pgadmin_09.png
+ * ``SELECT``, returns rows in response to a query
+ * ``INSERT``, adds new rows to a table
+ * ``UPDATE``, alters existing rows in a table
+ * ``DELETE``, removes rows from a table
+ 
+We will be working almost exclusively with ``SELECT`` in order to ask questions of tables using spatial functions.
 
-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 queries
+--------------
 
- * ``SELECT``, retourne des lignes en rÃ©ponse Ã  une requÃªte
- * ``INSERT``, ajoute des lignes dans une table
- * ``UPDATE``, modifie des lignes existantes d'une table
- * ``DELETE``, supprime des lignes d'une table
+A select query is generally of the form:
 
-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
-----------------------
-
-Une requÃªte de type Select est gÃ©nÃ©ralement de la forme :
-
-  SELECT colonnes FROM donnÃ©es WHERE conditions;
-
+  SELECT some_columns FROM some_data_source WHERE some_condition;
+  
 .. note::
 
-    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>`_.
+    For a synopsis of all ``SELECT`` parameters, see the PostgresSQL `documentation  <http://www.postgresql.org/docs/8.1/interactive/sql-select.html>`_.
+    
+The ``some_columns`` are either column names or functions of column values. The ``some_data_source`` is either a single table, or a composite table created by joining two tables on a key or condition. The ``some_condition`` is a filter that restricts the number of rows to be returned.
 
+  "What are the names of all the neighborhoods in Brooklyn?"
 
-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 tous les quartiers de New York et nous voulons uniquement ceux de Brooklyn.
+We return to our ``nyc_neighborhoods`` table with a filter in hand.  The table contains all the neighborhoods in New York, but we only want the ones in Brooklyn.
 
 .. code-block:: sql
 
-  SELECT name
-    FROM nyc_neighborhoods
+  SELECT name 
+    FROM nyc_neighborhoods 
     WHERE boroname = 'Brooklyn';
 
-La requÃªte prendra Ã  nouveau quelque (milli)secondes et retournera les 23 Ã©lÃ©ments rÃ©sultants.
+The query will run for even fewer (mili)seconds and return the 23 results.
 
-Parfois, nous aurons besoin d'appliquer des fonctions sur le rÃ©sultat d'une de nos requÃªtes. Par exemple,
+Sometimes we will need to apply a function to the results of our query. For example,
 
-  "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)`.
+  "What is the number of letters in the names of all the neighborhoods in Brooklyn?"
+  
+Fortunately, PostgreSQL has a string length function, :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 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".
+Often, we are less interested in the individual rows than in a statistic that applies to all of them. So knowing the lengths of the neighborhood names might be less interesting than knowing the average length of the names. Functions that take in multiple rows and return a single result are called "aggregate" functions.  
 
-PostgreSQL fournit un ensemble de fonctions d'aggrÃ©gations, parmi lesquelles :command:`avg()` pour calculer la moyenne, and :command:`stddev()` pour l'Ã©cart type.
+PostgreSQL has a series of built-in aggregate functions, including the general purpose :command:`avg()` for average values and :command:`stddev()` for standard deviations.
 
-  "Quel est le nombre moyen et l'Ã©cart type du nombre de lettres dans le nom des quartier de Brooklyn ?"
+  "What is the average number of letters and standard deviation of number of letters in the names of all the neighborhoods in Brooklyn?"
+  
+.. code-block:: sql
+
+  SELECT avg(char_length(name)), stddev(char_length(name)) 
+    FROM nyc_neighborhoods 
+    WHERE boroname = 'Brooklyn';
+  
+::
+
+           avg         |       stddev       
+  ---------------------+--------------------
+   11.7391304347826087 | 3.9105613559407395
+
+The aggregate functions in our last example were applied to every row in the result set. What if we want the summaries to be carried out over smaller groups within the overall result set? For that we add a ``GROUP BY`` clause. Aggregate functions often need an added ``GROUP BY`` statement to group the result-set by one or more columns.  
+
+  "What is the average number of letters in the names of all the neighborhoods in New York City, reported by borough?"
 
 .. code-block:: sql
 
-  SELECT avg(char_length(name)), stddev(char_length(name))
-    FROM nyc_neighborhoods
-    WHERE boroname = 'Brooklyn';
-
+  SELECT boroname, avg(char_length(name)), stddev(char_length(name)) 
+    FROM nyc_neighborhoods 
+    GROUP BY boroname;
+ 
+We include the ``boroname`` column in the output result so we can determine which statistic applies to which borough. In an aggregate query, you can only output columns that are either (a) members of the grouping clause or (b) aggregate functions.
+  
 ::
 
-           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 plusieurs colonnes.
-
-  "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
-    GROUP BY boroname;
-
-
-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
@@ -121,12 +117,13 @@
    Queens        | 11.6666666666666667 | 5.0057438272815975
    Staten Island | 12.2916666666666667 | 5.2043390480959474
+  
+Function List
+-------------
 
-Liste de fonctions
-------------------
+`avg(expression) <http://www.postgresql.org/docs/current/static/functions-aggregate.html#FUNCTIONS-AGGREGATE-TABLE>`_: PostgreSQL aggregate function that returns the average value of a numeric column.
 
-`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>`_: PostgreSQL string function that returns the number of character in a string.
 
-`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.
-
+`stddev(expression) <http://www.postgresql.org/docs/current/static/functions-aggregate.html#FUNCTIONS-AGGREGATE-STATISTICS-TABLE>`_: PostgreSQL aggregate function that returns the standard deviation of input values.
+  
+  
Index: trunk/workshop-foss4g/spatial_relationships_exercises.rst
===================================================================
--- trunk/workshop-foss4g/spatial_relationships_exercises.rst	(revision 81)
+++ trunk/workshop-foss4g/spatial_relationships_exercises.rst	(revision 1)
@@ -1,45 +1,45 @@
 .. _spatial_relationships_exercises:
 
-Partie 11 : Exercices sur les relations spatiales
-=================================================
+Section 11: Spatial Relationships Exercises
+===========================================
 
-Voici un rappel des fonctions que nous avons vu dans les parties prÃ©cÃ©dentes. Elles seront utiles pour les exercices !
+Here's a reminder of the functions we saw in the last section. They should be useful for the exercises!
 
-* :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 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
+* :command:`sum(expression)` aggregate to return a sum for a set of records
+* :command:`count(expression)` aggregate to return the size of a set of records
+* :command:`ST_Contains(geometry A, geometry B)` returns true if geometry A contains geometry B 
+* :command:`ST_Crosses(geometry A, geometry B)` returns true if geometry A crosses geometry B
+* :command:`ST_Disjoint(geometry A , geometry B)` returns true if the geometries do not "spatially intersect" 
+* :command:`ST_Distance(geometry A, geometry B)` returns the minimum distance between geometry A and geometry B
+* :command:`ST_DWithin(geometry A, geometry B, radius)` returns true if geometry A is radius distance or less from geometry B
+* :command:`ST_Equals(geometry A, geometry B)` returns true if geometry A is the same as geometry B
+* :command:`ST_Intersects(geometry A, geometry B)` returns true if geometry A intersects geometry B
+* :command:`ST_Overlaps(geometry A, geometry B)` returns true if geometry A and geometry B share space, but are not completely contained by each other.
+* :command:`ST_Touches(geometry A, geometry B)` returns true if the boundary of geometry A touches geometry B
+* :command:`ST_Within(geometry A, geometry B)` returns true if geometry A is within geometry B
 
-Souvenez-vous les tables Ã  votre disposition :
+Also remember the tables we have available:
 
- * ``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
 
-Exercices
+Exercises
 ---------
 
- * **"Quelle est la valeur gÃ©omÃ©trique de la rue nommÃ©e  'Atlantic Commons' ?"**
-
+ * **"What is the geometry value for the street named 'Atlantic Commons'?"**
+ 
    .. code-block:: sql
 
@@ -49,13 +49,13 @@
 
    ::
-
+   
      01050000202669000001000000010200000002000000093235673BE82141F319CD89A22E514170E30E0ADFE82141CB2D3EFFA52E5141
-
- * **"Quels sont les quartiers et villes qui sont dans Atlantic Commons ?"**
-
+     
+ * **"What neighborhood and borough is Atlantic Commons in?"**
+     
    .. 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 ?"**
-
+ * **"What streets does Atlantic Commons touch?"** 
+ 
    .. 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 mÃštres autour d') Atlantic Commons ?"**
-
+ * **"Approximately how many people live on (within 50 meters of) 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 81)
+++ trunk/workshop-foss4g/geometries_exercises.rst	(revision 1)
@@ -1,63 +1,63 @@
 .. _geometries_exercises:
 
-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 !
-
- * :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_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Ã©rence spatiale
- * :command:`ST_X(point)` retourne la coordonnÃ©e X
- * :command:`ST_Y(point)` retourne la coordonnÃ©e Y
- * :command:`ST_Length(linestring)` retourne la longueur d'une ligne
- * :command:`ST_StartPoint(geometry)` retourne le premier point d'une ligne
- * :command:`ST_EndPoint(geometry)` retourne le dernier point d'une ligne
- * :command:`ST_NPoints(geometry)` retourne le nombre de points d'une ligne
- * :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 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 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
- * :command:`ST_GeomFromText(text)` retourne ``geometry``
- * :command:`ST_AsText(geometry)` retourne WKT ``text``
- * :command:`ST_AsEWKT(geometry)` retourne EWKT ``text``
- * :command:`ST_GeomFromWKB(bytea)` retourne ``geometry``
- * :command:`ST_AsBinary(geometry)` retourne WKB ``bytea``
- * :command:`ST_AsEWKB(geometry)` retourne EWKB ``bytea``
- * :command:`ST_GeomFromGML(text)` retourne ``geometry``
- * :command:`ST_AsGML(geometry)` retourne GML ``text``
- * :command:`ST_GeomFromKML(text)` retourne ``geometry``
- * :command:`ST_AsKML(geometry)` retourne KML ``text``
- * :command:`ST_AsGeoJSON(geometry)` retourne JSON ``text``
- * :command:`ST_AsSVG(geometry)` retourne SVG ``text``
-
-Souvenez-vous aussi des tables disponibles:
-
- * ``nyc_census_blocks``
-
+Section 9: Geometry Exercises
+=============================
+
+Here's a reminder of all the functions we have seen so far. They should be useful for the exercises!
+
+ * :command:`sum(expression)` aggregate to return a sum for a set of records
+ * :command:`count(expression)` aggregate to return the size of a set of records
+ * :command:`ST_GeometryType(geometry)` returns the type of the geometry
+ * :command:`ST_NDims(geometry)` returns the number of dimensions of the geometry
+ * :command:`ST_SRID(geometry)` returns the spatial reference identifier number of the geometry
+ * :command:`ST_X(point)` returns the X ordinate
+ * :command:`ST_Y(point)` returns the Y ordinate
+ * :command:`ST_Length(linestring)` returns the length of the linestring
+ * :command:`ST_StartPoint(geometry)` returns the first coordinate as a point
+ * :command:`ST_EndPoint(geometry)` returns the last coordinate as a point
+ * :command:`ST_NPoints(geometry)` returns the number of coordinates in the linestring
+ * :command:`ST_Area(geometry)` returns the area of the polygons
+ * :command:`ST_NRings(geometry)` returns the number of rings (usually 1, more if there are holes)
+ * :command:`ST_ExteriorRing(polygon)` returns the outer ring as a linestring
+ * :command:`ST_InteriorRingN(polygon, integer)` returns a specified interior ring as a linestring
+ * :command:`ST_Perimeter(geometry)` returns the length of all the rings
+ * :command:`ST_NumGeometries(multi/geomcollection)` returns the number of parts in the collection
+ * :command:`ST_GeometryN(geometry, integer)` returns the specified part of the collection
+ * :command:`ST_GeomFromText(text)` returns ``geometry``
+ * :command:`ST_AsText(geometry)` returns WKT ``text``
+ * :command:`ST_AsEWKT(geometry)` returns EWKT ``text``
+ * :command:`ST_GeomFromWKB(bytea)` returns ``geometry``
+ * :command:`ST_AsBinary(geometry)` returns WKB ``bytea``
+ * :command:`ST_AsEWKB(geometry)` returns EWKB ``bytea``
+ * :command:`ST_GeomFromGML(text)` returns ``geometry``
+ * :command:`ST_AsGML(geometry)` returns GML ``text``
+ * :command:`ST_GeomFromKML(text)` returns ``geometry``
+ * :command:`ST_AsKML(geometry)` returns KML ``text``
+ * :command:`ST_AsGeoJSON(geometry)` returns JSON ``text``
+ * :command:`ST_AsSVG(geometry)` returns SVG ``text``
+
+Also remember the tables we have available:
+
+ * ``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
 
-Exercices
+Exercises
 ---------
 
- * **"Quelle est l'aire du quartier 'West Village'?"**
-
+ * **"What is the area of the 'West Village' neighborhood?"**
+ 
    .. 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 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``.)
-
+      The area is given in square meters. To get an area in hectares, divide by 10000. To get an area in acres, divide by 4047.
+
+ * **"What is the area of Manhattan in acres?"** (Hint: both ``nyc_census_blocks`` and ``nyc_neighborhoods`` have a ``boroname`` in them.)
+ 
    .. code-block:: sql
 
@@ -82,6 +82,6 @@
        WHERE boroname = 'Manhattan';
 
-   ::
-
+   :: 
+   
      13965.3201224118
 
@@ -94,54 +94,54 @@
        WHERE boroname = 'Manhattan';
 
-   ::
-
+   :: 
+   
      14572.1575543757
 
 
- * **"Combien de blocs de la ville de New York ont des trous ?"**
-
-   .. code-block:: sql
-
-     SELECT Count(*)
+ * **"How many census blocks in New York City have a hole in them?"**
+ 
+   .. code-block:: sql
+
+     SELECT Count(*) 
        FROM nyc_census_blocks
        WHERE ST_NRings(the_geom) > 1;
 
-   ::
-
-     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
+   :: 
+   
+     66 
+   
+ * **"What is the total length of streets (in kilometers) in New York City?"** (Hint: The units of measurement of the spatial data are meters, there are 1000 meters in a kilometer.)
+  
+    .. code-block:: sql
 
      SELECT Sum(ST_Length(the_geom)) / 1000
        FROM nyc_streets;
 
+   :: 
+   
+     10418.9047172
+
+ * **"How long is 'Columbus Cir' (Columbus Circle)?**
+ 
+     .. code-block:: sql
+ 
+      SELECT ST_Length(the_geom)
+        FROM nyc_streets
+        WHERE name = 'Columbus Cir';
+
+     :: 
+   
+       308.34199
+
+ * **"What is the JSON representation of the boundary of the 'West Village'?"**
+ 
+   .. code-block:: sql
+
+     SELECT ST_AsGeoJSON(the_geom)
+       FROM nyc_neighborhoods
+       WHERE name = 'West Village';
+
    ::
-
-     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
-
- * **"Quelle est le contour de 'West Village' au format JSON ?"**
-
-   .. code-block:: sql
-
-     SELECT ST_AsGeoJSON(the_geom)
-       FROM nyc_neighborhoods
-       WHERE name = 'West Village';
-
-   ::
-
+     
       {"type":"MultiPolygon","coordinates":
        [[[[583263.2776595836,4509242.6260239873],
@@ -149,9 +149,9 @@
           [583263.2776595836,4509242.6260239873]]]]}
 
-La gÃ©omÃ©trie de type "MultiPolygon", intÃ©ressant !
-
-
- * **"Combien de polygones sont dans le multi-polygone 'West Village' ?"**
-
+The geometry type is "MultiPolygon", interesting!
+   
+      
+ * **"How many polygons are in the 'West Village' multipolygon?"**
+ 
    .. 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 ?"**
-
+   
+      It is not uncommon to find single-element MultiPolygons in spatial tables. Using MultiPolygons allows a table with only one geometry type to store both single- and multi-geometries without using mixed types.
+       
+       
+ * **"What is the length of streets in New York City, summarized by type?"**
+ 
    .. code-block:: sql
 
@@ -179,6 +179,6 @@
 
    ::
-
-                            type                       |      length
+   
+                            type                       |      length      
      --------------------------------------------------+------------------
       residential                                      | 8629870.33786606
@@ -204,7 +204,11 @@
       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.
-
+      The ``ORDER BY length DESC`` clause sorts the result by length in descending order. The result is that most prevalent types are first in the list.
+
+ 
+ 
+ 
+        
Index: trunk/workshop-foss4g/joins.rst
===================================================================
--- trunk/workshop-foss4g/joins.rst	(revision 81)
+++ trunk/workshop-foss4g/joins.rst	(revision 1)
@@ -1,18 +1,18 @@
 .. _joins:
 
-Partie 12 : Les jointures 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,
+Section 12: Spatial Joins
+=========================
+
+Spatial joins are the bread-and-butter of spatial databases.  They allow you to combine information from different tables by using spatial relationships as the join key.  Much of what we think of as "standard GIS analysis" can be expressed as spatial joins.
+
+In the previous section, we explored spatial relationships using a two-step process: first we extracted a subway station point for 'Broad St'; then, we used that point to ask further questions such as "what neighborhood is the 'Broad St' station in?"
+
+Using a spatial join, we can answer the question in one step, retrieving information about the subway station and the neighborhood that contains it:
+
+.. code-block:: sql
+
+  SELECT 
+    subways.name AS subway_name, 
+    neighborhoods.name AS neighborhood_name, 
     neighborhoods.boroname AS borough
   FROM nyc_neighborhoods AS neighborhoods
@@ -21,23 +21,23 @@
   WHERE subways.name = 'Broad St';
 
-::
-
-   subway_name | neighborhood_name  |  borough
+:: 
+
+   subway_name | neighborhood_name  |  borough  
   -------------+--------------------+-----------
    Broad St    | Financial District | Manhattan
 
-Nous avons pu regrouper chaque station de mÃ©tro avec le quartier auquel elle appartient, mais dans ce cas nous n'en voulions qu'une. Chaque fonction qui envoit un rÃ©sultat du type vrai/faux peut Ãªtre utilisÃ©e pour joindre spatialement deux tables, mais la plupart du temps on utilise : :command:`ST_Intersects`, :command:`ST_Contains`, et :command:`ST_DWithin`.
-
-Jointure et regroupement
-------------------------
-
-La combinaison de ``JOIN`` avec ``GROUP BY`` fournit le type d'analyse qui est couramment utilisÃ© dans les systÃšmes SIG.
-
-Par exemple : **Quelle est la population et la rÃ©partition raciale du quartier de Manhattan ?** Ici nous avons une question qui combine les informations relatives Ã  la population recensÃ©e et les contours des quartiers, or nous ne voulons qu'un seul quartier, celui de Manhattan.
-
-.. code-block:: sql
-
-  SELECT
-    neighborhoods.name AS neighborhood_name,
+We could have joined every subway station to its containing neighborhood, but in this case we wanted information about just one.  Any function that provides a true/false relationship between two tables can be used to drive a spatial join, but the most commonly used ones are: :command:`ST_Intersects`, :command:`ST_Contains`, and :command:`ST_DWithin`.
+
+Join and Summarize
+------------------
+
+The combination of a ``JOIN`` with a ``GROUP BY`` provides the kind of analysis that is usually done in a GIS system.
+
+For example: **"What is the population and racial make-up of the neighborhoods of Manhattan?"** Here we have a question that combines information from about population from the census with the boundaries of neighborhoods, with a restriction to just one borough of Manhattan.
+
+.. code-block:: sql
+
+  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
@@ -84,45 +84,45 @@
 
 
-Que ce passe-t-il ici ?  Voici ce qui se passe (l'ordre d'Ã©valuation est optimisÃ© par la base de donnÃ©es) :
-
-#. 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 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 "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.
-
-.. 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,
+What's going on here? Notionally (the actual evaluation order is optimized under the covers by the database) this is what happens:
+
+#. The ``JOIN`` clause creates a virtual table that includes columns from both the neighborhoods and census tables. 
+#. The ``WHERE`` clause filters our virtual table to just rows in Manhattan. 
+#. The remaining rows are grouped by the neighborhood name and fed through the aggregation function to :command:`Sum()` the population values.
+#. After a little arithmetic and formatting (e.g., ``GROUP BY``, ``ORDER BY``) on the final numbers, our query spits out the percentages.
+
+.. note:: 
+
+   The ``JOIN`` clause combines two ``FROM`` items.  By default, we are using an ``INNER JOIN``, but there are four other types of joins. For further information see the `join_type <http://www.postgresql.org/docs/8.1/interactive/sql-select.html>`_ definition in the PostgreSQL documentation.
+
+We can also use distance tests as a join key, to create summarized "all items within a radius" queries. Let's explore the racial geography of New York using distance queries.
+
+First, let's get the baseline racial make-up of the city.
+
+.. 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, 
     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
 
 
-Donc, 8M de personnes dans New York, environ 44% sont "blancs" et 26% sont "noirs".
-
-Duke Ellington chantait que "You / must take the A-train / To / go to Sugar Hill way up in Harlem." Comme nous l'avons vu prÃ©cÃ©demment, Harlem est de trÃšs loin le quartier ou se trouve la plus grande concentration d'africains-amÃ©ricains de Manhattan (80.5%). Est-il toujours vrai qu'il faut prendre le train A dont Duke parlait dans sa chanson ?
-
-PremiÃšrement, le contenu du champ ``routes`` de la table ``nyc_subway_stations`` va nous servir Ã  rÃ©cupÃ©rer le train A. Les valeurs de ce champs sont un peu complexes.
+So, of the 8M people in New York, about 44% are "white" and 26% are "black". 
+
+Duke Ellington once sang that "You / must take the A-train / To / go to Sugar Hill way up in Harlem." As we saw earlier, Harlem has far and away the highest African-American population in Manhattan (80.5%). Is the same true of Duke's A-train?
+
+First, note that the contents of the ``nyc_subway_stations`` table ``routes`` field is what we are interested in to find the A-train. The values in there are a little complex.
 
 .. code-block:: sql
 
   SELECT DISTINCT routes FROM nyc_subway_stations;
-
-::
+  
+:: 
 
  A,C,G
@@ -136,14 +136,14 @@
 .. note::
 
-   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 champ route.
-
-.. code-block:: sql
-
-   SELECT DISTINCT routes
-   FROM nyc_subway_stations AS subways
+   The ``DISTINCT`` keyword eliminates duplicate rows from the result.  Without the ``DISTINCT`` keyword, the query above identifies 491 results instead of 73.
+   
+So to find the A-train, we will want any row in ``routes`` that has an 'A' in it. We can do this a number of ways, but today we will use the fact that :command:`strpos(routes,'A')` will return a non-zero number if 'A' is in the routes field.
+
+.. 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,
+  
+Let's summarize the racial make-up of within 200 meters of the A-train line.
+
+.. 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, 
     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 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 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.
+So the racial make-up along the A-train isn't radically different from the make-up of New York City as a whole. 
+
+Advanced Join
+-------------
+
+In the last section we saw that the A-train didn't serve a population that differed much from the racial make-up of the rest of the city. Are there any trains that have a non-average racial make-up?
+
+To answer that question, we'll add another join to our query, so that we can simultaneously calculate the make-up of many subway lines at once. To do that, we'll need to create a new table that enumerates all the lines we want to summarize.
 
 .. 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Ã©tro Ã  notre requÃªte prÃ©cÃ©dente.
-
-.. code-block:: sql
-
-    SELECT
+Now we can join the table of subway lines onto our original query.
+
+.. 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,22 +239,22 @@
 
 
-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
-------------------
-
-`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 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.
-
-`strpos(chaÃ®ne, sous-chaÃ®ne) <http://www.postgresql.org/docs/current/static/functions-string.html>`_: fonction de chaÃ®ne de caractÃšres de PostgreSQL qui retourne la position de la sous-chaine.
-
-`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:: Notes de bas de page
+As before, the joins create a virtual table of all the possible combinations available within the constraints of the ``JOIN ON`` restrictions, and those rows are then fed into a ``GROUP`` summary. The spatial magic is in the ``ST_DWithin`` function, that ensures only census blocks close to the appropriate subway stations are included in the calculation.
+
+Function List
+-------------
+
+`ST_Contains(geometry A, geometry B) <http://postgis.org/docs/ST_Contains.html>`_: Returns true if and only if no points of B lie in the exterior of A, and at least one point of the interior of B lies in the interior of A.
+
+`ST_DWithin(geometry A, geometry B, radius) <http://postgis.org/docs/ST_DWithin.html>`_: Returns true if the geometries are within the specified distance of one another. 
+
+`ST_Intersects(geometry A, geometry B) <http://postgis.org/docs/ST_Intersects.html>`_: Returns TRUE if the Geometries/Geography "spatially intersect" - (share any portion of space) and FALSE if they don't (they are Disjoint). 
+
+`round(v numeric, s integer) <http://www.postgresql.org/docs/7.4/interactive/functions-math.html>`_: PostgreSQL math function that rounds to s decimal places
+
+`strpos(string, substring) <http://www.postgresql.org/docs/current/static/functions-string.html>`_: PostgreSQL string function that returns an integer location of a specified substring.
+
+`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.
+
+.. rubric:: Footnotes
 
 .. [#PostGIS_Doco] http://postgis.org/documentation/manual-1.5/
Index: trunk/workshop-foss4g/license.rst
===================================================================
--- trunk/workshop-foss4g/license.rst	(revision 81)
+++ trunk/workshop-foss4g/license.rst	(revision 1)
@@ -1,10 +1,8 @@
 .. _license:
 
-Annexes C : License
+Appendix C: License
 ===================
 
-Ce contenu est publiÃ© sous licence Creative Commons 
-"`share alike with attribution <http://creativecommons.org/licenses/by-sa/3.0/us/>`_", 
-et est librement redistribuable en respectant les termes de cette license. 
+This work is licensed under the Creative Commons Attribution-Share Alike, United States License. To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/3.0/us/ or send a letter to Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA.
 
-Vous devez conserver l'ensemble des copyrights prÃ©sents dans ce document.
+Our attribution requirement is that you retain the visible copyright notices in all materials.
Index: trunk/workshop-foss4g/simple_sql_exercises.rst
===================================================================
--- trunk/workshop-foss4g/simple_sql_exercises.rst	(revision 81)
+++ trunk/workshop-foss4g/simple_sql_exercises.rst	(revision 1)
@@ -1,10 +1,10 @@
 .. _simple_sql_exercises:
 
-Partie 7 : Exercices simples de SQL
-===================================
+Section 7: Simple SQL Exercises
+===============================
 
-En utilisant la table ``nyc_census_blocks``, rÃ©pondez au questions suivantes (et n'allez pas directement aux rÃ©ponses ! ).
+Using the ``nyc_census_blocks`` table, answer the following questions (don't peak at the answers!). 
 
-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``.
+Here is some helpful information to get started.  Recall from the :ref:`About Our Data <about_data>` section our ``nyc_census_blocks`` table definition.
 
 .. list-table::
@@ -12,65 +12,65 @@
 
    * - **blkid**
-     - Un code Ã  15 chiffres qui dÃ©finit de maniÃšre unique chaque **bloc** ressencÃ© . Ex: 360050001009000
+     - A 15-digit code that uniquely identifies every census **block**. Eg: 360050001009000
    * - **popn_total**
-     - Nombre total de personnes dans un bloc ressensÃ©
+     - Total number of people in the census block
    * - **popn_white**
-     - Nombre de personnes se dÃ©clarant "blancs"
+     - Number of people self-identifying as "white" in the block
    * - **popn_black**
-     - Nombre de personnes se dÃ©clarant "noirs"
+     - Number of people self-identifying as "black" in the block
    * - **popn_nativ**
-     - Nombre de personnes se dÃ©clarant comme "nÃ©s aux Ã©tats-unis"
+     - Number of people self-identifying as "native american" in the block
    * - **popn_asian**
-     - Nombre de personne se dÃ©clarant comme "asiatiques"
+     - Number of people self-identifying as "asias" in the block
    * - **popn_other**
-     - Nombre de personne se dÃ©clarant d'une autre catÃ©gorie
+     - Number of people self-identifying with other categories in the block
    * - **hous_total**
-     - Nombre de piÃšces appartements
+     - Number of housing units in the block
    * - **hous_own**
-     - Nombre de propriÃ©taires occupant les appartements
+     - Number of owner-occupied housing units in the block
    * - **hous_rent**
-     - Nombre de locations disponibles
+     - Number of renter-occupied housing units in the block
    * - **boroname**
-     - Nom du quartier de New York. Manhattan, The Bronx, Brooklyn, Staten Island, Queens
+     - Name of the New York borough. Manhattan, The Bronx, Brooklyn, Staten Island, Queens
    * - **the_geom**
-     - Polygone dÃ©limitant le bloc
+     - Polygon boundary of the block
 
-Ici se trouvent certaines des fonctions d'aggrÃ©gation qui vous seront utiles pour rÃ©pondre aux questions :
+And, here are some common SQL aggregation functions you might find useful:
 
- * 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.
+ * avg() - the average (mean) of the values in a set of records
+ * sum() - the sum of the values in a set of records
+ * count() - the number of records in a set of records
 
-Maintenant les questions :
+Now the questions:
 
- * **"Quelle est la population de la ville de New York ?"**
+ * **"What is the population of the City of New York?"**
+ 
+   .. code-block:: sql
+   
+     SELECT Sum(popn_total) AS population
+       FROM nyc_census_blocks;
+     
+   :: 
+   
+     8008278 
+   
+   .. note:: 
+   
+       What is this ``AS``? You can give a table or a column another name by using an alias.  Aliases can make queries easier to both write and to read. So instead of our outputted column name as ``sum`` we write it **AS** the more readable ``population``. 
+       
+ * **"What is the population of the Bronx?"**
 
    .. 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 Ã  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 personnes vivant dans chaque appartement de la ville de New York ?"**
-
+     
+   :: 
+   
+     1332650 
+   
+ * **"What is the average number of people living in each housing unit in New York City?"**
+ 
    .. code-block:: sql
 
@@ -78,21 +78,21 @@
        FROM nyc_census_blocks;
 
-   ::
-
-     2.6503540522400804
-
- * **"Pour chaque quartier, quel est le pourcentage de population blanche ?"**
+   :: 
+   
+     2.6503540522400804 
+   
+ * **"For each borough, what percentage of the population is white?"**
 
    .. 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,12 +101,11 @@
       Queens        | 44.0806610271290794
       Staten Island | 77.5968611401579346
+ 
+Function List
+-------------
 
-Liste des fonctions
--------------------
+`avg(expression) <http://www.postgresql.org/docs/8.2/static/functions-aggregate.html#FUNCTIONS-AGGREGATE-TABLE>`_: PostgreSQL aggregate function that returns the average value of a numeric column.
 
-`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>`_: PostgreSQL aggregate function that returns the number of records in a set of records.
 
-`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.
-
+`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.
Index: trunk/workshop-foss4g/welcome.rst
===================================================================
--- trunk/workshop-foss4g/welcome.rst	(revision 81)
+++ trunk/workshop-foss4g/welcome.rst	(revision 1)
@@ -1,17 +1,30 @@
 .. _welcome:
 
-Bienvenue
-*********
+Bienvenu
+********
 
-Conventions d'Ã©criture
-======================
+About OpenGeo
+=============
 
-Cette section prÃ©sente les diffÃ©rentes conventions d'Ã©criture qui seront utilisÃ©es dans ce
-document afin d'en faciliter la lecture.
+`OpenGeo <http://opengeo.org/>`_ is bringing the best practices of open source software to governments and other organizations around the world.
+
+* We provide enterprises with supported, tested, and integrated open source solutions to help open government.
+* We support open source communities by employing key developers for PostGIS, GeoServer, GeoWebCache, GeoExt, and OpenLayers.
+* We have an eight year history of providing successful consulting services and products to clients like MassGIS, Tri-Met, Landgate, Google, The Work Bank, and the Open Geospatial Consortium.
+* We believe open and accessible information empowers people to effect real change. OpenGeo's goal is to make geospatial information more open: publicly available, accessible on compelling platforms that people want to use.
+* We strive to build software that meets and exceeds the desires of clients, because our market success proves the value of our work.
+
+OpenGeo is the geospatial division of `OpenPlans <http://openplans.org/>`_, a New York-based 501(c)(3) non-profit which informs and engages communities through journalism and open source software. 
+
+Conventions
+===========
+
+Cette section prÃ©sente les diffÃ©rentes conventions qui seront utilisÃ©es dans ce document
+afin d'en faciliter la lecture. 
 
 Indications
 -----------
 
-Les indications pour vous, lecteurs de ce document, seront notÃ©es en **gras**.
+Les indications pour vous, lecteurs de ce document, seront notÃ© en **gras**.
 
 Par exemple:
@@ -22,5 +35,5 @@
 ----
 
-Les exemples de requÃªtes SQL seront affichÃ©s de la maniÃšre suivante :
+Les exemples de requÃªtes SQL seront affichÃ©es de la maniÃšre suivante
 
 .. code-block:: sql
@@ -28,47 +41,44 @@
    SELECT postgis_full_version();
 
-Cet exemple peut Ãªtre saisi dans la fenÃªtre de requÃªtage ou depuis l'interface en ligne de commande.
+Cette exemple peut Ãªtre saisi dans la fenÃªtre de requÃªtage ou depuis l'interface en ligne de commande.
 
 Notes
 -----
 
-Les notes sont utilisÃ©es pour fournir une information utile mais non critique pour la
-comprÃ©hension globale du sujet traitÃ©.
+Les notes sont utilisÃ©es pour fournir une information utile mais non critique pour la comprÃ©hension globale du sujet traitÃ©.
 
-.. note:: Si vous n'avez pas mangÃ© une pomme aujourd'hui, le docteur devrait se
-    mettre en route.
+.. note:: Si vous n'avez pas manger une pomme aujourd'hui, le docteur devrait se mettre en route.
 
 Fonctions
 ---------
 
-Lorsque les noms de fonctions sont contenus dans une phrase, ils sont affichÃ©s en  :command:`gras`.
+Lorsque les noms de fonctions seront contenu dans une phrase, ils seront affichÃ© en  :command:`gras`.
 
 Par exemple:
 
-   :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
+   :command:`ST_Touches(geometry A, geometry B)` retourne vrai si un des contours des gÃ©omÃ©tries s'interectent
 
 Fichiers, Tables et nom de colonne
 ----------------------------------
 
-Les noms de fichiers, les chemins, le noms de tables et les noms de colonnes seront affichÃ©s comme suit
+Les nom de fichier, les chemin, le noms de tables et les noms de colones seront affichÃ© comme suit
 
    Select the ``name`` column in the ``nyc_streets`` table.
 
-Menus et formulaires
+Menus and Form elements
 -----------------------
 
-Les menus et les Ã©lÃ©ments de formulaire comme les champs ou les boÃ®tes Ã  cocher ainsi
-que les autre objets sont affichÃ©s en *italique*.
+Les menus et les Ã©lÃ©ments de formulaire comme les champs ou les boÃ®te Ã  cocher ainsi 
+que les autre objets affichÃ©s en *italique*.
 
-Par exemple:
+For example:
 
   Cliquez sur *Fichier > Nouveau*.  Cochez la case qui contient *Confirmer*.
 
-Organisation
-------------
+Workflow
+--------
 
-Les diffÃ©rentes sections de ce document permettent d'Ã©voluer progressivement. Chaque
-section suppose que vous ayez terminÃ© et compris les sections prÃ©cÃ©dentes.
+Les diffÃ©rentes sections de ce document permette d'Ã©voluer progressivement. Chaque 
+section suppose que vous avez terminÃ© et compris les section prÃ©cÃ©dente 
 
-Certaines sections fournissent des exemples fonctionnels ainsi que des exercices. Dans certains cas, il y a aussi des sections "Les choses Ã  essayer" pour les curieux. Ces tÃ¢ches contiennent des problÃšmes plus complexes que dans les exercices.
-
+Sections are designed to be progressive.  Each section will start with the assumption that you have completed and understood the previous section in the series and will build on that knowledge.  A single section will progress through a handful of ideas and provide working examples wherever possible.  At the end of a section, where appropriate, we have included a handful of exercises to allow you to try out the ideas we've presented.  In some cases the section will include "Things To Try".  These tasks contain more complex problems than the exercises and is designed to challenge participants with advanced knowledge.
Index: trunk/workshop-foss4g/joins_exercises.rst
===================================================================
--- trunk/workshop-foss4g/joins_exercises.rst	(revision 81)
+++ trunk/workshop-foss4g/joins_exercises.rst	(revision 1)
@@ -1,72 +1,72 @@
 .. _joins_exercises:
 
-Partie 13 : Exercices sur jointures spatiales
-=============================================
+Section 13: Spatial Joins Exercises
+===================================
 
-Voici un petit rappel de certaines des fonctions vues prÃ©cÃ©demment. Elles seront utiles pour les exercices !
+Here's a reminder of some of the functions we have seen.  Hint: they should be useful for the exercises!
 
-* :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 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
+* :command:`sum(expression)`: aggregate to return a sum for a set of records
+* :command:`count(expression)`: aggregate to return the size of a set of records
+* :command:`ST_Area(geometry)` returns the area of the polygons
+* :command:`ST_AsText(geometry)` returns WKT ``text``
+* :command:`ST_Contains(geometry A, geometry B)` returns the true if geometry A contains geometry B 
+* :command:`ST_Distance(geometry A, geometry B)` returns the minimum distance between geometry A and geometry B
+* :command:`ST_DWithin(geometry A, geometry B, radius)` returns the true if geometry A is radius distance or less from geometry 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)` returns the length of the linestring
+* :command:`ST_Touches(geometry A, geometry B)` returns the true if the boundary of geometry A touches geometry B
+* :command:`ST_Within(geometry A, geometry B)` returns the true if geometry A is within geometry B
+ 
+Also remember the tables we have available:
 
-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
 
-Exercices
+Exercises
 ---------
 
- * **"Quelle station de mÃ©tro se situe dans le quartier 'Little Italy' ? Quelle est l'itinÃ©raire de mÃ©tro Ã  emprunter ?"**
-
+ * **"What subway station is in 'Little Italy'? What subway route is it on?"**
+ 
    .. 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')
-
+     
+ * **"What are all the neighborhoods served by the 6-train?"** (Hint: The ``routes`` column in the ``nyc_subway_stations`` table has values like 'B,D,6,V' and '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.
-
- * **"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 ?"**
-
+  
+     We used the ``DISTINCT`` keyword to remove duplicate values from our result set where there were more than one subway station in a neighborhood.
+    
+ * **"After 9/11, the 'Battery Park' neighborhood was off limits for several days. How many people had to be evacuated?"**
+ 
    .. 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.)
-
+    
+ * **"What are the population density (people / km^2) of the 'Upper West Side' and 'Upper East Side'?"** (Hint: There are 1000000 m^2 in one 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,10 +117,11 @@
      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 81)
+++ trunk/workshop-foss4g/postgis-functions.rst	(revision 1)
@@ -1,71 +1,70 @@
 .. _postgis-functions:
 
-Annexes A : Fonctions PostGIS
+Appendix A: PostGIS Functions
 =============================
 
-Constructeurs
--------------
+Constructors
+------------
 
-:command:`ST_MakePoint(Longitude, Latitude)`
-  Retourne un nouveau point. Note : ordre des coordonnÃ©es (longitude puis latitude).
+:command:`ST_MakePoint(Longitude, Latitude)` 
+  Returns a new point. Note the order of the coordinates (longitude then latitude).
 
 :command:`ST_GeomFromText(WellKnownText, srid)`
-  Retourne une nouvelle gÃ©omÃ©trie Ã  partir d'un reprÃ©sentation au format WKT et un SRID.
+  Returns a new geometry from a standard WKT string and srid.
 
 :command:`ST_SetSRID(geometry, srid)`
-  Met Ã  jour le SRID d'une gÃ©omÃ©trie. Retourne la mÃªme gÃ©omÃ©trie. Cela ne modifie pas les coordonnÃ©es de la gÃ©omÃ©trie, cela met simplement Ã  jour le SRID. Cette fonction est utile pour reconditionner les gÃ©omÃ©tries sans SRID.
+  Updates the srid on a geometry.  Returns the same geometry.  This does not alter the coordinates of the geometry, it just updates the srid. This function is useful for conditioning geometries created without an srid.
 
 :command:`ST_Expand(geometry, Radius)`
-  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.
+  Returns a new geometry that is an expanded bounding box of the input geometry.  This function is useful for creating envelopes for use in indexed searches.
 
-Sorties
+Outputs
 -------
 
 :command:`ST_AsText(geometry)`
-  Retourne une gÃ©omÃ©trie au format WKT.
+  Returns a geometry in a human-readable text format.
 
 :command:`ST_AsGML(geometry)`
-  Retourne la gÃ©omÃ©trie au format standard OGC :term:`GML`.
+  Returns a geometry in standard OGC :term:`GML` format.
 
 :command:`ST_AsGeoJSON(geometry)`
-  Retourne une gÃ©omÃ©trie au format "standard" `GeoJSON <http://geojson.org>`_.
+  Returns a geometry to a standard `GeoJSON <http://geojson.org>`_ format.
 
-Mesures
--------
+Measurements
+------------
 
 :command:`ST_Area(geometry)`
-  Retourne l'aire d'une gÃ©omÃ©trie dans l'unitÃ© du systÃšme de rÃ©fÃ©rence spatiale.
+  Returns the area of the geometry in the units of the spatial reference system.
 
 :command:`ST_Length(geometry)`
-  Retourne la longueur de la gÃ©omÃ©trie dans l'unitÃ© du systÃšme de rÃ©fÃ©rence spatiale.
+  Returns the length of the geometry in the units of the spatial reference system.
 
 :command:`ST_Perimeter(geometry)`
-  Retourne le pÃ©rimÃštre de la gÃ©omÃ©trie dans l'unitÃ© du systÃšme de rÃ©fÃ©rence spatiale.
+  Returns the perimeter of the geometry in the units of the spatial reference system.
 
 :command:`ST_NumPoints(linestring)`
-  Retourne le nombre de sommets dans une ligne.
+  Returns the number of vertices in a linestring.
 
 :command:`ST_NumRings(polygon)`
-  Retourne le nombre de contours dans un polygone.
+  Returns the number of rings in a polygon.
 
-:command:`ST_NumGeometries(geometry)`
-  Retourne le nombre de gÃ©omÃ©tries dans une collection de gÃ©omÃ©tries.
+:command:`ST_NumGeometries(geometry)` 
+  Returns the number of geometries in a geometry collection.
 
-Relations
----------
+Relationships
+-------------
 
 :command:`ST_Distance(geometry, geometry)`
-  Retourne la distance entre deux gÃ©omÃ©tries dans l'unitÃ© du  systÃšme de rÃ©fÃ©rence spatiale.
+  Returns the distance between two geometries in the units of the spatial reference system.
 
-: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_DWithin(geometry, geometry, radius)` 
+  Returns true if the geometries are within the radius distance of one another, otherwise false.
 
 :command:`ST_Intersects(geometry, geometry)`
-  Retourne TRUE si les gÃ©omÃ©tries sont disjointes, sinon FALSE.
+  Returns true if the geometries are not disjoint, otherwise false.
 
 :command:`ST_Contains(geometry, geometry)`
-  Retourne TRUE si la premiÃšre gÃ©omÃ©trie est totalement contenue dans la seconde, sinon FALSE.
+  Returns true if the first geometry fully contains the second geometry, otherwise false.
 
 :command:`ST_Crosses(geometry, geometry)`
-  Retourne TRUE si une ligne ou les contours d'un polygone croisent une ligne ou un contour de polygone, sinon FALSE.
-
+  Returns true if a line or polygon boundary crosses another line or polygon boundary, otherwise false.
Index: trunk/workshop-foss4g/installation.rst
===================================================================
--- trunk/workshop-foss4g/installation.rst	(revision 81)
+++ trunk/workshop-foss4g/installation.rst	(revision 1)
@@ -1,56 +1,57 @@
 .. _installation:
 
-Partie 2 : Installation
+Section 2: Installation
 =======================
 
-Nous utiliserons OpenGeo Suite comme application d'installation, car celle-ci contient PostGIS/PostgreSQL dans un seul outil d'installation pour Windows, Apple OS/X et Linux. La suite contient aussi GeoServer, OpenLayers et d'autres outils de visualisations sur le web.
+We will be using the OpenGeo Suite as our software package, as it includes PostGIS/PostgreSQL in a single fast installation for Windows, Apple OS/X, and Linux. The Suite also includes GeoServer, OpenLayers, and a number of web visualization utilities.
 
 .. note::
 
-    Si vous souhaitez installer simplement PostgreSQL, cela peut se faire en tÃ©lÃ©chargeant directement le code source ou les binaires de PostgreSQL sur le site du projet http://postgresql.org/download/. AprÃšs avoir installÃ© PostgreSQL, utilisez l'outil "StackBuilder" pour ajouter l'extension PostGIS Ã  votre installation.
+  If you want to install just PostgreSQL, it can also be downloaded directly as source code or binary from the PostgreSQL project site: http://postgresql.org/download/. After installing PostgreSQL, use the "StackBuilder" utility to add the PostGIS extension.
 
-.. note::
+.. note:: 
 
-    Les indications prÃ©cises de ce document sont propre Ã  Windows, mais l'installation sous OS/X est largement similaire. Une fois la Suite installÃ©e, les instructions relatives au systÃšme d'exploitation devraient Ãªtre identiques.
+  The precise directions in this document are for Windows, but for OS/X the installation is largely the same. Once the Suite is installed, the directions for both operating systems should be almost identical.  
 
-#. Dans le rÃ©pertoire :file:`postgisintro\\software\\` vous trouverez l'installeur de OpenGeo Suite nommÃ© :  :file:`opengeosuite-2.4.3.exe` (sur OS/X, :file:`opengeosuite-2.4.3.dmg`).  Double cliquez sur cet exÃ©cutable pour le lancer.
+#. In the directory :file:`postgisintro\\software\\` you will find the OpenGeo Suite installer entitled  :file:`opengeosuite-2.4.3.exe` (on OS/X, :file:`opengeosuite-2.4.3.dmg`).  Double click to execute.
 
-#. ApprÃ©ciez le message de courtoisie d'OpenGeo, puis cliquez sur **Next**.
+#. Enjoy the warm welcome, courtesy of OpenGeo, then click **Next**.
 
    .. image:: ./screenshots/install_01.png
 
 
-#. OpenGeo Suite est publiÃ©e sous licence GPL, ce qui est prÃ©cisÃ© dans la fenÃªtre de license.  Cliquez sur **I Agree**.
+#. The OpenGeo Suite is licensed under the GNU GPL, which is reproduced on the licensing page.  Click **I Agree**.
 
    .. image:: ./screenshots/install_02.png
 
 
-#. Le rÃ©pertoire oÃ¹ OpenGeo Suite sera installÃ© est gÃ©nÃ©ralement le rÃ©pertoire ``C:\Program Files\``. Les donnÃ©es seront placÃ©es dans le rÃ©pertoire personnel de votre utilisateur, dans le rÃ©pertoire :file:`.opengeo`.  Cliquez sur **Next**.
+#. The directory where the OpenGeo Suite will reside is the usual ``C:\Program Files\`` location. The data will be placed in your home directory, under the :file:`.opengeo` directory.  Click **Next**.
 
    .. image:: ./screenshots/install_03.png
 
 
-#. L'installeur crÃ©era un certain nombre de raccourcis dans le rÃ©pertoire OpenGeo du menu DÃ©marrer. Cliquez sur **Next**.
+#. The installer will create a number of shortcuts in the OpenGeo folder in the Start Menu. Click **Next**.
 
    .. image:: ./screenshots/install_04.png
 
 
-#. Tous les composants de la Suite sont obligatoires Ã  ce niveau. Cliquez sur **Next**.
+#. All the components of the Suite are mandatory at this point. Click **Next**.
 
    .. image:: ./screenshots/install_05.png
 
 
-#. PrÃªt Ã  installer ! Cliquez sur **Install**.
+#. Ready for install!  Click **Install**.
 
    .. image:: ./screenshots/install_06.png
 
 
-#. Le processus d'installation prendra quelques minutes.
+#. The installation process will run for a couple of minutes.
 
    .. image:: ./screenshots/install_07.png
 
 
-#. Lorsque l'installation est terminÃ©e, lancez le Dashboard pour commencer la partie suivante de ces travaux pratiques ! Cliquez sur **Finish**.
+#. When the installation is complete, launch the Dashboard to start the next section of the workshop! Click **Finish**.
 
    .. image:: ./screenshots/install_08.png
 
+
Index: trunk/workshop-foss4g/creating_db.rst
===================================================================
--- trunk/workshop-foss4g/creating_db.rst	(revision 81)
+++ trunk/workshop-foss4g/creating_db.rst	(revision 1)
@@ -1,13 +1,13 @@
 .. _creating_db:
 
-Partie 3 : CrÃ©er une base de donnÃ©es spatiales
-===============================================
+Section 3: Creating a Spatial Database
+======================================
 
-Le Dashboard et PgAdmin
------------------------
+The Dashboard and PgAdmin
+-------------------------
 
-Le "Dashboard" est une application centralisant les accÃšs aux diffÃ©rentes parties de l'openGeo Suite.
+The "Dashboard" is the central application to access all portions of the OpenGeo Suite.
 
-Lorsque vous dÃ©marrez le dashboard pour la premiÃšre fois, il vous fournit une indication quand au mot de passe par dÃ©faut pour accÃ©der Ã  GeoServer.
+When you first start the dashboard, it provides a reminder about the default password for accessing GeoServer.
 
 .. image:: ./screenshots/dashboard_01.png
@@ -15,19 +15,19 @@
 .. note::
 
-  La base de donnÃ©es PostGIS a Ã©tÃ© installÃ©e sans la moindre restriction d'accÃšs pour les utilisateurs locaux (les utilisateurs se connectant sur la mÃªme machine que celle faisant tourner le serveur de base de donnÃ©es). Cela signifie qu'il acceptera *tout* les mots de passe que vous fournirez. Si vous devez vous connecter depuis un ordinateur distant, le mot de passe pour l'utilisateur ``postgres`` a utiliser est : ``postgres``.
+  The PostGIS database has been installed with unrestricted access for local users (users connecting from the same machine as the database is running). That means that it will accept *any* password you provide. If you need to connect from a remote computer, the password for the ``postgres`` user has been set to ``postgres``.
 
-Pour ces travaux pratiques, nous n'utilserons que les parties de la section "PostGIS" du Dashboard.
+For this workshop, we will be using the entries under the "PostGIS" section of the Dashboard almost exclusively.
 
-#. PremiÃšrement, nous devons dÃ©marrer le serveur de base de donnÃ©es PostGIS. Cliquez sur le bouton vert **Start** en haut Ã  droite de la fenÃªtre du Dashboard.
+#. First, we need to start up PostGIS. Click the green **Start** button at the top right corner of the Dashboard.
 
-#. La premiÃšre fois que la Suite se dÃ©marre, elle initialise un espace de donnÃ©es et met en place des modÃšles de bases de donnÃ©es. Ceci peut prendre quelques minutes. Une fois la Suite lancÃ©e, vous pouvez cliquer sur l'option **Manage** dans le composant *PostGIS*  pour lancer l'outil pgAdmin.
+#. The first time the Suite starts, it initializes a data area and sets up template databases. This can take a couple minutes. Once the Suite has started, you can click the **Manage** option under the *PostGIS* component to start the pgAdmin utility.
 
       .. image:: ./screenshots/dashboard_02.png
+  
+      .. note:: 
+  
+         PostgreSQL has a number of administrative front-ends.  The primary is `psql <http://www.postgresql.org/docs/8.1/static/app-psql.html>`_ a command-line tool for entering SQL queries.  Another popular PostgreSQL front-end is the free and open source graphical tool `pgAdmin <http://www.pgadmin.org/>`_. All queries done in pgAdmin can also be done on the command line with psql. 
 
-      .. note::
-
-         PostgreSQL dispose de nombreux outils d'administration diffÃ©rents.  Le premier est `psql <http://www.postgresql.org/docs/8.1/static/app-psql.html>`_ un outil en ligne de commande permettant de saisir des requÃªtes SQL. Un autre outil d'administation populaire est l'outil graphique libre et gratuit `pgAdmin <http://www.pgadmin.org/>`_. Toutes les requÃªtes exÃ©cutÃ©es depuis pgAdmin peuvent aussi Ãªtre utilisÃ©es depuis la ligne de commande avec psql.
-
-#. Si c'est la premiÃšre fois que vous lancez pgAdmin, vous devriez avoir une entrÃ©e du type **PostGIS (localhost:54321)** dÃ©jÃ  configurÃ©e dans pgAdmin. Double cliquez sur cet Ã©lÃ©ment, et entrez le mot de passe de votre choix pour vous connecter au serveur.
+#. If this is the first time you have run pgAdmin, you should have a server entry for **PostGIS (localhost:54321)** already configured in pgAdmin. Double click the entry, and enter anything you like at the password prompt to connect to the database.
 
     .. image:: ./screenshots/pgadmin_01.png
@@ -35,20 +35,19 @@
     .. note::
 
-      Si vous aviez dÃ©jÃ  une installation pgAdmin sur votre ordinateur, vous n'aurez pas l'entrÃ©e **(localhost:54321)**. Vous devrez donc crÃ©er une nouvelle connexion. Allez dans *File > Add Server*, puis enregistrez un nouveau serveur pour **localhost** avec le port **54321** (notez que numÃ©ro de port n'est pas standard) afin de vous connecter au serveur PostGIS installÃ© Ã  l'aide de l'OpenGeo Suite.
+      If you have a previous installation of PgAdmin on your computer, you will not have an entry for **(localhost:54321)**. You will need to create a new connection.  Go to *File > Add Server*, and register a new server  at **localhost** and port **54321** (note the non-standard port number) in order to connect to the PostGIS bundled with the OpenGeo Suite.
 
-CrÃ©er une base de donnÃ©es
--------------------------
+Creating a Database
+-------------------
+PostgreSQL has the notion of a **template database** that can be used to initialize a new database.  The new database automatically gets a copy of everything from the template. When you installed PostGIS, a spatially enabled database called ``template_postgis`` was created. If we use ``template_postgis`` as a template when creating our new database, the new database will be spatially enabled.
 
-PostgreSQL fournit ce que l'on appelle des modÃšles de bases de donnÃ©es qui peuvent Ãªtre utilisÃ©s lors de la crÃ©ation d'une nouvelle base. Cette nouvelle base contiendra alors une copie de tout ce qui est prÃ©sent dans le modÃšle. Lorsque vous installez PostGIS, une base de donnÃ©es appelÃ©e ``template_postgis`` a Ã©tÃ© crÃ©e. Si nous utilisons ``template_postgis`` comme modÃšle lors de la crÃ©ation de notre nouvelle base, la nouvelle base sera une base de donnÃ©es spatiales.
+#. Open the Databases tree item and have a look at the available databases.  The ``postgres`` database is the user database for the default postgres user and is not too interesting to us.  The ``template_postgis`` database is what we are going to use to create spatial databases.
 
-#. Ouvrez l'arbre des bases de donnÃ©es et regardez quelles sont les bases de donnÃ©es disponibles. La base ``postgres`` est la base de l'utilisateur (par dÃ©faut l'utilisateur postgres, donc pas trÃšs intÃ©ressante pour nous). La base ``template_postgis`` est celle que nous utiliserons pour crÃ©er des bases de donnÃ©es spatiales.
-
-#. Cliquez avec le clic droit sur l'Ã©lÃ©ment ``Databases`` et sÃ©lectionnez ``New Database``.
+#. Right-click on the ``Databases`` item and select ``New Database``.
 
    .. image:: ./screenshots/pgadmin_02.png
 
-   .. note:: Si vous recevez un message d'erreur indiquant que la base de donnÃ©es (``template_postgis``) est utilisÃ©e par d'autre utilisateurs, cela signifie que vous l'avez activÃ© par inadvertance. Utilisez alors le clic droit sur l'Ã©lÃ©ment ``PostGIS (localhost:54321)`` puis sÃ©lectionnez ``Disconnect``.  Double cliquez sur le mÃªme Ã©lÃ©ment pour vous reconnecter et essayez Ã  nouveau.
+   .. note:: If you receive an error indicating that the source database (``template_postgis``) is being accessed by other users, this is likely because you still have it selected.  Right-click on the ``PostGIS (localhost:54321)`` item and select ``Disconnect``.  Double-click the same item to reconnect and try again.
 
-#. Remplissez le formulaire ``New Database`` puis cliquez sur **OK**.
+#. Fill in the ``New Database`` form as shown below and click **OK**.  
 
    .. list-table::
@@ -65,13 +64,13 @@
    .. image:: ./screenshots/pgadmin_03.png
 
-#. SÃ©lectionnez la nouvelle base de donnÃ©es ``nyc`` et ouvrez-la pour consulter son contenu. Vous verrez le schÃ©ma ``public``, et sous cela un ensemble de tables de mÃ©tadonnÃ©es spÃ©cifiques Ã  PostGIS -- ``geometry_columns`` et ``spatial_ref_sys``.
+#. Select the new ``nyc`` database and open it up to display the tree of objects. You'll see the ``public`` schema, and under that a couple of PostGIS-specific metadata tables -- ``geometry_columns`` and ``spatial_ref_sys``.
 
    .. image:: ./screenshots/pgadmin_04.png
 
-#. Cliquez sur le bouton SQL query comme prÃ©sentÃ© ci-dessous (ou allez dans *Tools > Query Tool*).
+#. Click on the SQL query button indicated below (or go to *Tools > Query Tool*).
 
    .. image:: ./screenshots/pgadmin_05.png
 
-#. Saisissez la requÃªte suivante dans le champ prÃ©vu Ã  cet effet :
+#. Enter the following query into the query text field:
 
    .. code-block:: sql
@@ -80,15 +79,15 @@
 
    .. note::
-      C'est notre premiÃšre requÃªte SQL.  ``postgis_full_version()`` est une fonction d'administration qui renvoie le numÃ©ro de version et les options de configuration utilisÃ©es lors de la compilation.
-
-#. Cliquez sur le bouton **Play** dans la barre d'outils (ou utilisez la touche **F5**) pour  "exÃ©cuter la requÃªte." La requÃªte retournera la chaÃ®ne de caractÃšres suivante, confirmant que PostGIS est correctement activÃ© dans la base de donnÃ©es.
+   
+      This is our first SQL query.  ``postgis_full_version()`` is management function that returns version and build configuration. 
+      
+#. Click the **Play** button in the toolbar (or press **F5**) to "Execute the query." The query will return the following string, confirming that PostGIS is properly enabled in the database.
 
    .. image:: ./screenshots/pgadmin_06.png
+   
+You have successfully created a PostGIS spatial database!!
 
-Vous venez de crÃ©er une base de donnÃ©es PostGIS avec succÃšs !
+Function List
+-------------
 
-Liste des fonctions
--------------------
-
-`PostGIS_Full_Version <http://postgis.org/documentation/manual-svn/PostGIS_Full_Version.html>`_: Retourne les informations complÃštes relatives Ã  la version et aux options de compilation de PostGIS.
-
+`PostGIS_Full_Version <http://postgis.org/documentation/manual-svn/PostGIS_Full_Version.html>`_: Reports full postgis version and build configuration info.
Index: trunk/workshop-foss4g/about_data.rst
===================================================================
--- trunk/workshop-foss4g/about_data.rst	(revision 81)
+++ trunk/workshop-foss4g/about_data.rst	(revision 1)
@@ -1,62 +1,107 @@
 .. _about_data:
 
-Partie 5 : A propos de nos donnÃ©es
-==================================
+Section 5: About our data
+=========================
 
-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.
+The data for this workshop is four shapefiles for New York City, and one attribute table of sociodemographic variables.  We've loaded our shapefiles as PostGIS tables and will add sociodemographic data later in the workshop.
 
-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.
+The following describes the number of records and table attributes for each of our datasets.  These attribute values and relationships are fundamental to our future analysis. 
 
-Pour visualiser la nature de vos tables depuis pgAdmin, cliquez avec le bouton droit sur une table et sÃ©lectionnez **Properties**. Vous trouverez un rÃ©sumÃ© des propriÃ©tÃ©s de la table, incluant la liste des attributs d'une table dans l'onglet **Columns**.
+To explore the nature of your tables in pgAdmin, right-click a highlighted table and select **Properties**.  You will find a summary of table properties, including a list of table attributes within the **Columns** tab.
 
 nyc_census_blocks
 -----------------
 
-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.
+A census block is the smallest geography for which census data is reported. All higher level census geographies (block groups, tracts, metro areas, counties, etc) can be built from unions of census blocks. We have attached some demographic data to our collection of blocks.
 
-Nombre d'enregistrements : 36592
+Number of records: 36592
 
 .. list-table::
-   :widths: 20 80
+   :widths: 20 80 
 
    * - **blkid**
-     - Un code Ã  15 chiffres qui permet d'identifier de maniÃšre unique chaque bloc **block**. Eg: 360050001009000
+     - A 15-digit code that uniquely identifies every census **block**. Eg: 360050001009000
    * - **popn_total**
-     - Nombre total de personnes dans le bloc
+     - Total number of people in the census block
    * - **popn_white**
-     - Nombre de personnes se dÃ©clarant comme de couleur blanche
+     - Number of people self-identifying as "White" in the block
    * - **popn_black**
-     - Nombre de personnes se dÃ©clarant comme de couleur noire
+     - Number of people self-identifying as "Black" in the block
    * - **popn_nativ**
-     - Nombre de personnes se dÃ©clarant comme natif d'AmÃ©rique du nord
+     - Number of people self-identifying as "Native American" in the block
    * - **popn_asian**
-     - Nombre de personnes se dÃ©clarant comme asiatique
+     - Number of people self-identifying as "Asian" in the block
    * - **popn_other**
-     - Nombre de personnes se dÃ©clarant comme faisant partie d'une autre catÃ©gorie
+     - Number of people self-identifying with other categories in the block
    * - **hous_total**
-     - Nombre de piÃšces dans le bloc
+     - Number of housing units in the block
    * - **hous_own**
-     - Nombre de propriÃ©taires occupant le bloc
+     - Number of owner-occupied housing units in the block
    * - **hous_rent**
-     - Nombre de locataires occupant le bloc
+     - Number of renter-occupied housing units in the block
    * - **boroname**
-     - Nom du quartier (Manhattan, The Bronx, Brooklyn, Staten Island, Queens)
+     - Name of the New York borough. Manhattan, The Bronx, Brooklyn, Staten Island, Queens
    * - **the_geom**
-     - Polygone reprÃ©sentant les contours d'un bloc
+     - Polygon boundary of the block
 
 .. figure:: ./screenshots/nyc_census_blocks.png
+   
+   *Black population as a percentage of Total Population* 
 
-   *Pourcentage de la population qui est de couleur noire*
+.. note:: 
 
-.. 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>`_.
-
+    To get census data into GIS, you need to join two pieces of information: the actual data (text), and the boundary files (spatial).  There are many options for getting the data, including downloading data and boundaries from the Census Bureau's `American FactFinder <http://factfinder.census.gov>`_. 
+    
 nyc_neighborhoods
 -----------------
 
-Les quartiers de New York
+New York has a rich history of neighborhood names and extent.  Neighborhoods are social constructs that do not follow lines laid down by the government. For example, the Brooklyn neighborhoods of Carroll Gardens, Red Hook, and Cobble Hill were once collectively known as "South Brooklyn." And now, depending on which real estate agent you talk to, the same four blocks in the-neighborhood-formerly-known-as-Red-Hook can be referred to as Columbia Heights, Carroll Gardens West, or Red Hook! 
 
-Nombre d'enregistrements: 129
+Number of records: 129
+
+.. list-table::
+   :widths: 20 80 
+
+   * - **name**
+     - Name of the neighborhood
+   * - **boroname**
+     - Name of the New York borough. Manhattan, The Bronx, Brooklyn, Staten Island, Queens
+   * - **the_geom**
+     - Polygon boundary of the neighborhood
+   
+.. figure:: ./screenshots/nyc_neighborhoods.png
+
+    *The neighborhoods of New York City* 
+
+nyc_streets
+-----------
+
+The street centerlines form the transportation network of the city. These streets have been flagged with types in order to distinguish between such thoroughfares as back alleys, arterial streets, freeways, and smaller streets. Desirable areas to live might be on residential streets rather than next to a freeway.
+
+Number of records: 19091
+
+.. list-table::
+   :widths: 20 80 
+
+   * - **name**
+     - Name of the street
+   * - **oneway**
+     - Is the street one-way? "yes" = yes, "" = no
+   * - **type**
+     - Road type. Eg. primary, secondary, residential, motorway
+   * - **the_geom**
+     - Linear centerline of the street
+   
+.. figure:: ./screenshots/nyc_streets.png
+
+     *The streets of New York City. Major roads are in red.*
+
+   
+nyc_subway_stations
+-------------------
+
+The subway stations link the upper world where people live to the invisible network of subways beneath. As portals to the public transportation system, station locations help determine how easy it is for different people to enter the subway system.
+
+Number of records: 491
 
 .. list-table::
@@ -64,73 +109,28 @@
 
    * - **name**
-     - Nom du quartier
-   * - **boroname**
-     - Nom de la section dans New York (Manhattan, The Bronx, Brooklyn, Staten Island, Queens)
+     - Name of the station
+   * - **borough**
+     - Name of the New York borough. Manhattan, The Bronx, Brooklyn, Staten Island, Queens
+   * - **routes**
+     - Subway lines that run through this station
+   * - **transfers**
+     - Lines you can transfer to via this station
+   * - **express**
+     - Stations where express trains stop, "express" = yes, "" = no
    * - **the_geom**
-     - Limite polygonale du quartier
-
-.. figure:: ./screenshots/nyc_neighborhoods.png
-
-    *Les quartiers de New York*
-
-nyc_streets
------------
-
-Les rues de New York
-
-Nombre d'enregistrements: 19091
-
-.. list-table::
-   :widths: 20 80
-
-   * - **name**
-     - Nom de la rue
-   * - **oneway**
-     - Est-ce que la rue est Ã  sens unique ? "yes" = yes, "" = no
-   * - **type**
-     - Type de voie (Cf: primary, secondary, residential, motorway)
-   * - **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
--------------------
-
-Les stations de mÃ©tro de New York
-
-Nombre d'enregistrements: 491
-
-.. list-table::
-   :widths: 20 80
-
-   * - **name**
-     - Nom de la station
-   * - **borough**
-     - Nom de la section dans New York (Manhattan, The Bronx, Brooklyn, Staten Island, Queens)
-   * - **routes**
-     - Lignes de mÃ©tro passant par cette station
-   * - **transfers**
-     - Lignes de mÃ©tro accessibles depuis cette station
-   * - **express**
-     - Stations ou le train express s'arrÃªte, "express" = yes, "" = no
-   * - **the_geom**
-     - Localisation ponctuelle de la station
+     - Point location of the station
 
 .. figure:: ./screenshots/nyc_subway_stations.png
 
-    *Localisation ponctuelle des stations de mÃ©tro de New York*
+    *Point locations for New York City subway stations*
 
 nyc_census_sociodata
 --------------------
 
-DonnÃ©es socio-dÃ©mographiques de la ville de New York
+There is a rich collection of social-economic data collected during the census process, but only at the larger geography level of census tract.  Census blocks combine to form census tracts (and block groups). We have collected some social-economic at a census tract level to answer some of these more interesting questions about New York City. 
 
 .. note::
 
-   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 .
+   The ``nyc_census_sociodata`` is a data table.  We will need to connect it to Census geographies before conducting any spatial analysis. 
 
 .. list-table::
@@ -138,30 +138,30 @@
 
    * - **tractid**
-     - Un code Ã  11 chiffre qui identifie chaque secteur de recensement. **tract**. Eg: 36005000100
+     - An 11-digit code that uniquely identifies every census **tract**. Eg: 36005000100
    * - **transit_total**
-     - Nombre de travailleurs dans le secteur
+     - Number of workers in the tract
    * - **transit_public**
-     - Nombre de travailleurs dans le secteur utilisant les transports en commun
+     - Number of workers in the tract who take public transit
    * - **transit_private**
-     - Nombre de travailleurs dans le secteur utilisant un vÃ©hicule privÃ©
+     - Number of workers in the tract who use private automobiles / motorcycles
    * - **transit_other**
-     - Nombre de travailleurs dans le secteur utilisant un autre moyen de transport
+     - Number of workers in the tract who use other forms like walking / biking
    * - **transit_time_mins**
-     - Nombre total de minutes passÃ©es dans les transports par l'ensemble des travailleurs du secteur (minutes)
+     - Total number of minutes spent in transit by all workers in the tract (minutes)
    * - **family_count**
-     - Nombre de familles dans le secteur
+     - Number of familes in the tract
    * - **family_income_median**
-     - Revenu mÃ©dian par famille du secteur (dollars)
+     - Median family income in the tract (dollars)
    * - **family_income_aggregate**
-     -  Revenu total de toutes les familles du secteur (dollars)
+     - Total income of all families in the tract (dollars)
    * - **edu_total**
-     - Nombre de personnes ayant un parcours scolaire
+     - Number of people with educational history
    * - **edu_no_highschool_dipl**
-     - Nombre de personnes n'ayant pas de diplÃŽme d'Ã©ducation secondaire
+     - Number of people with no highschool diploma
    * - **edu_highschool_dipl**
-     - Nombre de personnes ayant un diplÃŽme d'Ã©ducation secondaire
+     - Number of people with highschool diploma and no further education
    * - **edu_college_dipl**
-     - Nombre de personnes ayant un diplÃŽme de lycÃ©e
+     - Number of people with college diploma and no further education
    * - **edu_graduate_dipl**
-     - Nombre de personnes ayant un diplÃŽme de collÃšge
+     - Number of people with graduate school diploma 
 
Index: trunk/workshop-foss4g/glossary.rst
===================================================================
--- trunk/workshop-foss4g/glossary.rst	(revision 81)
+++ trunk/workshop-foss4g/glossary.rst	(revision 1)
@@ -1,70 +1,72 @@
 .. _glossary:
 
-Annexes B : Glossaire
-=====================
+Appendix B: Glossary
+====================
 
 .. glossary::
 
     CRS
-        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.
+        A "coordinate reference system". The combination of a geographic coordinate system and a projected coordinate system.
 
     GDAL
-        `Geospatial Data Abstraction Library <http://gdal.org>`_, prononcÃ© "GÃ©DAL", une bibliothÃšque open source permettant d'accÃ©der aux donnÃ©es rasters supportant un grand nombre de formats, utilisÃ© largement Ã  la fois dans les applications open source et propriÃ©taires.
+        `Geospatial Data Abstraction Library <http://gdal.org>`_, pronounced "GOO-duhl", an open source raster access library with support for a large number of formats, used widely in both open source and proprietary software.
 
     GeoJSON
-        "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, stocke, analyse, gÃšre, et prÃ©sente les donnÃ©es qui sont reliÃ©es Ã  la zone gÃ©ographique.
-
+        "Javascript Object Notation", a text format that is very fast to parse in Javascript virtual machines. In spatial, the extended specification for `GeoJSON <http://geojson.org>`_ is commonly used.
+    
+    GIS
+        `Geographic information system <http://en.wikipedia.org/wiki/Geographic_information_system>`_ or geographical information system captures, stores, analyzes, manages, and presents data that is linked to location.
+    
     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.
+        `Geography Markup Language <http://www.opengeospatial.org/standards/gml>`_.  GML is the :term:`OGC` standard XML format for representing spatial feature information.
 
     JSON
-        "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Ã©.
+        "Javascript Object Notation", a text format that is very fast to parse in Javascript virtual machines. In spatial, the extended specification for `GeoJSON <http://geojson.org>`_ is commonly used.
 
     JSTL
-        "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.
+        "JavaServer Page Template Library", a tag library for :term:`JSP` that encapsulates many of the standard functions handled in JSP (database queries, iteration, conditionals) into a terse syntax.
 
     JSP
-        "JavaServer Pages" est un systÃšme de script pour les serveur d'applications Java qui permet de mixer du code XML et du code Java.
+        "JavaServer Pages" a scripting system for Java server applications that allows the interleaving of markup and Java procedural code.
 
     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 explique sa prÃ©sence (maintenant obscure)  dans le nom du format.
+        "Keyhole Markup Language", the spatial XML format used by Google Earth. Google Earth was originally written by a company named "Keyhole", hence the (now obscure) reference in the name.
 
     OGC
-        Open Geospatial Consortium `<http://opengeospatial.org/>`_ (OGC) est une organisation qui dÃ©veloppe des spÃ©cifications pour les services spatiaux.
+        The Open Geospatial Consortium <http://opengeospatial.org/> (OGC) is a standards organization that develops specifications for geospatial services.
 
     OSGeo
-         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.
+         The Open Source Geospatial Foundation <http://osgeo.org> (OSGeo) is a non-profit foundation dedicated to the promotion and support of open source geospatial software.
 
     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 spatiale.
+        The `Simple Features for SQL <http://www.opengeospatial.org/standards/sfs>`_ (SFSQL) specification from the :term:`OGC` defines the types and functions that make up a standard spatial database.
 
     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Ã©es vectorielles.
+        The `Styled Layer Descriptor <http://www.opengeospatial.org/standards/sld>`_ (SLD) specification from the :term:`OGC` defines an format for describing cartographic rendering of vector features.
 
     SRID
-        "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.
+        "Spatial reference ID" a unique number assigned to a particular "coordinate reference system". The PostGIS table **spatial_ref_sys** contains a large collection of well-known srid values and text representations of the coordinate reference systems.
 
     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.
+        "Structured query language" is the standard means for querying relational databases. See 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>`_; spÃ©cification contenant diffÃ©rentes sections sur les types Ã©tendues. Elle inclue une section substantielle sur les types spatiaux.
+        `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.
 
     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 interactif ou animÃ©). RÃ©ference : http://en.wikipedia.org/wiki/Scalable_Vector_Graphics.
+        "Scalable vector graphics" is a family of specifications of an XML-based file format for describing two-dimensional vector graphics, both static and dynamic (i.e. interactive or animated). See http://en.wikipedia.org/wiki/Scalable_Vector_Graphics.
 
     WFS
-        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.
+        The `Web Feature Service <http://www.opengeospatial.org/standards/wfs>`_ (WFS) specification from the :term:`OGC` defines an interface for reading and writing geographic features across the web.
 
     WMS
-        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.
+        The `Web Map Service <http://www.opengeospatial.org/standards/wms>`_ (WMS) specification from the :term:`OGC` defines an interface for requesting rendered map images across the web.
 
     WKB
-        "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`).
+        "Well-known binary". Refers to the binary representation of geometries described in the Simple Features for SQL specification (:term:`SFSQL`).
+        
+    WKT
+        "Well-known text". Can refer either to the text representation of geometries, with strings starting "POINT", "LINESTRING", "POLYGON", etc. Or can refer to the text representation of a :term:`CRS`, with strings starting "PROJCS", "GEOGCS", etc.  Well-known text representations are :term:`OGC` standards, but do not have their own specification documents. The first descriptions of WKT (for geometries and for CRS) appeared in the :term:`SFSQL` 1.0 specification.
+        
 
-    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 81)
+++ trunk/workshop-foss4g/tuning.rst	(revision 1)
@@ -1,14 +1,14 @@
 .. _tuning:
 
-Partie 21 : ParamÃ©trer PostgreSQL pour le spatial
-=================================================
+Section 21: Tuning PostgreSQL for Spatial
+=========================================
 
-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.
+PostgreSQL is a very versatile database system, capable of running efficiently in very low-resource environments and environments shared with a variety of other applications.  In order to ensure it will run properly for many different environments, the default configuration is very conservative and not terribly appropriate for a high-performance production database.  Add the fact that geospatial databases have different usage patterns, and the data tend to consist of fewer, much larger records than non-geospatial databases, and you can see that the default configuration will not be totally appropriate for our purposes.  
 
-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.
+All of these configuration parameters can edited in the database configuration file, :file:`C:\\Documents and Settings\\%USER\\.opengeo\\pgdata\\%USER`.  This is a regular text file and can be edited using Notepad or any other text editor.  The changes will not take effect until the server is restarted.
 
 .. image:: ./tuning/conf01.png
 
-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`.
+An easier way of editing this configuration is by using the built-in "Backend Configuration Editor".  In pgAdmin, go to *File > Open postgresql.conf...*.  It will ask for the location of the file, and navigate to :file:`C:\\Documents and Settings\\%USER\\.opengeo\\pgdata\\%USER`.
 
 .. image:: ./tuning/conf02.png
@@ -16,16 +16,16 @@
 .. 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Ãš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**.
+This section describes some of the configuration parameters that should be adjusted for a production-ready geospatial database.  For each section, find the appropriate item in the list, double-click on the line to edit the configuration.  Change the *Value* to the recommended value as described, make sure the item is *Enabled*, the click **OK**.
 
-.. 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.
+.. note:: These values are recommendations only; each environment will differ and testing is required to determine the optimal configuration.  But this section should get you off to a good start.
 
 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 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.
+Sets the amount of memory the database server uses for shared memory buffers.  These are shared amongst the back-end processes, as the name suggests.  The default values are typically woefully inadequate for production databases.
 
-  *Valeur par dÃ©faut* : typiquement 32MB
+  *Default value*: typically 32MB
 
-  *Valeur recommandÃ©e* : 75% de la mÃ©moire de la base de donnÃ©es (500MB)
+  *Recommended value*: 75% of database memory (500MB)
 
 .. image:: ./tuning/conf04.png
@@ -34,11 +34,11 @@
 --------
 
-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.
+Defines the amount of memory that internal sorting operations and hash tables can consume before the database switches to on-disk files.  This value defines the available memory for each operation; complex queries may have several sort or hash operations running in parallel, and each connected session may be executing a query.
 
-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.
+As such you must consider how many connections and the complexity of expected queries before increasing this value.  The benefit to increasing is that the processing of more of these operations, including ORDER BY, and DISTINCT clauses, merge and hash joins, hash-based aggregation and hash-based processing of subqueries, can be accomplished without incurring disk writes.
 
-  *Valeur par dÃ©faut* : 1MB
+  *Default value*: 1MB
 
-  *Valeur recommandÃ©e* : 16MB
+  *Recommended value*: 16MB
 
 .. image:: ./tuning/conf05.png
@@ -47,5 +47,5 @@
 --------------------
 
-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.
+Defines the amount of memory used for maintenance operations, including vacuuming, index and foreign key creation.  As these operations are not terribly common, the default value may be acceptable.  This parameter can alternately be increased for a single session before the execution of a number of :command:`CREATE INDEX` or :command:`VACUUM` calls as shown below.
 
   .. code-block:: sql
@@ -55,7 +55,7 @@
     SET maintenance_work_mem TO '16MB';
 
-  *Valeur par dÃ©faut* : 16MB
+  *Default value*: 16MB
 
-  *Valeur recommandÃ©e* : 128MB
+  *Recommended value*: 128MB
 
 .. image:: ./tuning/conf06.png
@@ -64,11 +64,11 @@
 -----------
 
-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.
+Sets the amount of memory used for write-ahead log (WAL) data.  Write-ahead logs provide a high-performance mechanism for insuring data-integrity.  During each change command, the effects of the changes are written first to the WAL files and flushed to disk.  Only once the WAL files have been flushed will the changes be written to the data files themselves.  This allows the data files to be written to disk in an optimal and asynchronous manner while ensuring that, in the event of a crash, all data changes can be recovered from the WAL.  
 
-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.
+The size of this buffer only needs to be large enough to hold WAL data for a single typical transaction.  While the default value is often sufficient for most data, geospatial data tends to be much larger.  Therefore, it is recommended to increase the size of this parameter.
 
-  *Valeur par dÃ©faut* : 64kB
+  *Default value*: 64kB
 
-  *Valeur recommandÃ©e* : 1MB
+  *Recommended value*: 1MB
 
 .. image:: ./tuning/conf07.png
@@ -77,11 +77,11 @@
 -------------------
 
-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.
+This value sets the maximum number of log file segments (typically 16MB) that can be filled between automatic WAL checkpoints.  A WAL checkpoint is a point in the sequence of WAL transactions at which it is guaranteed that the data files have been updated with all information before the checkpoint.  At this time all dirty data pages are flushed to disk and a checkpoint record is written to the log file.  This allows the crash recovery process to find the latest checkpoint record and apply all following log segments to complete the data recovery.
 
-Ã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.
+Because the checkpoint process requires the flushing of all dirty data pages to disk, it creates a significant I/O load.  The same argument from above applies; geospatial data is large enough to unbalance non-geospatial optimizations.  Increasing this value will prevent excessive checkpoints, though it may cause the server to restart more slowly in the event of a crash.
 
-  *Valeur par dÃ©faut* : 3
+  *Default value*: 3
 
-  *Valeur recommandÃ©e* : 6
+  *Recommended value*: 6
 
 .. image:: ./tuning/conf08.png
@@ -90,9 +90,9 @@
 ----------------
 
-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``.
+This is a unit-less value that represents the cost of a random page access from disk.  This value is relative to a number of other cost parameters including sequential page access, and cpu operation costs.  While there is no magic bullet for this value, the default is generally conservative.  This value can be set on a per-session basis using the ``SET random_page_cost TO 2.0`` command.
 
-  *Valeur par dÃ©faut* : 4.0
+  *Default value*: 4.0
 
-  *Valeur recommandÃ©e* : 2.0
+  *Recommended value*: 2.0
 
 .. image:: ./tuning/conf09.png
@@ -101,19 +101,21 @@
 -------------
 
-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.
+This is the parameter that controls the cost of a sequential page access.  This value does not generally require adjustment but the difference between this value and ``random_page_cost`` greatly affects the choices made by the query planner.  This value can also be set on a per-session basis.
 
-  *Valeur par dÃ©faut* : 1.0
+  *Default value*: 1.0
 
-  *Valeur recommandÃ©e* : 1.0
+  *Recommended value*: 1.0
 
 .. image:: ./tuning/conf10.png
 
-Recharger la configuration
---------------------------
+Reload configuration
+--------------------
 
-AprÃšs avoir rÃ©alisÃ© les changements mentionnÃ©s dans cette partie sauvez-les puis rechargez la configuration.
+After these changes are made, save changes and reload the 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*.
- * Pour finir reconnectez-vous au serveur depuis pgAdmin (cliquez avec le bouton droit sur le serveur puis sÃ©lectionnez *Connect*).
-
+ * This is done by right-clicking on the server (``PostgreSQL 8.4 on localhost:54321``) in pgAdmin, selecting to *Disconnect*. 
+ * Clicking *Shutdown* in the OpenGeo Dashboard, then clicking *Start*. 
+ * Finally reconnecting to the server in pgAdmin (right-click on the server and select *Connect*).
+ 
+ 
+ 
