Ich habe ein Problem, bei dem ich meinen Kopf nicht herumkriegen kann. Ich habe zwei Polygonebenen:
- Polygon A - ist eine Teilmenge von Polygon B mit denselben Feldern und identischen Polygonen wie Polygon B.
- Polygon B - hat die Attributdaten, die ich in Polygon A haben möchte
Wie kann das gemacht werden? Ich habe das QGIS-Tool "Attribute nach Standort verbinden" ausprobiert, aber da sich einige der Polygone in anderen befinden, wird es in der Regel mit dem ersten gefundenen Schnittpunkt (dem äußeren Polygon) verknüpft.
qgis
arcgis-desktop
Diego R.
quelle
quelle
Antworten:
@Dano wirft zu Recht einige Probleme auf, die am besten in einer vollständigen Antwort behandelt werden.
Eine Schwierigkeit , die bereits von @Celenius festgestellt wurde, besteht darin, dass eine Verknüpfung zwischen B und A (in beide Richtungen) alle Felder dupliziert. es kann mühsam sein, dies zu korrigieren. Ich habe in Kommentaren vorgeschlagen, dass der offensichtlich einfache Weg (Export in eine Tabelle) Fragen der Datenintegrität aufwirft. Eine weitere Schwierigkeit , die bereits in Celenius 'Vorschlag angesprochen wurde, betrifft die Lösung dieses Problems, wenn keine Kombination von Attributen als Schlüssel für A und B dienen kann, da dies einen Datenbank-Join ausschließt. Die räumliche Verknüpfung umgeht dieses Problem.
Was ist dann eine gute Lösung? Ein Ansatz verwendet A, um die entsprechenden Datensätze von B zu identifizieren, die die gewünschten Daten enthalten. Abhängig von den Annahmen über die Konfigurationen der Polygone - ob sie sich überlappen, ob einige andere enthalten können usw. - kann dies auf verschiedene Arten erfolgen: Verwenden einer Ebene zum Auswählen von Objekten in der anderen oder über Verknüpfungen. Der Punkt hier ist, dass wir in diesem Stadium nur die Teilmenge von B auswählen möchten, die A entspricht.
Nachdem Sie diese Auswahl getroffen haben, exportieren Sie die Auswahl und lassen Sie sie A ersetzen. Fertig .
Diese Lösung setzt voraus, dass alle Felder in B ihre Gegenstücke in A ersetzen sollen. Wenn nicht, ist es wirklich notwendig , eine 1-1-Verknüpfung von B (Quelle) mit A (Ziel) durchzuführen. Der auf Bezeichnern basierende Join ist am besten, aber ein Join für die Polygonidentität (Celenius) funktioniert einwandfrei, wenn keine IDs verfügbar sind und die entsprechenden Polygonformen in A und B möglicherweise nicht geringfügig voneinander abweichen . (Dies ist ein subtiler Punkt und die mögliche Ursache für heimtückische Fehler, da frühere Änderungen in B an Polygonen, die nicht A entsprechen, die anderen Polygone in B immer noch unsichtbar modifizieren können, wenn das GIS "schnappt" oder "Topologie beibehält". oder auf andere Weise automatisch globale Änderungen während lokaler Änderungen vornehmen.)
Zu diesem Zeitpunkt gibt es zwei Kopien von jedem Feld: Wenn [Foo] ein gemeinsames Feld für A und B ist, enthält der Join A. [Foo] und B. [Foo]. Kopieren Sie mit einer Feldberechnung B. [Foo] in A. [Foo]. Wiederholen Sie dies für alle benötigten Felder. Entfernen Sie anschließend den Join.
Obwohl dieses Verfahren in vielen Bereichen etwas aufwändig sein kann, gehören zu seinen Vorzügen
Einige der Leitprinzipien dieses Vorschlags sind:
Man könnte einwenden, dass es in vielen Fällen schnellere und einfachere Wege gibt, um das gleiche Ergebnis zu erzielen. Ja, das kann sein, und sie können effektiv sein und funktionieren normalerweise , wenn sie mit Sorgfalt durchgeführt werden. Lösungen, die die Daten gefährden, sind jedoch schwer zu empfehlen und als allgemeine Antworten zu verteidigen. Sie werden am besten in einmaligen Situationen mit kleinen Datenmengen eingesetzt, in denen eine Beschädigung der Daten schnell offensichtlich werden sollte und die Folgen solcher Fehler unerheblich sind.
quelle
In Arcmap können Sie Polygon B räumlich mit Polygon A verbinden. Dies würde die Attribute in Beziehung setzen. Da die Feldnamen identisch sind, wird eine neue Kombination des Namens erstellt.
quelle
Exportieren Sie die Tabelle für Shapefile "B" nach Excel und löschen Sie die redundanten Spalten sowie alle Spalten mit Informationen, die Sie nicht benötigen. Stellen Sie sicher, dass Sie Ihre Spalte mit der freigegebenen Kennung behalten, und speichern Sie sie dann im entsprechenden Ordner. Gehen Sie zu ArcMap, fügen Sie die Tabelle hinzu, klicken Sie mit der rechten Maustaste auf Shapefile "A" und führen Sie eine Tabellenverknüpfung durch . Der Link sollte zu einem Video dazu führen.
@ whuber - Der gesamte Ansatz ist solide und gewährleistet die Integrität der Daten. Das einzige, was ich sagen kann, um diese Antwort zu widerlegen, ist, dass bestimmte Situationen / Projekte uns nicht die Zeit oder das Budget bieten, um in unserem Ansatz so methodisch vorzugehen.
Ein naturgetreues Beispiel:
Eine Junior Mining Company sitzt auf einem großen Erzkörper mit Bargeldinfusionen in Höhe von Hunderten von Millionen Dollar, die auf ihrer Fähigkeit beruhen, die Ressource zu "beweisen". Eine Desktop-Überprüfung von Veröffentlichungen und geologischen Karten / Daten führt zu einem sehr gezielten und sehr kostspieligen Bohrprogramm. Wenn die Assays vom ersten Lauf zurückkommen, werden diese Werte über eine Tabellenverknüpfung an ihren jeweiligen Punktpositionen markiert und in einem Excel-Format zurückgepumpt, in dem die Daten sorgfältig für den Import in DataMine vorbereitet werden (für die 3D-Interpolation von Körpern oder Körpern).
Nach meiner Erfahrung forderten die Projektgeologen , dass diese Daten in Excel vorbereitet werden, dass JEDE Formatierungsregel / -konvention dem Buchstaben entspricht (keine Leerzeichen, keine Sonderzeichen usw.) und dass die DataMine-Importdatei in einem CSV-Format geliefert wird (damals sowieso). Dies würde zu mehr Investitionen in gezielte Bohrungen führen, und wir würden den Prozess (in einigen Fällen) um ein Vielfaches wiederholen. All dies geschah im Allgemeinen auf einer außergewöhnlich engen und kritischen Zeitachse.
Jeder von uns hat seine eigene Geschichte und seine eigenen Erfahrungen, die wir in unsere Herangehensweise an unsere Arbeitsweise einbezogen haben. Meine Erfahrung hat jedoch gezeigt, dass Excel eine absolute Notwendigkeit und ein wichtiges Werkzeug in meinen Arbeitsabläufen ist. es ist was ich weiß. Bei der Aufbereitung dieser Daten haben wir alle QA / QC-Vorsichtsmaßnahmen getroffen. Wo ihr euch vor Excel scheut, hatte ich keine andere Wahl, als es zu benutzen.
quelle
In den späten 90er Jahren erhielten wir ein umfangreiches Update aller unserer Gewässer und Wasserläufe, das etwa 55 NTS-Kartenblätter und eine nicht erinnerte Anzahl von Tausenden von Funktionen umfasste. Wir mussten die Mehrwertattribute unserer alten Hydrologie (Seenamen, Oberflächenhöhe usw.) beibehalten und die Geometrie ersetzen. Die Geometrie von Alt und Neu war so nah, dass wir garantieren konnten , dass die Schwerpunkte jedes Polygons immer noch durch die neuen Polygongrenzen begrenzt sind - dies ist ein wichtiger Punkt, ohne diese grundlegende Gewissheit ist der folgende Ansatz keine gute Idee.
Die Lösung in diesem speziellen Fall bestand darin, anstatt die Attribute in die Geometrie zu bringen, die Geometrie in die Attribute zu bringen. Also konzeptionell:
Sehen Sie hier für eine erweiterte Beschreibung und Rezept für ArcInfo-worksation . Ich bin mir nicht sicher, ob es in modernen Arcgis oder Qgis überhaupt möglich ist, eine Geometrie zu löschen, ohne gleichzeitig den Attributdatensatz zu löschen, aber hey, nur für den Fall, hier ist die Idee.
quelle
Ich bin nicht sicher, aber vielleicht führen einige DBMS Gleichheitsoperationen für Formfelder in SQL (?) Aus. Wenn zwei Geometrien identisch sind, sollte der SQL-
=
Operator true (WHERE A.Shape = B.Shape
) zurückgeben.Wenn dies für die von Ihnen verwendete Datenbank zutrifft, sollten Sie in der Lage sein, einen räumlichen Join mit derselben Syntax durchzuführen, die Sie für einen nicht räumlichen Join verwenden würden.
Es sieht so aus, als könnte hierfür die ST_Equals- Methode (ein OGC-Standard) verwendet werden.
quelle
Wie immer hat whuber recht. Sie müssen gründlich über Ihren Prozess nachdenken. Insbesondere wenn es sich um große Datenmengen handelt und dieser Vorgang viele Male ausgeführt wird oder die Daten geschäftskritisch sind.
Berücksichtigen Sie Ihre Daten und Verantwortlichkeiten:
Was hast du getan?
Was tust du?
Was hast du vor zu machen?
Und immer fragen: Warum?
Nun zu einer einfachen Antwort, die direkt auf die gestellte Frage abzielt. Denken Sie daran, es gibt immer mindestens 5 Möglichkeiten, Dinge zu tun, aber normalerweise nur eine beste.
Angenommen, die Gesamtmenge enthält alle Attribute, die in der Teilmenge enthalten sein sollen, und die Teilmenge enthält nur veraltete Informationen, die noch nicht in der Teilmenge enthalten sind.
Vermutung, dass die Topologie der Teilmenge mit der Gesamtmenge übereinstimmt (einschließlich Ursprung / Projektion und XY-Toleranz).
1) Verwenden Sie Feature to Point mit aktiviertem Kontrollkästchen "Inside" und erstellen Sie eine Feature-Klasse oder ein Shapefile für Punkte aus der Teilmenge.
2) Verwenden Sie eine Auswahl nach räumlicher Verknüpfung, um alle Polygone im vollständigen Satz zu finden, die der Teilmenge basierend auf der neu erstellten Punkt-Feature-Class oder dem Shapefile entsprechen.
3) Exportieren Sie die Auswahl aus dem gesamten Satz, und das kann Ihre neue Teilmenge sein.
quelle
Wenn Polygon A eine Teilmenge von Polygon B ist, besteht der einfachste Ansatz darin, Polygon A zu durchlaufen und die ID in Polygon A (und B, wenn A eine Teilmenge oder B wäre) zu verwenden, um nach den Zeilendaten in zu suchen Polygon B und aktualisieren Sie dann die Zeile in Polygon A.
quelle