Chapter 9. Topologie

Table of Contents

Les types et fonctions topologiques de PostGIS sont utilisés pour gérer les objets topologiques tels que les faces, les arêtes et les des noeuds.

La présentation de Sandro Santilli à la conférence PostGIS Day Paris 2011 donne un bon aperçu de PostGIS Topology et de son évolution Topology with PostGIS 2.0 slide deck.

Vincent Picavet fournit un bon résumé et une vue d'ensemble de ce qu'est la topologie, comment elle est utilisée, et divers outils FOSS4G qui la supportent dans PostGIS Topology PGConf EU 2012.

Un exemple de base de données SIG topologique est la base de données US Census Topologically Integrated Geographic Encoding and Referencing System (TIGER). Si vous souhaitez expérimenter la topologie PostGIS et avez besoin de quelques données, consultez Topology_Load_Tiger.

Le module sur la topologie de PostGIS existe dans les versions précédentes de PostGIS mais n'a jamais fait partie de la documentation officielle de PostGIS. Dans la version 2.0.0 de PostGIS, un grand nettoyage est en cours pour en éliminer l'utilisation de toutes les fonctions obsolètes, résoudre les problèmes d'utilisabilité connus, mieux documenter les caractéristiques et les fonctions, ajouter de nouvelles fonctions, et l'améliorer afin de mieux se conformer aux normes SQL-MM.

Les détails sur ce projet peuvent être trouvés à PostGIS Topology Wiki

Toutes les fonctions et toutes les tables associées à ce module sont installées dans un schéma appelé topology.

Les fonctions qui sont définies dans le standard SQL/MM sont préfixées par ST_ et les fonctions spécifiques à PostGIS ne sont pas préfixées.

Le support topologique est compilé par défaut à partir de PostGIS 2.0, et peut être désactivé en spécifiant l'option de configuration --without-topology au moment de la construction, comme décrit dans Chapter 2, Installation de PostGIS

9.1. Les types associés à "Topology"

Abstract

Cette section liste les types de données de PostgreSQL installés par "PostGIS Topology". Notez que nous décrivons leurs comportements de transtypage, ce qui est très important en particulièrement lorsque l'on définit ses propres fonctions.

  • getfaceedges_returntype — Type composite composé d'un numéro de séquence et d'un numéro d'arête.
  • TopoGeometry — Un type composite représentant une géométrie topologiquement définie.
  • validatetopology_returntype — Un type composite composé d'un message d'erreur et de id1 et id2 pour indiquer l'emplacement de l'erreur. Il s'agit du type de retour pour ValidateTopology.

9.2. Domaines de topologie

Abstract

Cette section énumère les domaines PostgreSQL installés par PostGIS Topology. Les domaines peuvent être utilisés comme des types d'objets, en tant qu'objets de retour de fonctions ou de colonnes de tables. La distinction entre un domaine et un type est qu'un domaine est un type existant avec une contrainte de vérification liée à lui.

  • TopoElement — Un tableau de 2 entiers généralement utilisé pour identifier un composant TopoGeometry.
  • TopoElementArray — Un tableau d'objets TopoElement.

9.3. Gestion de la topologie et de TopoGeometry

Abstract

Cette section énumère les fonctions topologiques permettant de créer de nouveaux schémas topologiques, de valider les topologies et de gérer les colonnes TopoGeometry

  • AddTopoGeometryColumn — Ajoute une colonne topogeometry à une table existante, enregistre cette nouvelle colonne en tant que couche dans topology.layer et renvoie le nouveau numéro d'identification de la couche.
  • RenameTopoGeometryColumn — Renomme une colonne topogeometry
  • DropTopology — À utiliser avec précaution : Abandonne un schéma de topologie et supprime sa référence dans la table topology.topology et les références aux tables de ce schéma dans la table geometry_columns.
  • RenameTopology — Renomme une topologie
  • DropTopoGeometryColumn — Supprime la colonne topogeometry de la table nommée table_name dans le schéma schema_name et désenregistre les colonnes de la table topology.layer.
  • Populate_Topology_Layer — Ajoute les entrées manquantes à la table topology.layer en lisant les métadonnées des tables topo.
  • TopologySummary — Prend un nom de topologie et fournit des totaux récapitulatifs des types d'objets dans la topologie.
  • ValidateTopology — Renvoie un ensemble d'objets validatetopology_returntype détaillant les problèmes liés à la topologie.
  • ValidateTopologyRelation — Renvoie des informations sur les enregistrements de relations topologiques non valides
  • FindTopology — Renvoie un enregistrement topologique par différents moyens.
  • FindLayer — Renvoie un enregistrement topology.layer par différents moyens.

9.4. Gestion des statistiques de topologie

Abstract

Cette section traite de la gestion des statistiques de la base de données pendant la construction de la topologie.

L'ajout d'éléments à une topologie déclenche de nombreuses requêtes dans la base de données pour trouver les arêtes existantes qui seront divisées, ajouter des nœuds et mettre à jour les arêtes qui formeront un nœud avec le nouveau réseau de lignes. C'est pourquoi il est utile que les statistiques relatives aux données contenues dans les tables de topologie soient à jour.

Les fonctions d'insertion et d'édition de topologie de PostGIS ne mettent pas automatiquement à jour les statistiques, car une mise à jour des statistiques après chaque changement dans une topologie serait exagérée, et c'est donc à l'appelant de s'en charger.

[Note]

Les statistiques mises à jour par autovacuum ne seront PAS visibles pour les transactions qui ont démarré avant la fin du processus d'autovacuum, de sorte que les transactions de longue durée devront exécuter ANALYZE elles-mêmes, pour utiliser les statistiques mises à jour.

9.5. Constructeurs de topologie

Abstract

Cette section couvre les fonctions de topologie permettant de créer de nouvelles topologies.

  • CreateTopology — Crée un nouveau schéma topologique et l'enregistre dans la table topology.topology.
  • CopyTopology — Copie une topologie (nœuds, arêtes, faces, couches et TopoGeometries) dans un nouveau schéma
  • ST_InitTopoGeo — Crée un nouveau schéma topologique et l'enregistre dans la table topology.topology.
  • ST_CreateTopoGeo — Ajoute une collection de géométries à une topologie vide donnée et renvoie un message détaillant le succès.
  • TopoGeo_AddPoint — Ajoute un point à une topologie existante en utilisant une tolérance et en divisant éventuellement une arête existante.
  • TopoGeo_AddLineString — Ajoute une ligne à une topologie existante en utilisant une tolérance et en divisant éventuellement les arêtes/faces existantes. Retourne les identifiants des arêtes.
  • TopoGeo_AddPolygon — Ajoute un polygone à une topologie existante en utilisant une tolérance et en divisant éventuellement les arêtes/faces existantes. Renvoie les identifiants des faces.

9.6. Éditeurs de topologie

Abstract

Cette section traite des fonctions topologiques permettant d'ajouter, de déplacer, de supprimer et de diviser des arêtes, des faces et des nœuds. Toutes ces fonctions sont définies par ISO SQL/MM.

  • ST_AddIsoNode — Ajoute un noeud isolé à une face dans une topologie et renvoie le nodeid du nouveau noeud. Si la face est nulle, le noeud est quand même créé.
  • ST_AddIsoEdge — Ajoute une arête isolée définie par la géométrie alinestring à une topologie reliant deux nœuds isolés existants anode et anothernode et renvoie l'identifiant de l'arête de la nouvelle arête.
  • ST_AddEdgeNewFaces — Ajoutez une nouvelle arête et, si elle divise une face, supprimez la face d'origine et remplacez-la par deux nouvelles faces.
  • ST_AddEdgeModFace — Ajoutez une nouvelle arête et, si elle divise une face, modifiez la face d'origine et ajoutez une nouvelle face.
  • ST_RemEdgeNewFace — Enlève une arête et, si l'arête enlevée séparait deux faces, supprime les faces originales et les remplace par une nouvelle face.
  • ST_RemEdgeModFace — Supprime une arête et, si l'arête sépare deux faces, supprime une face et modifie l'autre face pour couvrir l'espace des deux.
  • ST_ChangeEdgeGeom — Modifie la forme d'une arête sans affecter la structure de la topologie.
  • ST_ModEdgeSplit — Fractionner une arête en créant un nouveau nœud le long d'une arête existante, en modifiant l'arête d'origine et en ajoutant une nouvelle arête.
  • ST_ModEdgeHeal — Répare deux arêtes en supprimant le nœud qui les relie, en modifiant la première arête et en supprimant la seconde. Renvoie l'identifiant du nœud supprimé.
  • ST_NewEdgeHeal — Répare deux arêtes en supprimant le nœud qui les relie, en supprimant les deux arêtes et en les remplaçant par une arête dont la direction est la même que la première arête fournie.
  • ST_MoveIsoNode — Déplace un nœud isolé dans une topologie d'un point à un autre. Si la nouvelle géométrie apoint existe en tant que noeud, une erreur est générée. Retourne la description du déplacement.
  • ST_NewEdgesSplit — Fractionne une arête en créant un nouveau nœud le long d'une arête existante, en supprimant l'arête d'origine et en la remplaçant par deux nouvelles arêtes. Renvoie l'identifiant du nouveau nœud créé qui relie les nouvelles arêtes.
  • ST_RemoveIsoNode — Supprime un noeud isolé et renvoie la description de l'action. Si le noeud n'est pas isolé (début ou fin d'une arête), une exception est levée.
  • ST_RemoveIsoEdge — Supprime une arête isolée et renvoie la description de l'action. Si l'arête n'est pas isolée, une exception est levée.

9.7. Accès à la topologie

  • GetEdgeByPoint — Trouve l'identifiant d'une arête qui coupe un point donné.
  • GetFaceByPoint — Recherche la face intersectant un point donné.
  • GetFaceContainingPoint — Recherche la face contenant un point.
  • GetNodeByPoint — Recherche l'identifiant d'un nœud à un point donné.
  • GetTopologyID — Retourne l'identifiant d'une topologie dans la table topology.topology étant donné le nom de la topologie.
  • GetTopologySRID — Renvoie le SRID d'une topologie dans la table topology.topology en fonction du nom de la topologie.
  • GetTopologyName — Renvoie le nom d'une topologie (schéma) en fonction de l'identifiant de la topologie.
  • ST_GetFaceEdges — Renvoie un ensemble d'arêtes ordonnées qui délimitent aface.
  • ST_GetFaceGeometry — Renvoie le polygone dans la topologie donnée avec l'identifiant de face spécifié.
  • GetRingEdges — Renvoie l'ensemble ordonné des identifiants d'arêtes signés rencontrés en évoluant sur un côté d'arête donné.
  • GetNodeEdges — Renvoie un ensemble ordonné d'arêtes incidentes au nœud donné.

9.8. Traitement de la topologie

Abstract

Cette section couvre les fonctions permettant de traiter les topologies de manière non standard.

  • Polygonize — Recherche et enregistre toutes les faces définies par les arêtes de la topologie.
  • AddNode — Ajoute un nœud ponctuel à la table des nœuds dans le schéma topologique spécifié et renvoie le nodeid du nouveau nœud. Si le point existe déjà en tant que nœud, l'identifiant du nœud existant est renvoyé.
  • AddEdge — Ajoute une arête linéaire à la table des arêtes et les points de départ et d'arrivée associés à la table des nœuds de points du schéma topologique spécifié en utilisant la géométrie linéaire spécifiée et renvoie l'identifiant de l'arête nouvelle (ou existante).
  • AddFace — Enregistre une primitive de face dans une topologie et obtient son identifiant.
  • ST_Simplify — Renvoie une version géométrique "simplifiée" de la TopoGeometry donnée en utilisant l'algorithme de Douglas-Peucker.
  • RemoveUnusedPrimitives — Supprime les primitives topologiques qui ne sont pas nécessaires pour définir les objets TopoGeometry existants.

9.9. Constructeurs de TopoGeometry

Abstract

Cette section couvre les fonctions de topologie permettant de créer de nouvelles topogéométries.

  • CreateTopoGeom — Crée un nouvel objet géométrique topo à partir d'un tableau d'éléments topo - tg_type : 1 :[multi]point, 2 :[multi]ligne, 3 :[multi]poly, 4:collection
  • toTopoGeom — Convertit une géométrie simple en une géométrie topographique.
  • TopoElementArray_Agg — Renvoie un topoelementarray pour un ensemble de tableaux de type, element_id (topoelements).
  • TopoElement — Convertit une topogeometry en un topoelement.

9.10. Editeurs de TopoGeometry

Abstract

Cette section couvre les fonctions de topologie permettant d'éditer les topogeometries existantes.

  • clearTopoGeom — Efface le contenu d'une géométrie topo.
  • TopoGeom_addElement — Ajoute un élément à la définition d'une TopoGeometry.
  • TopoGeom_remElement — Supprime un élément de la définition d'une TopoGeometry.
  • TopoGeom_addTopoGeom — Ajoute un élément d'une TopoGeometry à la définition d'une autre TopoGeometry.
  • toTopoGeom — Ajoute une forme géométrique à une géométrie topographique existante.

9.11. Accès aux TopoGeometry

  • GetTopoGeomElementArray — Renvoie un topoelementarray (un tableau de topoelements) contenant les éléments topologiques et le type de la TopoGeometry donnée (éléments primitifs).
  • GetTopoGeomElements — Renvoie un ensemble d'objets topoelement contenant les éléments topologiques element_id,element_type de la TopoGeometry donnée (éléments primitifs).
  • ST_SRID — Renvoie l'identifiant de référence spatiale d'une topogeometry.

9.12. Sorties TopoGeometry

  • AsGML — Renvoie la représentation GML d'une topogeometry.
  • AsTopoJSON — Renvoie la représentation TopoJSON d'une topogeometry.

9.13. Relations spatiales de topologie

Abstract

Cette section énumère les fonctions de topologie utilisées pour vérifier les relations entre les topogeometries et les primitives topologiques

  • Equals — Retourne vrai si deux topogeometries sont composées des mêmes primitives topologiques.
  • Intersects — Retourne true si une paire de primitives des deux topogeometries s'intersectent.

9.14. Importer et exporter des topologies

Une fois que vous avez créé des topologies, et éventuellement des couches topologiques associées, vous pouvez les exporter dans un format de fichier pour les sauvegarder ou les transférer dans une autre base de données.

L'utilisation des outils standards de dump/restauration de PostgreSQL est problématique car les topologies sont composées d'un ensemble de tables (4 pour les primitives, un nombre arbitraire pour les couches) et d'enregistrements dans des tables de métadonnées (topology.topology et topology.layer). De plus, les identifiants de topologie ne sont pas univoques d'une base de données à l'autre, de sorte que les paramètres de votre topologie devront être modifiés lors de sa restauration.

Afin de simplifier l'exportation/la restauration des topologies, une paire d'exécutables est fournie : pgtopo_export et pgtopo_import. Exemple d'utilisation :

pgtopo_export dev_db topo1 | pgtopo_import topo1 | psql staging_db

9.14.1. Utiliser l'exportateur de topologie

Le script pgtopo_export prend le nom d'une base de données et d'une topologie et produit un fichier dump qui peut être utilisé pour importer la topologie (et les couches associées) dans une nouvelle base de données.

Par défaut, pgtopo_export écrit le fichier dump sur la sortie standard afin qu'il puisse être acheminé vers pgtopo_import ou redirigé vers un fichier (refusant d'écrire dans le terminal). Vous pouvez optionnellement spécifier un nom de fichier de sortie en utilisant l'argument -f dans la ligne de commandes.

Par défaut pgtopo_export inclut un dump de toutes les couches définies par rapport à la topologie donnée. Cela peut être plus de données que vous n'en avez besoin, ou peut ne pas fonctionner (dans le cas où vos tables de couches ont des dépendances complexes), auquel cas vous pouvez demander à ignorer les couches avec l'argument --skip-layers et les traiter séparément.

En utilisant pgtopo_export avec l'argument --help (ou -h en abrégé) affichera toujours une courte chaîne de caractères sur l'utilisation.

Le format du fichier dump est une archive tar compressée d'un répertoire pgtopo_export contenant au moins un fichier pgtopo_dump_version avec des informations sur la version du format. A partir de la version 1, le répertoire contient des fichiers CSV délimités par des tabulations avec les données des tables primitives de topologie (node, edge_data, face, relation), les enregistrements de topologie et de couche associés et (sauf si --skip-layers est donné) un dump PostgreSQL au format personnalisé des tables signalées comme étant des couches de la topologie donnée.

9.14.2. Utiliser l'importateur de topologie

Le script pgtopo_import prend un dump topologique au format pgtopo_export et un nom à donner à la topologie à créer et produit un script SQL reconstruisant la topologie et les couches associées.

Le fichier SQL généré contiendra des instructions qui créent une topologie avec le nom donné, chargent les données primitives, restaurent et enregistrent toutes les couches de la topologie en liant correctement toutes les valeurs TopoGeometry à leur topologie correcte.

Par défaut, pgtopo_import lit le dump depuis l'entrée standard afin qu'il puisse être utilisé en conjonction avec pgtopo_export dans une chaîne de traitement. Vous pouvez optionnellement spécifier un nom de fichier d'entrée avec l'argument -f en ligne de commande.

Par défaut, pgtopo_import inclut dans le fichier SQL de sortie le code permettant de restaurer toutes les couches trouvées dans le dump.

Ceci peut être indésirable ou ne pas fonctionner si votre base de données cible a déjà des tables avec le même nom que celles dans le dump. Dans ce cas, vous pouvez demander à ignorer les couches avec l'argument --skip-layers et les traiter séparément (ou plus tard).

SQL pour charger et lier uniquement les couches à une topologie nommée peut être généré en utilisant l'argument --only-layers. Cela peut être utile pour charger des couches APRÈS avoir résolu les conflits de noms ou pour lier des couches à une topologie différente (par exemple une version spatialement simplifiée de la topologie de départ).