Bienvenue sur PostGIS.fr

Bienvenue sur PostGIS.fr , le site de la communauté des utilisateurs francophones de PostGIS.

PostGIS ajoute le support d'objets géographique à la base de données PostgreSQL. En effet, PostGIS "spatialise" le serverur PostgreSQL, ce qui permet de l'utiliser comme une base de données SIG.

Maintenu à jour, en fonction de nos disponibilités et des diverses sorties des outils que nous testons, nous vous proposons l'ensemble de nos travaux publiés en langue française.

Changeset 54


Ignore:
Timestamp:
02/10/2011 16:51:08 (12 years ago)
Author:
djay
Message:

Partie jointure spatiales avancée traduite \!

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/workshop-foss4g/joins_advanced.rst

    r50 r54  
    11.. _joins_advanced: 
    22 
    3 Section 19: Plus de jointures spatiales 
     3Partie 19 : Plus de jointures spatiales 
    44======================================= 
    55 
    6 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. 
     6Dans la partie précédente nous avons vu les fonctions :command:`ST_Centroid(geometry)` et :command:`ST_Union([geometry])` ainsi que quelques exemples simples. Dans cette partie nous réaliseront des choses plus éllaborées. 
    77 
    88.. _creatingtractstable: 
    99 
    10 Creating a Census Tracts Table 
    11 ------------------------------ 
    12  
    13 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!  
    14  
    15 In this section we will 
    16  
    17  * Load the ``nyc_census_sociodata.sql`` table 
    18  * Create a spatial table for census tracts  
    19  * Join the attribute data to the spatial data 
    20  * Carry out some analysis using our new data 
    21   
    22 Loading nyc_census_sociodata.sql 
    23 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    24  
    25  #. Open the SQL query window in PgAdmin 
    26  #. Select **File->Open** from the menu and browse to the ``nyc_census_sociodata.sql`` file 
    27  #. Press the "Run Query" button 
    28  #. If you press the "Refresh" button in PgAdmin, the list of tables should now include at ``nyc_census_sociodata`` table 
    29   
    30 Creating a Census Tracts Table 
    31 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    32   
    33 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``. 
     10Création de la table de traçage des recensements 
     11------------------------------------------------ 
     12 
     13Dans le répertoire ``\data\`` des travaux pratiques, il y a un fichier qui contient des données attributaires, mais pas de géométries, ce fichier est nommé ``nyc_census_sociodata.sql``. La table contient des données sociaux-économiques interressantes à propos de New York : revenus financiers, éducation .... Il y a juste un problÚme, les données sont rassemblé en "trace de recensement" et nous n'avons pas de données spatiales associées ! 
     14 
     15Dans cette partie nous allons 
     16 
     17 * Charger la table ``nyc_census_sociodata.sql`` 
     18 * Créer une table spatiale pour les traces de recensement 
     19 * Joindre les données attributaires à nos données spatiales 
     20 * Réaliser certaines analises sur nos nouvelles données 
     21  
     22Chargement du fichier nyc_census_sociodata.sql 
     23~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     24 
     25 #. Ouvrez la fenêtre de requêtage SQL depuis PgAdmin 
     26 #. Selectionnez **File->Open** depuis le menu et naviguez jusqu'au fichier ``nyc_census_sociodata.sql`` 
     27 #. Cliquez sur le bouton "Run Query" 
     28 #. Si vous cliquez sur le bouton "Refresh" depuis PgAdmin, la liste des table devrait contenir votre nouvelle table ``nyc_census_sociodata`` 
     29  
     30Création de la table traces de recensement 
     31~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     32  
     33Comme nous l'avons dans la partie précédente, nous pouvons construire des géométries de niveau suppérieur en utilisant nos blocks de base en utilisant une partie de la clef ``blkid``. Afin de calculer les traces de recensement, nous avons besoin de regrouper les blocks en uitlisant les 11 premiers caractÚres de la colonne ``blkid``.  
    3434  
    3535  :: 
     
    4343    000    = Census Block 
    4444 
    45 Create the new table using the :command:`ST_Union` aggregate: 
     45Création de la nouvelle table en utilisant la fonction d'agrégation :command:`ST_Union` : 
    4646  
    4747.. code-block:: sql 
    4848    
    49    -- Make the tracts table 
     49   -- Création de la table 
    5050   CREATE TABLE nyc_census_tract_geoms AS 
    5151   SELECT  
     
    5555   GROUP BY tractid; 
    5656      
    57    -- Index the tractid 
     57   -- Indexation du champ tractid 
    5858   CREATE INDEX nyc_census_tract_geoms_tractid_idx ON nyc_census_tract_geoms (tractid); 
    5959      
    60    -- Update the geometry_columns table 
     60   -- Mise à jour de la table geometry_columns 
    6161   SELECT Populate_Geometry_Columns(); 
    6262 
    63 Join the Attributes to the Spatial Data 
    64 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    65  
    66 Join the table of tract geometries to the table of tract attributes with a standard attribute join 
    67    
    68 .. code-block:: sql 
    69    
    70   -- Make the tracts table 
     63Regrouper les données attributaires et spatiales 
     64~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     65 
     66L'objectif est ici de regrouper les données spatiales que nous avons créé avec les donées attributaires que nous avions chargé initialement. 
     67   
     68.. code-block:: sql 
     69   
     70  -- Création de la table 
    7171  CREATE TABLE nyc_census_tracts AS 
    7272  SELECT  
     
    7777  ON g.tractid = a.tractid; 
    7878     
    79   -- Index the geometries 
     79  -- Indexation des géométries 
    8080  CREATE INDEX nyc_census_tract_gidx ON nyc_census_tracts USING GIST (the_geom); 
    8181     
    82   -- Update the geometry_columns table 
     82  -- Mise à jour de la table geometry_columns 
    8383  SELECT Populate_Geometry_Columns(); 
    8484 
    8585.. _interestingquestion: 
    8686 
    87 Answer an Interesting Question 
    88 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     87Répondre à une question interressante 
     88~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    8989      
    90 Answer an interesting question! "List top 10 New York neighborhoods ordered by the proportion of people who have graduate degrees." 
     90Répondre à une question interressante ! "Lister les 10 meilleurs quartiers ordonnées par la proportion de personne ayant acquis un diplome".  
    9191   
    9292.. code-block:: sql 
     
    103103  LIMIT 10; 
    104104 
    105 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. 
     105Nous sommons les statistiques qui nous interressent, nous les divisons ensuite à la fin. Afin d'aviter l'erreur de non-division par zero, nous ne prennons pas en compte les quartiers qui n'ont aucune personne ayant obtenu un diplome. 
    106106 
    107107:: 
     
    123123.. _polypolyjoins: 
    124124 
    125 Polygon/Polygon Joins 
    126 --------------------- 
    127  
    128 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**. 
     125Polygones/Jointures de polygones 
     126--------------------------------- 
     127 
     128Dans notre requête interressante (dans :ref:`interestingquestion`) nous avons utilisé la fonction :command:`ST_Intersects(geometry_a, geometry_b)` pour déterminer quelle entité polygonale à inclure dans chaque groupe de quartier. Ce qui nous conduit à la question : que ce passe-t-il si une entité tombe ntre deux quartier ? Il intersectera chacun d'entre eux et ainsi sera inclu dans **chacun** des résultats.  
    129129 
    130130.. image:: ./screenshots/centroid_neighborhood.png 
    131131 
    132 To avoid this kind of double counting there are two methods: 
    133  
    134  * The simple method is to ensure that each tract only falls in **one** summary area (using :command:`ST_Centroid(geometry)`) 
    135  * The complex method is to divide crossing tracts at the borders (using :command:`ST_Intersection(geometry,geometry)`) 
    136   
    137 Here is an example of using the simple method to avoid double counting in our graduate education query: 
     132Pour éviter ce cas de double comptage il existe trois méthodes : 
     133 
     134 * La méthode simple consiste a s'assurer que chaque entité ne se retrouve que dans **un** seul groupe géograhique (en utilisant :command:`ST_Centroid(geometry)`) 
     135 * La méthode complexe consiste à disviser les parties qui se croisent en utilisant les bordures (en utilisant :command:`ST_Intersection(geometry,geometry)`) 
     136  
     137Voici un exemple d'utilisation de la méthode simple pour éviter le double comptage dans notre requête précédente : 
    138138 
    139139.. code-block:: sql 
     
    150150  LIMIT 10; 
    151151   
    152 Note that the query takes longer to run now, because the :command:`ST_Centroid` function  has to be run on every census tract. 
     152Remarquez que la requête prend plus de temps à s'exécuter, puisque la fonction :command:`ST_Centroid` doit être effectuée pour chaque entité. 
    153153 
    154154:: 
     
    167167           28.4 | Cobble Hill       | Brooklyn 
    168168   
    169 Avoiding double counting changes the results!  
     169Éviter le double comptage change le résultat ! 
    170170 
    171171 
    172172.. _largeradiusjoins: 
    173173 
    174 Large Radius Distance Joins 
    175 --------------------------- 
    176  
    177 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?" 
    178  
    179 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: 
     174Jointures utilisant un large rayon de distance 
     175---------------------------------------------- 
     176 
     177Une requête qu'il est sympat de demander est : "Comment les temps de permutation des gens proches (dans un rayon de 500 metres ) des stations de métros diffÚrent de ceuxqui en vive loin ? " 
     178 
     179Néanmoins, la question rencontre les même problÚme de double comptage : plusieurs personnes seront dans un rayon de 500 metres de plusieurs stations de métros différentes. Coparons la population de New York : 
    180180 
    181181.. code-block:: sql 
     
    188188  8008278 
    189189   
    190 With the population of the people in New York within 500 meters of a subway station: 
     190Avec la population des gens de New York dans un rayon de 500 metres d'une station de métros : 
    191191 
    192192.. code-block:: sql 
     
    201201  10556898 
    202202 
    203 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. 
     203Il y a plus de personnes proches du métro qu'il y a de peronnes ! Clairement, notre requête SQL simple rencontre un gros problÚme de double comptage. Vous pouvez voir le problÚme en regardant l'image des zones tampons créées pour les stations. 
    204204 
    205205.. image:: ./screenshots/subways_buffered.png 
    206206 
    207 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: 
     207La solution est de s'assurer que nous avons seulement des blocks distincts avant de les les regrouper. Nou spouvons réaliser cela en cassant notre requête en sous-requêtes qui récupÚre les blocks distincts, regroupé ensuite pour retrouner notre réponse : 
    208208 
    209209.. code-block:: sql 
     
    221221  4953599 
    222222 
    223 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. 
    224  
    225  
    226  
     223C'est mieux ! Donc un peu plus de 50 % de la population de New York vit à proximité (50m environ 5 à 7 minutes de marche) du métro. 
     224 
     225 
     226 
Note: See TracChangeset for help on using the changeset viewer.