4.6.2.4. Quelle est la longueur des routes totalement contenues dans chaque municipalités ?


Ceci est un exemple de "jointure spatiale', parce que nous utilisons les données de deux tables (en faisant une jointure) mais en utilisant une condition d'interaction spatiale ("contenue") comme condition de jointure au lieu d'utiliser l'approche relationnelle habituelle de jointure sur une clef commune :

postgis=# SELECT m.name, sum(length(r.the_geom))/1000 as roads_km
         FROM bc_roads AS r,bc_municipality AS m
         WHERE r.the_geom && m.the_geom
               AND contains(m.the_geom,r.the_geom)
         GROUP BY m.name
         ORDER BY roads_km;
           name             |    roads_km
----------------------------+------------------
SURREY                      | 1539.47553551242
VANCOUVER                   | 1450.33093486576
LANGLEY DISTRICT            | 833.793392535662
BURNABY                     | 773.769091404338
PRINCE GEORGE               | 694.37554369147
...

Cette requête dure un moment, parce que chaque route de la table est disponible dans le résultat final (environ 250K routes pour notre table d'exemple). Pour des couvertures plus petites (quelques milliers ou centaines d'enregistrements) la réponse peut être très rapide.