Comment remplir automatiquement des trous dans des polygones?

12

Existe-t-il une option dans QGIS pour remplir automatiquement les trous dans les polygones en définissant des paramètres, par exemple la zone maximale, la distance entre les limites? Je veux supprimer / remplir des trous qui sont très "fins" / petits.

J-Man
la source
1
Êtes-vous intéressé par les trous (anneaux à l'intérieur des polygones) ou par la réduction des écarts entre des polygones séparés?
Simbamangu
Doit-il s'agir d'une solution basée sur QGIS? J'ai déjà blogué sur la façon d'accomplir cela en utilisant SQL spatial dans PostGIS ( geospatial.commons.gc.cuny.edu/2013/11/04/… ). Si vous n'exécutez pas PostGIS, je pourrais probablement l'adapter pour vous à SpatiaLite, qui, à supposer, si vous utilisez QGIS, vous avez peut-être déjà SpatiaLite dans votre chaîne d'outils.
Lee Hachadoorian

Réponses:

11

À l'aide de QGIS 2.10.1-Pisa avec la version 2.10.2 de traitement , deux outils sont disponibles dans la boîte à outils de traitement :

  • Outil de remplissage de trous dont vous pouvez spécifier la zone maximale .
  • Outil Supprimer les trous qui serait appliqué à toute la couche d'entrée.

J'espère que cela t'aides!

Joseph
la source
1
Juste pour vérifier, le paramètre de zone max, c'est-à-dire la taille maximale d'un trou à remplir? Donc, dans un projet de mètre UTM, si le maximum était de 10 000, cela signifierait que le plus grand trou à remplir serait d'un hectare et qu'il resterait plus grand que cela?
BillW
1
@BillW - Oui, je crois que c'est exactement ce que ça fait :)
Joseph
11

J'ai rencontré le même problème que le vôtre avec ce fichier de formes, ayant de nombreux écarts entre les polygones.

Fichier d'origine avec des lacunes

Afin de résoudre le problème, vous pouvez utiliser une légère modification de la méthode de tshiffle:

  1. Tout d'abord, effectuez la différence entre votre fichier et un polygone couvrant toute son étendue.

Extent_polygon

Difference_tool

Cette action créera un nouveau fichier de formes consistant en un seul polygone, vous devez donc le faire exploser en parties uniques. Pour cela, vous pouvez utiliser l'outil Vector / Geometry Tools / Multipart to singleparts.

Différence_résultat

Multi_to_single

Après cela, supprimez l'entité externe. Vous disposez maintenant, dans un nouveau fichier de formes, de plusieurs polygones couvrant les lacunes de votre couverture d'origine.

lacunes_couvertes

  1. Effectuez une union entre les données initiales et les pièces individuelles. Utilisez l'outil SAGA, car l'option QGIS par défaut crée des doublons dans la base de données.

syndicat

  1. Toutes les lacunes apparaîtront désormais comme des enregistrements vides dans la base de données (par exemple 72 lignes). Triez votre table à l'aide d'un champ de zone et prenez la valeur du plus petit polygone du fichier d'origine. Pour ce cas, 0,13645 hectares.

base de données

  1. Enfin, utilisez l'outil "Eliminer les polygones de ruban", avec les paramètres affichés dans l'image.

entrez la description de l'image ici

  1. Le résultat final ne présente aucune lacune.

entrez la description de l'image ici

gtapko
la source
Pourriez-vous ajouter plus d'informations sur le choix des paramètres? Quelle est la "valeur"? La page de documentation QGIS contient très peu de détails. Réponse très élégante, dommage que l'utilisateur initial n'ait accepté aucune des réponses!
user3386170
1
La «valeur» est la grandeur que vous utilisez pour la comparaison. Dans l'exemple, le champ utilisé «zone» a été défini en hectares, donc 0,1 signifie: éliminer les polygones inférieurs ou égaux à 0,1 hectare.
gtapko
gtapko, pouvez-vous fournir plus de détails sur la phase 3? je ne peux pas le comprendre, merci
newGIS
4

Il existe peut-être des solutions plus élégantes, mais cela a toujours fonctionné pour moi.

1) Créez des polygones de "remplissage de trous". Pour ce faire, dessinez un polygone géant plus grand que l'original et utilisez l'outil "différence". Si vous avez dessiné un polygone beaucoup plus grand, vous aurez tous les polygones de "remplissage de trous" plus un seul polygone plus grand qui fait le tour de la forme d'origine. Supprimez ce grand polygone, en conservant les polygones de "remplissage de trous".

2) Fusionnez les polygones de "remplissage de trous" avec le fichier de formes d'origine. Si vous souhaitez uniquement remplir des trous qui correspondent à certains critères (c'est-à-dire sous X nombre de kilomètres carrés), vous pouvez filtrer pour cela ici.

3) Dissolvez le polygone nouvellement fusionné sur un champ commun.

tshiffle
la source
Pas clair sur l'étape 3, comment quelqu'un trouvera le champ commun?
iRfAn
À cette étape, le champ commun peut être n'importe quoi, le but est de simplement dissoudre les frontières entre les polygones. Vous pouvez utiliser un champ existant ou simplement en ajouter un.
tshiffle
4

En python / galbé, cela peut remplir votre polygone:

import shapely
from shapely.geometry import Polygon
filled_shape = Polygon(shape_with_holes.exterior)
mszel
la source
2

J'ai vu des explications suivre le même chemin que gtapko et tshiffle, mais aucune n'a fonctionné pour moi car les géométries invalides ont rendu l'outil de différence dysfonctionnel. J'ai donc trouvé ma propre solution qui n'est pas 100% automatisée, mais elle est gérable. Probablement quelqu'un l'a déjà compris, mais je vais tenter ma chance:

1) Créez un ID sur la couche d'origine endommagée

La création d'un attribut ID est simple, mais ma solution l'est aussi, je vais donc la parcourir.

Tout d'abord, vous devez ouvrir votre table attributaire et ensuite aller à la calculatrice de champ , qui est un bouton à peu près comme un boulier. Là, vous aurez la possibilité de créer un nouveau champ ou de mettre à jour un champ existant. Sur l'image ci-dessus, j'en crée un nouveau appelé "ID". La formule est juste à la fin de l'image. (Désolé d'avoir mon QGIS configuré dans une langue différente. Étant donné que la conception et les formules sont exactement les mêmes dans toutes les versions linguistiques, je ne pense pas que cela nous gênera ici.)

2) Convertissez les polygones en lignes

Cette étape est située dans la section Vecteur> Géométrie du menu. Votre forme convertie devrait ressembler à ceci:

Juste après avoir converti les polygones en ligne, vous devrez faire exactement le contraire, qui est ...

3) Convertir des lignes en polygones

Les options sont côte à côte. Encore une fois, ne nous occupons pas de la barrière de la langue ici.

4) Réjouissez-vous La raison pour laquelle vous avez effectué les étapes 2 et 3 est que maintenant vous êtes sûr que ces lignes seront considérées comme des polygones, ce qui signifie qu'elles ont maintenant leur propre ligne sur la table d'attributs. Si vous le vérifiez, cela ressemblera à ceci:

Le premier est TOUJOURS le polygone entier (croyez-moi, j'ai supprimé quelques centaines de lignes aujourd'hui ...) et le reste sont les lignes lâches au milieu. Vous pouvez activer l'édition et vous préparer à l'action. Si vous décidez d'essayer ceci, vous devez garder à l'esprit deux choses: organiser votre table en fonction de l' ID , de cette façon vous êtes sûr de ne rien manquer et d'utiliser shift pour sélectionner des clusters de données, comme n'importe quel autre programme .

Je suis conscient que ce n'est pas la crème de la crème de la résolution de problèmes QGIS, mais si vous êtes confronté à une situation où les outils ne fonctionnent pas en raison de la géométrie non valide que cette ligne crée (j'ai même essayé de dissoudre par l'ID, mais cela n'a pas fonctionné), alors cela pourrait être une issue.

Eric Lino
la source
Pourriez-vous mettre à jour vos images? Les liens sont rompus!
Simbamangu
Hey. Je suis désolé, mais apparemment Photobucket a détourné mes images, j'ai perdu leur accès. J'ai déjà ouvert un ticket et j'essaie de retrouver l'accès. Je vous répondrai dans la mesure du possible.
Eric Lino