- Timestamp:
- 27/09/2011 16:44:49 (13 years ago)
- Location:
- trunk/workshop-foss4g
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/workshop-foss4g/geometries_exercises.rst
r37 r47 207 207 .. note:: 208 208 209 La clause ``ORDER BY length DESC`` ordonne le résultat spar 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.209 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. 210 210 211 211 -
trunk/workshop-foss4g/indexing.rst
r40 r47 4 4 ================================= 5 5 6 Rapellez-vous que l es indexes spatiaux sont l'une des trois fonctionnalités clés d'une base de données spatiales. Les indexes rendent possible l'utilisation de grandes quantités de données dans une base. Sans indexation, chaque recherche d'une entité nécessitera d'accéder séquentiellement à tout les enregistrement de la base de données. L'indexation rend plus rapideles recherche en organisant les données dans des arbres de recherche qui peuvent être parcouru efficacement pour retrouver une entité particuliÚre.6 Rapellez-vous que l'indexation spatiale est l'une des trois fonctionnalités clés d'une base de données spatiales. Les indexes permettent l'utilisation de grandes quantités de données dans une base. Sans l'indexation, chaque recherche d'entité nécessitera d'accéder séquentiellement à tout les enregistrements de la base de données. L'indexation accélÚres les recherche en organisant les données dans des arbres de recherche qui peuvent être parcouru efficacement pour retrouver une entité particuliÚre. 7 7 8 L es indexes spatiaux sont l'un des plus grands atouts de PostGIS. Dans les exemples précédents, nous construissions nos jointures spatiales en comparant la totalité des tables. Ceci peut s'averrer trÚs coûteux : réaliser la jointure de deux tables de 10000 enregistrements sans index nécessitera de comparer 100000000 valeurs, avec les indexes les comparaisons requises seront 20000.8 L'indexation spatiale l'un des plus grands atouts de PostGIS. Dans les exemples précédents, nous avons construit nos jointures spatiales en comparant la totalité des tables. Ceci peut parfois s'averrer trÚs coûteux : Réaliser la jointure de deux tables de 10000 enregistrements sans indexation nécessitera de comparer 100000000 valeurs, les comparaisons requises ne seront plus que 20000 avec l'indexation. 9 9 10 10 Lorsque nous avons chargé la table ``nyc_census_blocks``, l'outils pgShapeLoader crée automatiquement un indexe spatial appelé ``nyc_census_blocks_the_geom_gist``. … … 12 12 Pour démontrer combien il est important d'indexer ses données pour la performance des requêtes, essayons de requêter notre table ``nyc_census_blocks`` **sans** utiliser notre indexe. 13 13 14 La premiÚre étap t consiste asupprimer l'index.14 La premiÚre étape consiste à supprimer l'index. 15 15 16 16 .. code-block:: sql … … 22 22 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>`_. 23 23 24 Maintenant, regardons le temps d'exécution dans le coin en bas à droite de l'interface de requêtage de pgAdmin etlançons la commande suivante. Notre requête recherche les blocs de la rue Broad.24 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. 25 25 26 26 .. code-block:: sql … … 40 40 La table ``nyc_census_blocks`` est trÚs petite (seulement quelque millier d'enregistrements) donc même sans l'index, la requête prends **55 ms** sur l'ordinateur de test. 41 41 42 Maintenant remettons en place l'index eet lançons de nouveau la requête.42 Maintenant remettons en place l'index et lançons de nouveau la requête. 43 43 44 44 .. code-block:: sql … … 46 46 CREATE INDEX nyc_census_blocks_the_geom_gist ON nyc_census_blocks USING GIST (the_geom); 47 47 48 .. note:: l'utilisation de la clause ``USING GIST`` spécifie à PostgreSQL de créer une structure (GIST) pour cet index e. 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``.48 .. 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``. 49 49 50 50 Sur l'rdinateur de test le temps d'exécution se réduit à **9 ms**. Plus votre table est grande, plus la différence de temps d'exécution pour une requête utilisant les indexes augmentera. … … 53 53 ----------------------------------------- 54 54 55 Les indexes des base de données standards crée un arbre hierarchique basé sur les valeurs de la colonneà indexer. Les indexes spatiaux sont un peu différents - ils ne sont pas capables d'indexer des entités géométriques elles-même mais indexe leur étendues.55 Les indexes des base de données standards créent des arbres hierarchiques basés sur les valeurs des colonnes à indexer. Les indexes spatiaux sont un peu différents - ils ne sont pas capables d'indexer des entités géométriques elles-même mais indexe leur étendues. 56 56 57 57 .. image:: ./indexing/bbox.png … … 59 59 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. 60 60 61 La maniÚre dont les bases de données répondent de maniÚre efficace s à la questions "quelle ligne intersectent l'étoile jaune ?" correspond à d'abort répondre à question ; "quelle étendue intersecte l'étendue jaune" en utilisant les indexes (ce qui est trÚs rapide) puis réalise le calcul exacte de "quelles lignes intersectent l'étoile jaune" **seulement en utilisant les entités retourné par le premier test**.61 La maniÚre dont les bases de données répondent de maniÚre efficace à la question "Quelles lignes intersectent l'étoile jaune ?" correspond premiÚrement à répondre à la question "Quelle étendue intersecte l'étendue jaune" en utilisant les indexes (ce qui est trÚs rapide) puis à calculer le résultat exact de la question "Quelles lignes intersectent l'étoile jaune ?" **seulement en utilisant les entités retourné par le premier test**. 62 62 63 63 Pour de grandes tables, il y a un systÚme en "deux étapes" d'évaluation en utilisant dans un premier temps l'approximation à l'aide d'indexes, puis en réalisant le test exact sur une quantité bien moins importante de données ce qui réduit drastiquement le temps de calcul nécessaire à cette deuxiÚme étape. … … 74 74 Pour utiliser une recherche par étendue utilisant les indexes (et pas de filtres), vous pouvez utiliser l'opérateur :command:`&&`. Pour les géométries, l'opérateur :command:`&&` signifie "l'étendue recouvre ou touche" de la même maniÚre que l'opérateur :command:`=` sur des entiers signifie que les valeurs sont égales. 75 75 76 Essayons de comparer une requête avec seulement un indexe pour la population du quartier 'West Village'. En utilisant la commande :command:`&&` notre requête ressemble à ce qui suit:76 Essayons de comparer une requête avec seulement un indexe pour la population du quartier 'West Village'. En utilisant la commande :command:`&&` notre requête ressemble à cela : 77 77 78 78 .. code-block:: sql … … 102 102 27141 103 103 104 Un plus faible nombre de résultats ! La premiÚre requête nous renvoit tout les blo qcs qui intersectent l'étendue du quartier, la seconde nous renvoit seulement les blocs qui intersectent le quartier lui-même.104 Un plus faible nombre de résultats ! La premiÚre requête nous renvoit tout les blocs qui intersectent l'étendue du quartier, la seconde nous renvoit seulement les blocs qui intersectent le quartier lui-même. 105 105 106 106 Analyse … … 126 126 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". 127 127 128 Activée par défaut, le processus autovacuum à la fois nettoit (récupÚre l'espace libre) et analyse (met à jour les statistiques) de vos tables suivant un interval donnée déterminé par l'activité des bases de données. Bien que cela soit pourles 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.128 Activée par défaut, le processus autovacuum nettoie (récupÚre l'espace libre) et analyse (met à jour les statistiques) vos tables suivant un interval donné déterminé par l'activité des bases de données. Bien que cela fonctionne avec les bases de données hautement transactionnelles, il n'est pas supportable de devoir attendre que le processus autovacuum se lance lors de la mise à jour ou la suppression massive de données. Dans ce cas, il faut lancer la commande ``VACUUM`` manuellement. 129 129 130 Le nettoyage et l'analyse de la base de données peut être réalisé séparément si nécessaire. Utiliser la commande ``VACUUM`` ne mettra pas à jour les statistiques alors que lancer la commande ``ANALYZE`` ne récupÚrera pas l'espace libre des lignes d'une table. Chacune de ces commandes peut être lancé sur l'intégralité de la base de données, sur une table ou sur une seule colonne.130 Le nettoyage et l'analyse de la base de données peut être réalisé séparément si nécessaire. Utiliser la commande ``VACUUM`` ne mettra pas à jour les statistiques alors que lancer la commande ``ANALYZE`` ne récupÚrera pas l'espace libre des lignes d'une table. Chacune de ces commandes peut être lancée sur l'intégralité de la base de données, sur une table ou sur une seule colonne. 131 131 132 132 .. code-block:: sql -
trunk/workshop-foss4g/joins.rst
r40 r47 6 6 Les jointures spatiales sont la cerise sur le gâteau des base de données spatiales. Elles vous pemettent de combiner les informations de plusieures tables en utilisant une relation spatiale comme clause de jointure. La plupart des "analyses SIG standards" peuvent être exprimées à l'aide de jointure spatiales. 7 7 8 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 avon utilisé ce résultat dans nos autres requêtes pour répondre aux questions comme "dans quel quartier se situe la station 'Broad St' ?"8 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' ?" 9 9 10 10 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 : … … 138 138 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. 139 139 140 Donc pour trouver le train A, nous allons demander toute les lignes ayant pour ``routes`` la valeur 'A'. Nous pouvons faire cela de différentes maniÚres, mais nous utiliserons aujourd'hui le fait que la fonction :command:`strpos(routes,'A')` retourne un entier différent de 0 si la lettre 'A' se trouve dans la valeur du champs route.140 Donc pour trouver le train A, nous allons demander toutes les lignes ayant pour ``routes`` la valeur 'A'. Nous pouvons faire cela de différentes maniÚres, mais nous utiliserons aujourd'hui le fait que la fonction :command:`strpos(routes,'A')` retourne un entier différent de 0 si la lettre 'A' se trouve dans la valeur du champs route. 141 141 142 142 .. code-block:: sql … … 239 239 240 240 241 Comme précédemment, les jointure créent une table virtuelle de toutes les combinaisons possible disponibles à l'aide des contraintes de type ``JOIN ON`, ces lignes sont ensuite utilisées dans le regroupement ``GROUP``. La magie spatiale tiend dans l'utilisation de la fonction ``ST_DWithin`` qui s'assure que les blocs sont suffisamment proches des lignes de métros inclues dans le calcul.241 Comme précédemment, les jointures créent une table virtuelle de toutes les combinaisons possibles et disponibles à l'aide des contraintes de type ``JOIN ON`. Ces lignes sont ensuite utilisées dans le regroupement ``GROUP``. La magie spatiale tiend dans l'utilisation de la fonction ``ST_DWithin`` qui s'assure que les blocs sont suffisamment proches des lignes de métros inclues dans le calcul. 242 242 243 243 Liste de fonctions -
trunk/workshop-foss4g/joins_exercises.rst
r40 r47 4 4 ============================================= 5 5 6 Voici un petit rappel de certaines des fonctions vues précédemment. Astuce: elles pourraient êtreutiles pour les exercices !6 Voici un petit rappel de certaines des fonctions vues précédemment. Elles seront utiles pour les exercices ! 7 7 8 8 * :command:`sum(expression)` agrégation retournant la somme d'un ensemble … … 19 19 * :command:`ST_Within(geometry A, geometry B)` retourne vrai si A est hors de B 20 20 21 Souvenez-vous des tables à votre disposition :21 Souvenez-vous aussi des tables à votre disposition : 22 22 23 23 * ``nyc_census_blocks`` … … 56 56 Spring St | 6 57 57 58 * **"Quels sont les quartiers desservis pas le train numéro 6 ?"** (Astuce: la colonne s ``routes`` de la table ``nyc_subway_stations`` on les valeurs suivante'B,D,6,V' et 'C,6')58 * **"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') 59 59 60 60 .. code-block:: sql -
trunk/workshop-foss4g/projection.rst
r27 r47 4 4 =================================== 5 5 6 La Terre n'est pas pl âte et il n'y a pas de moyen simple de la poser à plat sur une carte en papier (ou l'écran d'un ordinateur), donc les gens en sont arriver à fournir des solutions ingénieuses, chacunes avec des bons et des mauvais cotés. Certaines projections préservent les aires, donc tout les objets ont des tailles relatives aux autres, d'autre projections conservent les angles (conformes) comme la projection Mercator, certaines projections tentent de minimiser la distorsion des différents paramÚtres. Le point commun entre toutes les projections est qu'elles transforment le monde (sphérique) en un systÚme plat de coordonnées cartésiennes, et le choix de la projection dépend de ce que vous souhaitez faire avec vos données.6 La Terre n'est pas plate et il n'y a pas de moyen simple de la poser à plat sur une carte en papier (ou l'écran d'un ordinateur). Certaines projections préservent les aires, donc tout les objets ont des tailles relatives aux autres, d'autre projections conservent les angles (conformes) comme la projection Mercator. Certaines projections tentent de minimiser la distorsion des différents paramÚtres. Le point commun entre toutes les projections est qu'elles transforment le monde (sphérique) en un systÚme plat de coordonnées cartésiennes, et le choix de la projection dépend de ce que vous souhaitez faire avec vos données. 7 7 8 Nous avons déjà recontrer des projections, lorsque nous avons charger les données` de la ville de Ney York <loading_data>`.Rappelez-vous qu'elles utilisaient le SRID 26918. Parfois, malgrÚs tout, vous aurez besoin de transformer et de reprojeter vos données d'un systÚme de projection à l'autre, en utilisant la fonction :command:`ST_Transform(geometry, srid)`. Pour manipuler les identifiant de systÚmes de références spatiales à partir d'une géométrie, PostGIS fournit les fonctions :command:`ST_SRID(geometry)` et :command:`ST_SetSRID(geometry, srid)`.8 Nous avons déjà recontrer des projections, lorsque nous avons charger les données de la ville de Ney York .Rappelez-vous qu'elles utilisaient le SRID 26918. Parfois, vous aurez malgré tout besoin de transformer et de reprojeter vos données d'un systÚme de projection à un autre, en utilisant la fonction :command:`ST_Transform(geometry, srid)`. Pour manipuler les identifiant de systÚmes de références spatiales à partir d'une géométrie, PostGIS fournit les fonctions :command:`ST_SRID(geometry)` et :command:`ST_SetSRID(geometry, srid)`. 9 9 10 10 Nous pouvons vérifier le SRID de nos données avec la commande :command:`ST_SRID` : … … 18 18 26918 19 19 20 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 fromat :term:`WKT` dans la colonne ``srtext`` et il y a aussu une seconde définition correspondant au 20 Et quelle est la définition du "26918" ? Comme nous l'avons vu lors de la partie ":ref:`chargement des données`", la définition se trouve dans la table ``spatial_ref_sys``. En fait, **deux** définitions sont présentes. La définition au format :term:`WKT` dans la colonne ``srtext`` 21 21 22 .. code-block:: sql 22 23 … … 33 34 +proj=utm +zone=18 +ellps=GRS80 +datum=NAD83 +units=m +no_defs 34 35 35 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 les autres alors que la colonne ``proj4text`` est principalement utiliséeen interne.36 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. 36 37 37 38 Comparaison de données 38 39 ---------------------- 39 40 40 Combiné , 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édans le même systÚme, ayant le même SRID.41 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. 41 42 42 Si vous utilisé des géométries avec différents SRID vous obtiendrez une erreur du genre:43 Si vous utilisé des géométries avec différents SRID vous obtiendrez une erreur comme celle-ci : 43 44 44 45 .. code-block:: sql … … 57 58 .. note:: 58 59 59 Faites attention de pas utiliser la transformation à la volée à l'aide de :command:`ST_Transform` tr pop souvent. Les indexes spatiaux sont construits en utilisant le SRID inclu dans les géométries. Si la comparaison est faite avec un SRID différent, les indexes spatiaux ne seront pas (la plupart du temps) utilisés. Il est reconnu qu'il vaut mieux choisir **un SRID** pour toutes les tables de votre base de données. N'utilisez la fonction de tranformation que lorsque vous lisez ou écrivez les données depuis une applicationsexterne.60 Faites attention de pas utiliser la transformation à la volée à l'aide de :command:`ST_Transform` trop souvent. Les indexes spatiaux sont construits en utilisant le SRID inclu dans les géométries. Si la comparaison est faite avec un SRID différent, les indexes spatiaux ne seront pas (la plupart du temps) utilisés. Il est reconnu qu'il vaut mieux choisir **un SRID** pour toutes les tables de votre base de données. N'utilisez la fonction de tranformation que lorsque vous lisez ou écrivez les données depuis une application externe. 60 61 61 62 … … 63 64 ----------------------- 64 65 65 Si vous retournez à la définition au format proj4 du SRID 26918, vous pouvez voir que notre projectioin actuelle est de type UTM zone 18 (Universal Transvers Mercator), avec comme unité de mesure le mÚtre.66 Si vous retournez à la définition au format proj4 du SRID 26918, vous pouvez voir que notre projectioin actuelle est de type UTM zone 18 (Universal Transvers Mercator), avec le mÚtre comme unité de mesure. 66 67 67 68 :: … … 69 70 +proj=utm +zone=18 +ellps=GRS80 +datum=NAD83 +units=m +no_defs 70 71 71 Essayons de convertir certaines données de notre systÚme de projection dans un systÚme de coordonnées géographiques , aussiconnu comme "longitude/latitude".72 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". 72 73 73 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é ce ci, nous devons ensuite trouver le SRID dans le lequel nous souhaitons re-projeter. En d'autre terme, quel est le SRID des coordonnées géographiques ?74 Pour convertir les données d'un SRID à l'autre, nous devons dans un premier temps vérifier que nos géométries ont un SRID valide. une fois que nous avons vérifié cela, nous devons ensuite trouver le SRID dans le lequel nous souhaitons re-projeter. En d'autre terme, quel est le SRID des coordonnées géographiques ? 74 75 75 76 Le SRID le plus connu pour les coordonnées géographiques est le 4326, qui correspond au couple "longitude/latitude sur la sphéroïde WGS84". Vous pouvez voir sa définition sur le site spatialreference.org. … … 105 106 POINT(-74.0106714688735 40.7071048155841) 106 107 107 Si vous chargez les données ou cré éez une nouvelle géométrie sans spécifier unSRID, la valeur du SRID prendra alors la valeur -1. Rapellez-vous que dans les :ref:`geometries`, lorsque nous avons créé nos tables géométriques nous n'avions pas spécifié un SRID. Si nous interrogeons la base, nous devons nous attendre à ce que toutes les tables préfixées par ``nyc_`` aient le SRID 26918, alors que la table ``geometries`` aura la valeur -1 par défaut.108 Si vous chargez les données ou créez une nouvelle géométrie sans spécifier de SRID, la valeur du SRID prendra alors la valeur -1. Rapellez-vous que dans les :ref:`geometries`, lorsque nous avons créé nos tables géométriques nous n'avions pas spécifié un SRID. Si nous interrogeons la base, nous devons nous attendre à ce que toutes les tables préfixées par ``nyc_`` aient le SRID 26918, alors que la table ``geometries`` aura la valeur -1 par défaut. 108 109 109 110 Pour visualiser la table d'assignation des SRID, interroger la table ``geometry_columns`` de la base de données. … … 125 126 126 127 127 N eanmoins, si vous connaissez quel est le SRID de vos données, vous pouvez l'affecter par la suite,en utilisant la fonction :command:`ST_SetSRID` sur les géométries. Ensuite vous pourrez les tranformer dans d'autres systÚmes de projections.128 Néanmoins, si vous connaissez le SRID de vos données, vous pouvez l'affecter par la suite en utilisant la fonction :command:`ST_SetSRID` sur les géométries. Ensuite vous pourrez les tranformer dans d'autres systÚmes de projections. 128 129 129 130 .. code-block:: sql -
trunk/workshop-foss4g/projection_exercises.rst
r30 r47 1 1 .. _projection_exercises: 2 2 3 Partie 16 : Exercices de projection4 =================================== 3 Partie 16 : Exercices sur les projections 4 ========================================= 5 5 6 Voici un rappel de certaines fonctions que nous avons vu. Astuce : elles devraient êtreutiles pour les exercices !6 Voici un rappel de certaines fonctions que nous avons vu. Elles seront utiles pour les exercices ! 7 7 8 * :command:`sum(expression)` agrégation qui retourn la somme d'un esemble de valeurs8 * :command:`sum(expression)` agrégation qui retourne la somme d'un ensemble de valeurs 9 9 * :command:`ST_Length(linestring)` retourne la longueur d'une ligne 10 10 * :command:`ST_SRID(geometry, srid)` retourne le SRID d'une géométrie 11 * :command:`ST_Transform(geometry, srid)` re -projette des géométries dans un autre systÚme de références spatiales11 * :command:`ST_Transform(geometry, srid)` reprojette des géométries dans un autre systÚme de références spatiales 12 12 * :command:`ST_GeomFromText(text)` retourne un objet ``geometry`` 13 13 * :command:`ST_AsText(geometry)` retourne le WKT (``text``) … … 19 19 * http://prj2epsg.org 20 20 21 Et les tables qui sontdisponibles :21 Et les tables disponibles : 22 22 23 23 * ``nyc_census_blocks`` … … 100 100 .. note:: 101 101 102 La différence entre les mesure en UTM 18 et en the Stateplane Long Island est de (10421993 - 10418904)/10418904, soit 0.02%. Calculé sur la sphéroïde en utilissant en :ref:`geography` le total des longueurs des route est 10421999, qui est proche de la valeur dans l'autre systÚme de projection (Stateplane Long Island) est précisément calibré pour une petite zone géographique (la ville de New York) alors que le systÚme UTM 18 doit fournir un résultat raisonable pour une zone régionaleplus large.102 La différence entre les mesure en UTM 18 et en Stateplane Long Island est de (10421993 - 10418904)/10418904, soit 0.02%. Calculé sur la sphéroïde en utilissant en :ref:`geography`, le total des longueurs des route est 10421999, ce qui est proche de la valeur dans l'autre systÚme de projection (Stateplane Long Island). Ce dernier est précisément calibré pour une petite zone géographique (la ville de New York) alors que le systÚme UTM 18 doit fournir un résultat raisonable pour une zone régionale beaucoup plus large. 103 103 104 104 * **"Quelle est la représentation KML du point de la station de métris 'Broad St' ?"** … … 114 114 <Point><coordinates>-74.010671468873468,40.707104815584088</coordinates></Point> 115 115 116 Hé ! les coordonnées sont géographiques bien que nous n'ayons pas fait app Úle à la fonction :command:`ST_Transform`, pourquoi ? Parce que le standard KML spécifit que toutes les coordonnées *doivent* être engéographiques (en fait, dans le systÚme EPSG:4326), donc la fonction :command:`ST_AsKML` réalise la transformation automatiquement.116 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. -
trunk/workshop-foss4g/spatial_relationships.rst
r38 r47 4 4 ================================= 5 5 6 Jusqu'à maintenantnous 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.6 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. 7 7 8 8 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*. … … 10 10 Pour les questions comme "Quel est le plus proche garage à vélo prêt du parc ?" ou "Ou est l'intersection du métro avec telle rue ?", nous devrons comparer les géométries représentant les garage à vélo, les rues et les lignes de métro. 11 11 12 Le standard de l'OGC définit l'ensemble suivant de fonctionspour comparer les géométries.12 Le standard de l'OGC définit l'ensemble de fonctions suivant pour comparer les géométries. 13 13 14 14 ST_Equals … … 71 71 :align: center 72 72 73 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 est à l'intérieur des deux géométries.73 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. 74 74 75 75 .. figure:: ./spatial_relationships/st_overlaps.png … … 180 180 `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). 181 181 182 `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 contenu l'une dans l'autre.182 `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. 183 183 184 184 `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. -
trunk/workshop-foss4g/spatial_relationships_exercises.rst
r39 r47 91 91 92 92 93 * **"Approximativement combien de personnes vivent dans (ou dans une zone de 50 met ers autour) Atlantic Commons ?"**93 * **"Approximativement combien de personnes vivent dans (ou dans une zone de 50 metres autour d') Atlantic Commons ?"** 94 94 95 95 .. code-block:: sql
Note: See TracChangeset
for help on using the changeset viewer.