3
13 nov 2014

Il arrive que, pour différentes raisons, vous receviez une couche de données qui est topologiquement invalide (polygone dont certains arcs se croisent, etc.). Avant d'entrer dans le vif du sujet et si le mot topologie ne vous est pas familier, je vous conseille la lecture de l'excellent article de Martin laloux paru sur le Portail SIG.

Bon revenons à nos moutons et à ma couche de données. Donc j'ai reçu des données prises depuis un GPS puis directement exportées au format Shapefiles. En raison de l'imprécision du GPS et du trajet effectué par la personne en charge de l'acquisition des données, la géométrie finale n'était pas toujours topologiquement valide. Ainsi, mes données s'affichaient correctement sur QGIS mais pour autant il m'était impossible de les analyser ou encore de les importer dans PostGIS. En effet, lors de l'import la librairie GEOS se plaignait à juste titre des nombreuses erreurs de topologie.

Une approche aurait pu être de simplifier la géométrie des objets afin d'éliminer les erreurs potentielles. Bien que simple, cette démarche entraine également une modification initiale de la géométrie initiale de l'objet. De plus, même si cela élimine un grand nombre d'erreurs il en restait tout de même.

De ce fait, je me suis tourné vers des outils dédiés me permettant de complètement corriger mes géométries. La démarche suivie est expliquée dans les paragraphes ci-dessous.

Logiciel utilisé

Le logiciel SIG QGIS ainsi que son plugin GRASS ont été utilisés pour corriger la topologie des objets. L’avantage d’utiliser GRASS est que contrairement à la plupart des logiciels SIG existants celui-ci s’appuie nativement sur une représentation topologique (arc, nœuds) des objets géographiques.

Le plugin GRASS permet de bénéficier des nombreuses fonctionnalités du logiciel GRASS directement dans QGIS. Celui-ci est accessible depuis la boite à outils de QGIS. Si cette boite à outils n’est pas disponible, il suffit de l’activer à partir du menu : vue ->panneaux -> boite à outils.

Cette boite à outils regroupe un ensemble de « géotraitements », mais seul le module vclean de Grass sera utilisé. Ce module dispose de différentes options  dont deux qui seront utilisées pour notre démarche à savoir break et rmarea.

 

 

Démarche

Comme précisé en introduction, la couche de données en entrée possède des entités dont la géométrie est invalide. L'outil de vérification de QGIS révèle d'ailleurs un grand nombre d'erreurs.

La démarche proposée pour corriger ces erreurs s’appuie sur 4 principales étapes.

Tout d’abord en utilisant l’option break la géométrie initiale de l’objet est découpée lorsqu’une intersection est détectée. Le seuil (Threshold) peut varier en fonction de vos données. Quelques tests doivent être effectués afin d’obtenir le plus approprié. Dans notre cas, un seuil à 10 était celui donnant les meilleurs résultats.
 

À la fin de processus, les polygones ayant des intersections sont alors découpés en deux.
 


Une fois, le découpage des intersections réalisé, il faut maintenant supprimer les reliquats de géométrie. Pour cela l’option rmarea est utilisée. Celle-ci supprime les géométries dont l’aire est inférieure à un seuil défini.  Comme précédemment, ce seuil peut varier est doit être adapté en fonction des données initiales.
 

Une ultime vérification me confirme que ma couche est dorénavant topologiquement valide.


 
Et voilà, j'ai maintenant ma couche qui est géométriquement valide. Je peux alors l'importer dans PostGIS ou effectuer les traitements que je souhaite.

Conclusion

La démarche proposée est essentiellement manuelle. Bien évidemment rien ne vous empêche d'utiliser le model builder de QGIS pour automatiser tout cela ! A vous de jouer.

A propos de l'auteur: 
Arnaud Vandecasteele

Fervent défenseur de l'Open Source, Arnaud s'est spécialisé dans le développement d'application cartographiques web. OpenLayers, PostGIS ou encore Django sont autant d'outils qu'il manipule au quotidien.
S'il n'est pas en face de son ordinateur, vous le retrouverez un GPS à la main en train de cartographier pour OpenStreetMap, de faire voler son drone ou sur un tatami !

Commentaires

Bonjour

Merci pour ce didacticiel très compréhensible. Cependant, j'ai un problème lorsque je lance l'opération break. J'obtiens le message suivant :

Oooops! The following output layers could not be open
Errors layer: C:\Users\M829F~1.PIR\AppData\Local\Temp\processing\ec775be1f72a46f69d157e3b5d256b55\error.shp
The above files could not be opened, which probably indicates that they were not correctly produced by the executed algorithm
Checking the log information might help you see why those layers were not created as expected
This algorithm requires GRASS to be run. A test to check if GRASS is correctly installed and configured in your system has been performed, with the following result:
GRASS seems to be correctly installed and configured

Savez vous quel est l'origine de ce message ?

Merci

Bonjour Mathias,

Il semblerait que suite aux processus, le traitement n'arrive pas à avoir accès au fichier.

Est-ce que QGIS a les droits en écriture sur le dossier spécifié ?

 

Arnaud

Bonjour,

Je me souviens avoir tenté d'utiliser le v.clean sur une couche remplie d'erreurs. J'ai trouvé les outils quasiment impossibles à utiliser efficacement et les seuils très difficile à trouver et très prenant en temps.

Finalement, j'avais trouvé que l'import dans GRASS avec v.in.ogr et l'export en shapefile permettent de corriger bien plus rapidement les topologies.

Quel avantage trouvez-vous donc au v.clean par rapport à cette solution ?