Supprimer uniquement les trous en anneau des polygones à l'aide d'ArcGIS Desktop?

15

J'utilise ArcGIS Desktop 10.0.

J'ai une astuce pour supprimer les trous de beignet, qui convertit le polygone en ligne, puis crée un polygone à partir des lignes et, à la fin, les fusionne tous. L'inconvénient de cette stratégie est qu'elle supprime d'autres trous et zones vides qui en réalité sont vides et doivent être maintenus vides. Voir l'image ci-dessous:

entrez la description de l'image ici

Arash
la source
3
J'ai voté pour que cette question reste ouverte car je pense que le PO essaie de supprimer certains mais pas tous les beignets. Il cherche un moyen de garder certains d'entre eux.
Fezter
Merci! J'ai ajouté l'image, j'espère que ça clarifie tout. Je ne peux pas aller de l'avant et supprimer des zones plus grandes avant de tout fusionner, car je peux accidentellement supprimer les polygones principaux (le vert lui-même).
Arash
1
Très similaire à Comment supprimer les petits polygones «sel et poivre» d'une couche? , mais en utilisant un processus QGIS. Vous pourriez probablement travailler avec des processus très similaires dans ArcGIS.
RyanKDalton
Ce n'est que la taille du seuil au-dessus de laquelle les trous ne doivent pas être remplis qui empêche que ce soit un doublon de remplissage de polygones en anneau à l'aide d'ArcGIS for Desktop?
PolyGeo

Réponses:

23

J'essaierais l' outil Union avec NO_GAPS:

NO_GAPS: une entité sera créée pour les zones de la sortie qui sont complètement entourées de polygones. Cette fonctionnalité aura des attributs vides.

Vous pouvez ensuite sélectionner les entités avec des attributs vides en dessous d'une taille de seuil et calculer leurs attributs pour qu'ils soient identiques au polygone d'origine - ou les copier / coller dans la fenêtre Attributs de l'éditeur.

Les entités dont les attributs vierges dépassent la taille de seuil doivent être supprimées.

À partir de là, l' outil Dissoudre devrait terminer le travail.

PolyGeo
la source
1
comment "calculez-vous [le nouveau poly beignet] pour qu'il soit identique au polygone [contenant] d'origine"? Ils n'ont aucune valeur d'attribut en commun, ils ne peuvent donc pas être joints. Comment l'Île poly C sait-elle qu'elle doit acquérir ses nouvelles valeurs d'attribut (contenant) le lac poly A et ignorer (ailleurs) le lac poly B?
matt wilkie
Je n'ai pas fait de test récent mais "le nouveau poly beignet" est le "polygone d'origine [contenant]". S'il y a plusieurs de ces polygones à beignets à traiter en vrac, le marquage des petits trous avec le polygone à beignets dans lequel ils se trouvent serait nécessaire.
PolyGeo
7

La solution de PolyGeo est celle que j'ai employée moi-même et qui fonctionne bien (+1). Une autre alternative est de tamponner vos polygones d'une petite quantité, puis de dé-tamponner le résultat de la même quantité (disons + 1m puis -1m). Cela fonctionne également bien, mais comporte un faible risque de joindre accidentellement des polygones voisins par la même quantité que votre tampon. Cela peut également augmenter le nombre de vertex (ce qui peut ou non être un problème).

Vous pouvez également écrire un script pour une solution robuste en itérant sur chaque polygone, en créant des polygones temporaires basés sur les anneaux intérieurs et en les testant pour leurs zones. S'ils sont en dessous de votre seuil, vous supprimez ensuite cet anneau intérieur de la géométrie et mettez à jour votre ligne. Cette solution est plus de travail que la solution de PolyGeo ou mon hack de tampon ci-dessus mais est peut-être une approche "plus pure".

MappaGnosis
la source
5

Vous pouvez utiliser l'outil "Eliminer la pièce polygone" (Outils de gestion des données -> Généralisation) dans ArcToolbox. Vous pouvez spécifier la zone / le pourcentage de trous minimum à supprimer.

Kadir Şahbaz
la source
1
Cette fonction nécessite cependant un niveau de licence Advanced / ArcInfo.
Martin
J'ai essayé l'outil Eliminate Polygon Part, dans ArcGIS Pro 2.0. Mais cela n'a rien fait à l'entité polygonale que je testais. La fonctionnalité avait plusieurs anneaux intérieurs, et je veux qu'ils disparaissent tous. Cet outil fonctionne-t-il uniquement si l'entité est constituée d'une géométrie en plusieurs parties?
Mike Finch
Pas seulement". Il fonctionne également avec des trous simples.
Kadir Şahbaz
4

Voici une autre façon de supprimer des lacs des polygones (comme la couche de carte de code postal de Navteq). Ceci est également utile pour nettoyer les couches de carte de territoire qui ont été générées en dissolvant la couche de carte de code postal par le code de territoire.

  1. Utilisez un "Union" de géotraitement sur la couche de carte de polygones et supprimez la case à cocher "Écarts autorisés" (qui est cochée par défaut). Cela crée des polygones pour tous les trous "beignets" des polygones.
  2. Dans la couche de carte Union résultante, ajoutez des champs pour ID, X et Y. L'ID doit être distinct du nom / ID des polygones qui ont les trous de beignet que vous souhaitez supprimer.
  3. Dans la table attributaire, utilisez la calculatrice de champ pour calculer l'ID à partir du champ ObjectID et utilisez "Calculer la géométrie" pour remplir les valeurs X et Y.
  4. Séparez les polygones en anneau des autres polygones en sélectionnant (Sélectionner par attributs) ceux dont le champ de nom est nul.
  5. Exportez les enregistrements sélectionnés vers une nouvelle table. (liste déroulante des options du tableau -> Exporter ...)
  6. Utilisez l'option "Ajouter XY" pour créer une couche d'événements. (couche de clic droit -> Afficher les données XY ....
  7. Exportez la couche d'événements vers une nouvelle classe d'entités. (clic droit sur la couche -> Données -> Exporter les données)
  8. Effectuez une jointure spatiale entre la nouvelle couche de points et la couche de carte de polygone ORIGINAL qui ne contient pas les polygones en anneau. Utilisez l'option «le plus proche» pour que le nom du polygone environnant soit ajouté à la table attributaire des polygones en anneau.
  9. Utilisez une jointure de table standard entre la couche de points jointe et la couche de carte résultante de l'Union (en fonction du champ ID). (couche de clic droit -> Jointures et relations -> Jointure -> Jointure de données d'une autre couche en fonction de l'emplacement spatial)
  10. Utilisez la calculatrice de champs dans la table attributaire pour calculer les noms de polygones nuls à partir de la couche de points joints.
  11. Exécutez un géotraitement "Dissoudre" basé sur le nom du polygone pour fusionner les polygones en anneau avec le plus grand polygone nommé.

Notez que cela ne corrigera pas le problème des rivières qui sont coupées dans le contour du polygone, mais cela améliore la couche de carte d'origine en supprimant les trous de beignets intérieurs.

Susan
la source
3

Si les polygones de la classe d'entités contiennent d'autres polygones de la même classe d'entités (par exemple, le Lesotho en Afrique du Sud) et si vous devez éliminer l'édition manuelle au profit de ModelBuilder, etc., l'utilisation de "Eliminer la partie polygone" est la solution la plus rapide. Paramètres d'outil:

- "Condition (facultatif)" = ZONE - "Zone (facultatif)" = un très grand nombre (disons, 1e + 100) - "Éliminer uniquement les pièces contenues (facultatif)" = [vérifié]

Cela donnera une Afrique du Sud dont la zone du Lesotho est remplie, essentielle pour les flux de travail tels que la sortie de sommets à utiliser dans les visuels Polygon dans Tableau.

Mandrin
la source
0

Puisqu'il n'a pas été mentionné jusqu'à présent et qu'il semble être le bon outil pour exactement ce que vous essayez de réaliser: polygones agrégés

Définissez la taille minimum_hole_size sur la taille minimale d'un trou de polygone que vous souhaitez conserver. Les plus petits seront éliminés.

La valeur optionnelle minimum_area dans le même outil fait de même pour les parties de polygone qui ne sont pas des trous.

ZZZ
la source