J'ai une couche vectorielle polygonale représentant la zone inondée lors d'une inondation. La couche a été produite de telle manière que certaines des zones sont composées de plusieurs petits polygones se touchant (voir capture d'écran ci-dessous, étiquetés "données originales").
Je voudrais dissoudre les polygones où ils se touchent. Si j'utilise l'outil de géotraitement Dissolve dans les fTools de QGIS, qui utilise la bibliothèque GEOS, j'obtiens des résultats inattendus (voir «Dissolution avec QGIS fTools»). Il semble que GEOS n'utilise pas de seuil pour déterminer si les polygones se touchent, comme mentionné dans ces problèmes:
http://trac.osgeo.org/qgis/ticket/3126
http://trac.osgeo.org/qgis/ticket/3184
http://hub.qgis.org/issues/2806
La même approche dans ArcGIS donne le résultat attendu (voir «Dissoudre avec ArcGIS 10.1»).
Apparemment, c'est une "fonctionnalité" de GEOS, plutôt qu'un bug. Existe-t-il un moyen de corriger les données dont je dispose pour produire le résultat attendu? Une petite perte de précision (quelques cm?) Pourrait être acceptable pour moi. Idéalement, la solution serait quelque chose que je pourrais écrire dans un plugin QGIS, comme une étape de prétraitement.
Question connexe (sans réponse): Comment définir la valeur de tolérance de l'outil de géotraitement dans QGIS?
Lien vers des exemples de données sous forme de fichier de formes: https://www.dropbox.com/s/c8ns7wwfv289ad0/sample.zip
Réponses:
Dans ce cas, il semble que vous ayez besoin d'aider l'outil de dissolution en fixant d'abord la topologie. Voici comment procéder dans GRASS.
Lorsque vous chargez le fichier de formes, voici comment GRASS le voit:
Chaque croix marque une zone. Vous pouvez voir qu'il y a des croix sur les lignes de démarcation: Ce sont les polygones de ruban causés par le léger décalage entre les lignes de démarcation.
Supprimez les polygones en ruban formés par les espaces entre les polygones réels:
Prenez les lignes de démarcation:
Brisez les limites aux nouvelles intersections:
Supprimez les lignes de délimitation désormais dupliquées:
Dissoudre les polygones
Et voilà:
la source
Utiliser la commande GRASS GIS v.dissolve (dans le plugin Sextante -> Commandes GRASS -> Vector)
Si je vous reproduis rapidement l'exemple:
Le résultat avec v.dissolve:
Explication
Le problème est facile à comprendre. Un fichier de formes n'a pas de topologie, si deux zones partageaient une bordure commune, cette bordure serait numérisée deux fois et également stockée en double.
Vous voyez cela clairement lorsque vous essayez de modifier le fichier de formes:
GRASS GIS (comme ArcGIS) est un SIG topologique. Lorsque vous importez le fichier de formes dans GRASS, la couche résultante a une topologie: la frontière commune entre deux zones existe une fois et est partagée.
Pour cette raison, lorsque vous souhaitez dissoudre un fichier de formes ( dissoudre deux limites ), vous pouvez rencontrer des problèmes (dans QGIS, GvSIG, OpenJUMP ou l'ancien ArcView 3.x), voir ArcUserI: Comprendre la topologie et les fichiers de formes .
Dans GRASS, v.dissolve est conçu pour dissoudre les frontières communes entre les zones avec le même numéro de catégorie
la source
v.dissolve
a un paramètre de tolérance, qui résout le problème de l'OP.v.dissolve
cela semble fonctionner, sauf qu'il "remplit" le petit carré au milieu des fonctionnalités. i.stack.imgur.com/AA59l.png