Suppression d'entités en double avec la même géométrie dans ArcMap?


15

Est-il possible d'identifier de manière unique chaque géométrie dans une couche d'entités?

J'ai essentiellement une couche d'entités surfaciques avec de nombreuses lignes de données représentées par la même géométrie. Je voudrais 1 ligne pour chaque géométrie unique. Je recherche donc une méthodologie prête à l'emploi pour combiner des attributs basés sur la forme de la géométrie.

Je viens d'un monde Postgres et je peux résoudre ce problème là-bas, mais je ne sais pas comment le faire (ou si c'est possible) pour le faire sans programmation avec les outils ESRI.


Vous dites donc qu'il existe plusieurs enregistrements de géométrie identique et que vous souhaitez combiner ceux qui sont identiques? Si tel est le cas ... pourriez-vous simplement dissoudre en fonction de la zone ou quelque chose comme ça? Je manque peut-être votre question ici.
Clickinaway

C'est vrai, ce sont des géométries identiques où le seul attribut naturel partagé est la géométrie elle-même. La zone peut fonctionner, mais rien ne garantit que deux géométries différentes n'ont pas la même zone.
Dylan Hettinger

Voir mon post. Vous pouvez exécuter la dissolution sur plusieurs champs.
Paul

@Paul .... Je vois que vous avez modifié votre réponse pour refléter mes commentaires. J'espère que cela a aidé.
Clickinaway

Réponses:


22

Si vous disposez d'une licence avancée, vous pouvez utiliser Rechercher identique ou Supprimer identique .

Les deux peuvent être utilisés pour rechercher / supprimer des entités qui ont des attributs identiques ou, si le champ Forme est spécifié, des géométries identiques.

Si vous n'avez pas de licence avancée, ce message vous sera utile.

En bref, vous ajoutez deux champs pour X, Y dans votre table attributaire et exécutez un fondu sur lesdits champs.

Si vous avez des polygones qui partagent le même centroïde, mais qui ne sont pas géométriquement identiques, vous pouvez ajouter deux autres champs (Périmètre et Aire). Cela devrait suffire à identifier des géométries identiques pour presque tous les cas normaux. Voir les commentaires de @ whuber ci-dessous.


C'est en supposant que les données ponctuelles sont correctes? J'avais pensé à suggérer de créer d'abord des centroïdes. Il dit toujours qu'il y a plusieurs rangées de la même géométrie ... Cela ressemble presque à une classification basée sur une classe / plage de superficie? Mais cela dit aussi la forme de la géométrie ... c'est pourquoi je me penchais vers une dissolution basée sur la surface ou le périmètre (ou une combinaison des deux pour atteindre un rapport).
Clickinaway

1
En fait, ce poste que j'ai lié était pour les polygones. Vous pouvez vous dissoudre sur l'aire et le centroïde, au cas où vous auriez deux polygones non identiques avec le même centroïde.
Paul

+1 C'est exactement la bonne réponse. En principe, le centroïde, le périmètre et la zone peuvent toujours ne pas identifier de manière unique un polygone, mais les contre-exemples sont un peu artificiels. Pour hacher des objets irréguliers ou naturels ou numérisés manuellement vers des identifiants uniques, ces quatre valeurs doivent être fiables. Si vous souhaitez obtenir des valeurs plus faciles à obtenir, utilisez les coordonnées du cadre de sélection de l'entité et son nombre de sommets.
whuber

@whuber La comparaison des coordonnées de tous les sommets serait-elle le seul moyen infaillible de déterminer une géométrie identique? Mon expérience en géométrie est assez faible, donc je trouve cela assez fascinant.
Paul

La réponse à votre question dépend de ce que vous entendez par "identique": par exemple, si vous deviez insérer un nouveau sommet le long du bord d'un polygone, est-ce un polygone "identique" ou non? On peut dire que c'est dans le sens de représenter la même caractéristique dans le monde, même si les sommets diffèrent. De ce point de vue, le seul test sûr est de savoir si la différence (théorique) des deux polygones est vide ou non. Mais si vous considérez plus strictement que l'identité signifie une correspondance de sommet à sommet, c'est toujours délicat, car un polygone pourrait commencer sa liste de sommets à un point différent.
whuber

1

J'ai un ensemble de données basé sur des données d'enquête. Mon problème est que les anciennes fonctionnalités ne sont pas toujours supprimées avant l'importation des nouveaux plans d'enquête. Par conséquent, nous avons des «doublons» de géométrie différente: IE, les plans de levé peuvent être séparés de 1/4 de pied les uns des autres. Sur un jeu de données d'entités 12000, il est difficile de zoomer sur chacune d'elles et de les identifier. Utilisation d'ArcMap Basic 10.2: voici un modèle hacky que j'ai trouvé.

  1. Tampon (avec rayon d'entrée) chaque entité dans le calque d'origine (sélectionné ou non)
  2. Itérer sur chaque entité de la couche tampon
  3. Sélectionner à partir du calque d'origine en fonction de la relation (Centroid avec fonction in)
  4. Fonctionnalités sélectionnées "Nombre de lignes"
  5. Champ Calculer la valeur du nombre de lignes dans la couche tampon = combien d'entités se trouvent dans le rayon des entités d'origine

J'ai réinventé la roue. De plus, j'ai été frustré par le constructeur de modèles et j'ai essentiellement tout bulldogé. Il doit y avoir une solution plus élégante. J'accepterai volontiers les critiques et suggestions.

De plus, cela semble ne fonctionner correctement qu'à partir de Model Builder, je cours à partir d'une boîte à outils et cela n'enregistre pas la couche tampon.

Rechercher des doublons


1

Je cherche depuis un certain temps une réponse à la même question pour surmonter l'aplatissement du problème des polygones tampons qui se chevauchent et je pense avoir trouvé une solution robuste à cela. En fait, le commentaire de Whuber,

En principe, le centroïde, le périmètre et la zone peuvent toujours ne pas identifier de manière unique un polygone, mais les contre-exemples sont un peu artificiels.

la réponse de @ Paul a été pour moi la principale motivation pour continuer à essayer. Il utilise l' opérateur ARE_IDENTICAL_TO de l'outil Spatial Join car il est le plus efficace parmi d'autres détecteurs identiques. Voici les étapes:

  • Auto-union votre entrée pour garder toutes les formes différentes les unes des autres;
  • Créez un champ factice pour conserver / copier les OBJECTID originaux (c.-à-d. Le type de champ OID) des lignes, par exemple EX_OID ;
    • Exécutez la jointure spatiale sur la classe d'entités qui doit être traitée comme paramètres d'entité cible et de jointure. Assurez-vous que les mappages de champs du ou des champs fictifs (apparaissant deux fois) précédemment créés ont la règle de fusion FIRST (qui est la valeur par défaut ou choisissez LAST, les autres peuvent ne pas donner la sortie souhaitée car ils utilisent un résumé des chevauchements). Cette étape sélectionne la forme commune OBJECTID assis au-dessus de tout chevauchement (c.-à-d., PREMIER);

Les étapes suivantes peuvent être effectuées de deux manières, AVEC Python ou SANS:

AVEC PYTHON

  • Utilisez le code ci-dessous pour extraire les identifiants uniques que nous voulons trouver:

print tuple(set([row.getValue("EX_OID_1") for row in arcpy.SearchCursor("Output_of_the_Spatial_Join_Operation")])).

Sachez que j'utilise la deuxième copie du champ OID factice, qui est EX_OID_1 dans mon cas;

  • Copiez la sortie de ce code et collez-la dans la requête de définition de la classe d' entités d'origine traitée comme OBJECTID IN (<PASTE_COPIED_VALUES_HERE>). Le résultat vous montrera les caractéristiques unifiées des parties qui se chevauchent. Il y a cependant une limite de taille, 30 000 caractères. Pour surmonter ce problème, vous devez suivre les étapes «sans python».

SANS PYTHON

  • Utilisez l'outil Fréquence pour répertorier les valeurs uniques dans la deuxième copie du champ OID factice, qui est EX_OID_1 dans mon cas;

  • Enfin, joignez le champ OBJECTID de la classe d' entités d'origine à la sortie des EX_OID_1 de l'outil Fréquence en sélectionnant les options "Conserver uniquement les enregistrements correspondants".

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.