Vérifier la topologie#
Déplacer les nœuds sur une grille#
Avant de vérifier la topologie, il faut au préalable avoir des géométries valides (cf. chapitre précédent).
Certaines micro-erreurs de topologie peuvent peuvent être corrigées en réalisant une simplification des données à l'aide d'une grille, par exemple pour corriger des soucis d'arrondis. Pour cela, PostGIS a une fonction ST_SnapToGrid.
On peut utiliser conjointement ST_Simplify et ST_SnapToGrid pour effectuer une première correction sur les données. Attention, ces fonctions modifient la donnée. A vous de choisir la bonne tolérance, par exemple 5 cm, qui dépend de votre donnée et de votre cas d'utilisation.
Tester la simplification en lançant la requête suivante, et en chargeant le résultat comme une nouvelle couche dans QGIS
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
Une fois le résultat visuellement testé dans QGIS, par comparaison avec la table source, on peut choisir de modifier la géométrie de la table avec la version simplifiée des données:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
Attention: Si vous avez d'autres tables avec des objets en relation spatiale avec cette table, il faut aussi effectuer le même traitement pour que les géométries de toutes les couches se calent sur la même grille. Par exemple la table des zonages.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
Repérer certaines erreurs de topologies#
PostGIS possède de nombreuses fonctions de relations spatiales qui permettent de trouver les objets qui se chevauchent, qui se touchent, etc. Ces fonctions peuvent être utilisées pour comparer les objets d'une même table, ou de deux tables différentes. Voir: https://postgis.net/docs/reference.html#Spatial_Relationships_Measurements
Par exemple, trouver les parcelles voisines qui se recouvrent: on utilise la fonction ST_Overlaps. On peut créer une couche listant les recouvrements:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
On peut alors ouvrir cette couche dans QGIS pour zoomer sur chaque objet de recouvrement.
Récupérer la liste des identifiants de ces parcelles:
1 |
|
On peut utiliser le résultat de cette requête pour sélectionner les parcelles problématiques: on sélectionne le résultat dans le tableau du gestionnaire de base de données, et on copie (CTRL + C). On peut alors utiliser cette liste dans une sélection par expression dans QGIS, avec par exemple l'expression
1 2 3 4 5 6 |
|
Une fois les parcelles sélectionnées, on peut utiliser certains outils de QGIS pour faciliter la correction:
- plugin Vérifier les géométries en cochant la case Uniquement les entités sélectionnées
- plugin Accrochage de géométrie
- plugin Go 2 next feature pour facilement zoomer d'objets en objets
Accrocher les géométries sur d'autres géométries#
Dans PostGIS, on peut utiliser la fonction ST_Snap dans une requête SQL pour déplacer les nœuds d'une géométrie et les coller sur ceux d'une autre.
Par exemple, coller les géométries choisies (via identifiants dans le WHERE) de la table de zonage sur les parcelles choisies (via identifiants dans le WHERE):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
Attention: Cette fonction ne sait coller qu'aux nœuds de la table de référence, pas aux segments. Il serait néanmoins possible de créer automatiquement les nœuds situés sur la projection du nœud à déplacer sur la géométrie de référence.
Dans la pratique, il est très souvent fastidieux de corriger les erreurs de topologie d'une couche. Les outils automatiques ( Vérifier les géométries de QGIS ou outil v.clean de Grass) ne permettent pas toujours de bien voir ce qui a été modifié.
Au contraire, une modification manuelle est plus précise, mais prend beaucoup de temps.
Le Ministère du Développement Durable a mis en ligne un document intéressant sur les outils disponibles dans QGIS, OpenJump et PostgreSQL pour valider et corriger les géométries: http://www.geoinformations.developpement-durable.gouv.fr/verification-et-corrections-des-geometries-a3522.html