Ich brauche eine Möglichkeit, Rasterzellen (Polygon 15x15m), die direkt übereinander liegen, programmgesteuert zusammenzuführen und einige ihrer Attribute zu addieren.
Ich arbeite in ArcGIS 10.1 mit den Daten, die als Polygon-Feature-Class gespeichert sind.
Die Daten sind das Ergebnis einer Fußgängerbefragung über ein vordefiniertes Raster. Gelegentlich verlassen die Leute, die die Fußgängervermessung durchführen, den Kurs und zeichnen etwas in einer Spalte oder Zeile neben der auf, in der sie arbeiten (oder die GPS-Position wandert). Dies führt dazu, dass zwei Datensätze für jede Zelle aufgezeichnet werden, wenn die Daten von mehreren GPS-Einheiten an eine einzelne Feature-Class angehängt werden. Ich brauche einen Weg, um durch jede Zelle zu gehen, zu überprüfen, ob es doppelte Features gibt, ob es dann ihre Attribute zusammenführt (eine Ganzzahl, ein Text), und dann das eine Feature zu löschen, das die zusammengeführten Daten nicht erhalten hat.
Die Tools "Identisch löschen" und "Identisch suchen" machen nicht das, wonach ich suche - und es manuell zu tun ist keine Option, da die Feature-Class häufig mehr als 10.000 Features enthält.
Ich weiß, wie man die Feature-Class mit Python durchläuft und prüft, ob sich an dieser Stelle doppelte Features befinden. Ich weiß nicht, wie ich die Features zusammenführen und die Attribute aktualisieren soll. Wenn jemand eine Anleitung dazu geben kann, würde ich es sehr schätzen.
BEARBEITEN - Weitere Beschreibung des Vorher / Nachher-Status: In der Abbildung unten sind zwei Funktionen ausgewählt - identische 15 x 15 Quadratmeter große Polygone. Ich muss alle ganzzahligen Felder (die mit TOT_ als Präfix) addieren und die GPS_UNIT, INITIALS anhängen und REC_DATE-Zeichenfolgenfelder.
Es ist schwierig zu zeigen, da sich die Features direkt überlappen.
BEARBEITEN 2: Ich habe festgestellt, dass ich die duplizierten Features leicht identifizieren kann, indem ich ihre XY-Zentren berechne, sie zu einem Zeichenfolgenfeld als [X] & ',' & [Y] verkette, dann die Datenbank beim Zugriff öffne und eine Abfrage zum Suchen von Duplikaten verwende um zu identifizieren, welche der Zellen dupliziert wurden. Es ist mir jedoch nicht gelungen, einen guten Weg zu finden, um die Attribute für jede der Zellen in einer einzigen Zeile zusammenzuführen. Hilfe dabei, entweder in Python oder in einer Datenbankumgebung, wäre sehr willkommen!
Antworten:
Da Sie wissen, wie Sie die Features, die Sie zusammenführen möchten, iterieren und finden, würde ich eine Funktion erstellen, um die Zusammenführung durchzuführen, die wahrscheinlich arcpy.Dissovle_management () sein könnte. Wenn Sie die Auflösung durchführen, können Sie wahrscheinlich die Aggregationsparameter verwenden, um die Attribute zu kombinieren. Löschen Sie dann diese Features aus dem Original und aktualisieren Sie die Daten mit einem Einfügecursor zurück.
Wie erkennen Sie, welche Funktionen zusammengeführt werden müssen?
quelle
Nachdem ich zu Postgres migriert war und einige leistungsfähigere Tools zur Hand hatte, löste ich dieses Problem. Meine Lösung bestand darin, einfach zusätzliche Features mit identischen GEOM-Feldern zu löschen - natürlich eines zu belassen und dann die Werte aus den anderen Daten neu zu berechnen, die während der Feldarbeit gesammelt wurden. Dies gab mir einen Datensatz ohne räumlich übereinstimmende Merkmale und genaue Summen in den Attributtabellen. Der vollständige PHP-Code, den ich verwendet habe, ist unten; Ich bin mir sicher, dass das Gleiche in Python erreicht werden kann, aber PHP war zu dieser Zeit der einfachste Weg für mich.
quelle
Da Sie nur Attribute für Zellen (tatsächlich Polygone) zusammenführen möchten, die identisch sind, würde ich Union verwenden und alle Attribute beibehalten. Auf diese Weise können Sie alle resultierenden Polygone (Zellen) durchlaufen und auf beide Sätze von Originalattributen zugreifen, um die gewünschten neuen Werte zu schreiben. Wenn beide ursprünglichen Feature-Classes dieselben Attributnamen verwenden, müssen Sie möglicherweise Felder vor der Union umbenennen, damit beide verfügbar bleiben.
Ein kurzes erneutes Lesen Ihrer Frage zeigt mir, dass Sie nur eine Eingabe-Feature-Class haben. Union kann weiterhin nützlich sein, da es wie hier beschrieben für eine einzelne Feature-Class ausgeführt werden kann .
quelle