Entfernen doppelter Features mit derselben Geometrie in ArcMap?

15

Ist es möglich, jede Geometrie in einem Feature-Layer eindeutig zu identifizieren?

Im Wesentlichen habe ich einen Polygon-Feature-Layer mit vielen Datenzeilen, die durch dieselbe Geometrie dargestellt werden. Ich möchte 1 Zeile für jede eindeutige Geometrie. Daher suche ich nach einer sofort einsatzbereiten Methode, um Attribute basierend auf der Form der Geometrie zu kombinieren.

Ich komme aus einer Postgres-Welt und kann dieses Problem dort lösen, aber ich weiß nicht, wie ich es machen soll (oder ob es möglich ist), es nicht programmatisch mit ESRI-Tools zu machen.

Dylan Hettinger
quelle
Sie sagen also, dass es mehrere Datensätze mit identischer Geometrie gibt, und Sie möchten diejenigen kombinieren, die identisch sind? Wenn das der Fall ist ... könntest du dich einfach auf der Grundlage eines Gebiets oder so etwas auflösen? Vielleicht vermisse ich deine Frage hier.
Clickinaway
Das ist richtig, es handelt sich um identische Geometrien, bei denen das einzige gemeinsame natürliche Attribut die Geometrie selbst ist. Die Umgebung kann funktionieren, aber es gibt keine Garantie , dass zwei unterschiedliche Geometrien nicht die gleiche Fläche haben.
Dylan Hettinger
Siehe meinen Beitrag. Sie können Dissolve für mehrere Felder ausführen.
Paul
@Paul .... Ich sehe, dass Sie Ihre Antwort bearbeitet haben, um meine Eingabe widerzuspiegeln. Ich hoffe das hat geholfen.
Clickinaway

Antworten:

22

Wenn Sie über eine erweiterte Lizenz verfügen, können Sie Identisch suchen oder Identisch löschen verwenden .

Beide können zum Suchen / Löschen von Features mit identischen Attributen oder, wenn das Feld "Form" angegeben ist, identischen Geometrien verwendet werden.

Wenn Sie keine erweiterte Lizenz haben, ist dieser Beitrag hilfreich.

Kurz gesagt, Sie fügen zwei Felder für X, Y in Ihre Attributtabelle ein und führen eine Überblendung für diese Felder aus.

Wenn Sie Polygone haben, die denselben Schwerpunkt haben, aber geometrisch nicht identisch sind, können Sie zwei weitere Felder hinzufügen (Umfang und Fläche). Das sollte ausreichen, um für fast alle Normalfälle identische Geometrien zu identifizieren. Siehe @ whubers Kommentare unten.

Paul
quelle
Ist das die Vermutung, dass Punktdaten korrekt sind? Ich hatte darüber nachgedacht, zuerst die Erstellung von Zentroiden vorzuschlagen. Er sagt immer noch, dass es viele Reihen mit der gleichen Geometrie gibt ... Es klingt fast so, als würde man anhand einer Anbauflächenklasse / eines Anbauflächenbereichs klassifizieren? Es steht aber auch die Form der Geometrie. Aus diesem Grund habe ich mich nach der Fläche oder dem Umfang (oder nach einer Kombination aus beiden, um ein Verhältnis zu erzielen) aufgelöst.
Clickinaway
1
Eigentlich war dieser von mir verlinkte Beitrag für Polygone. Sie könnten sich auf Fläche und Flächenschwerpunkt auflösen, wenn Sie nicht die Möglichkeit haben, zwei nicht identische Polygone mit demselben Flächenschwerpunkt zu haben.
Paul
+1 Das ist genau die richtige Antwort. Im Prinzip identifizieren der Schwerpunkt, der Umfang und die Fläche ein Polygon möglicherweise noch nicht eindeutig, aber die Gegenbeispiele sind ein wenig konstruiert. Für das Hashing von unregelmäßigen oder natürlichen oder manuell digitalisierten Objekten zu eindeutigen IDs sollten diese vier Werte zuverlässig sein. Wenn Sie einfachere Werte erhalten möchten, verwenden Sie die Koordinaten des Begrenzungsrahmens des Features und dessen Scheitelpunktanzahl.
Whuber
@whuber Wäre der Vergleich der Koordinaten aller Scheitelpunkte der einzige todsichere Weg, um eine identische Geometrie zu bestimmen? Mein geometrischer Hintergrund ist ziemlich schwach, daher finde ich das alles ziemlich faszinierend.
Paul
Die Antwort auf Ihre Frage hängt davon ab, was Sie mit "identisch" meinen: Wenn Sie beispielsweise einen neuen Scheitelpunkt entlang der Kante eines Polygons einfügen, ist dies ein "identisches" Polygon oder nicht? Wohl ist es im Sinne darstellt , die gleiche Funktion in der Welt, obwohl die Ecken unterscheiden. Unter diesem Gesichtspunkt ist der einzig sichere Test, ob der (satztheoretische) Unterschied der beiden Polygone leer ist oder nicht. Wenn Sie jedoch die strengere Ansicht vertreten, dass Identität eine Scheitelpunkt-zu-Scheitelpunkt-Übereinstimmung bedeutet, ist dies immer noch schwierig, da ein Polygon seine Scheitelpunktliste an einem anderen Punkt beginnen könnte.
Whuber
1

Ich habe einen Datensatz basierend auf Umfragedaten. Mein Problem ist, dass alte Features nicht immer entfernt werden, bevor die neuen Umfrageaufnahmen importiert werden. Daher haben wir 'Duplikate' mit unterschiedlicher Geometrie: IE die Umfrageaufnahmen können 1/4 ft voneinander entfernt sein. Bei einem 12000-Feature-Dataset ist es schwierig, die einzelnen Elemente zu vergrößern und zu identifizieren. Verwenden von ArcMap Basic 10.2: Hier ist ein Hacky-Modell, das ich mir ausgedacht habe.

  1. Puffer (mit Eingaberadius) für jedes Feature in der ursprünglichen Ebene (ausgewählt oder nicht)
  2. Iterieren Sie über jedes Feature in der Pufferschicht
  3. Wählen Sie aus der ursprünglichen Ebene basierend auf der Beziehung (Centroid w / in-Funktion).
  4. Ausgewählte Features "Zeilenzahl"
  5. Feld Berechnen Zeilenzählwert für Pufferschicht = Wie viele Features befinden sich innerhalb des Radius der ursprünglichen Features?

Ich habe das Rad neu erfunden. Außerdem war ich frustriert über Model Builder und habe im Grunde genommen die ganze Sache verpatzt. Es muss eine elegantere Lösung geben. Kritik und Anregungen nehme ich gerne entgegen.

Außerdem scheint dies nur in Model Builder korrekt zu funktionieren. Ich benutze eine Toolbox und speichere die Pufferebene nicht.

Finden Sie doppelte Featuers

Barrett
quelle
1

Ich habe seit einiger Zeit nach einer Antwort auf dieselbe Frage gesucht, um die Abflachung des Problems überlappender Pufferpolygone zu überwinden, und denke, ich habe eine robuste Lösung dafür gefunden. In der Tat @ Whubers Kommentar,

Im Prinzip identifizieren der Schwerpunkt, der Umfang und die Fläche ein Polygon möglicherweise noch nicht eindeutig, aber die Gegenbeispiele sind ein wenig konstruiert.

on @ Pauls Antwort war für mich der Haupttrieb, es weiter zu versuchen. Es wird der ARE_IDENTICAL_TO- Operator des Spatial Join-Tools verwendet , da dieser unter anderen identischen Detektoren am effizientesten ist. Hier sind die Schritte:

  • Self Union Ihre Eingabe, um alle Formen voneinander zu unterscheiden;
  • Erstellen Sie ein Dummy-Feld, um die ursprünglichen OBJECTID-Werte (dh den OID-Feldtyp) der Zeilen beizubehalten bzw. zu kopieren, z. B. EX_OID .
    • Führen Sie den räumlichen Join für die Feature-Class aus, die sowohl als Ziel- als auch als Join-Feature-Parameter verarbeitet werden soll. Stellen Sie sicher, dass die zuvor erstellten Feldzuordnungen von Dummy-Feldern (die zweimal angezeigt werden) die Zusammenführungsregel FIRST aufweisen (dies ist die Standardeinstellung oder wählen Sie LAST. Die anderen geben möglicherweise nicht die gewünschte Ausgabe aus, da sie eine Zusammenfassung der Überlappungen verwenden). In diesem Schritt wird die gemeinsame Form OBJECTID ausgewählt, die über allen Überlappungen liegt (dh FIRST).

Die folgenden Schritte können auf zwei Arten ausgeführt werden, WITH Python oder WITHOUT:

MIT PYTHON

  • Verwenden Sie den folgenden Code, um eindeutige IDs zu extrahieren, die gesucht werden sollen:

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

Beachten Sie, dass ich die zweite Kopie des Dummy-OID-Felds verwende, in meinem Fall EX_OID_1.

  • Kopieren Sie die Ausgabe dieses Code und fügen Sie diese in die Definition Abfrage des ursprünglichen Feature - Class verarbeitet OBJECTID IN (<PASTE_COPIED_VALUES_HERE>). Das Ergebnis zeigt Ihnen die einheitlichen Merkmale der überlappenden Teile. Es gibt hier jedoch eine Größenbeschränkung von 30.000 Zeichen. Um dieses Problem zu beheben, müssen Sie die Schritte "ohne Python" ausführen.

OHNE PYTHON

  • Verwenden Sie das Tool "Häufigkeit", um eindeutige Werte in der zweiten Kopie des OID-Dummy-Felds aufzulisten, in meinem Fall EX_OID_1.

  • Verknüpfen Sie zuletzt das Feld OBJECTID der ursprünglichen Feature-Class mit der Ausgabe von EX_OID_1 des Frequenz-Tools, indem Sie die Option "Nur übereinstimmende Datensätze beibehalten " auswählen.

fatih_dur
quelle