Mehrere Datensätze mithilfe von QGIS zu einem Feature zusammenfügen?

25

Ich versuche, eine Verknüpfung in QGIS zu erstellen, in der ich ein Shapefile von Gebäuden habe, und dazu möchte ich einer nicht räumlichen Tabelle (.csv) beitreten, die Personen enthält, die in jedem Gebäude arbeiten. Ich habe also mehrere Datensätze in meiner Tabelle, die ich mit meinen einzelnen Features in meinem Shapefile verknüpfen möchte. Ich kann in QGIS nur einen Join ausführen, bei dem der erste Datensatz mit dem Shapefile-Feature (dh dem Erstellen) verknüpft wird, nachfolgende Datensätze jedoch entfernt werden.

Könnte jemand mich wissen lassen, wie ich diesen Beitritt / Bezug in QGIS vervollständige?

Mick
quelle
Ich hatte hier eine ähnliche Frage gis.stackexchange.com/questions/5797/… RT SQL Layer Plugin und die eVis Plugins wurden vorgeschlagen. Ich habe das eVis-Plugin verwendet, aber es war nicht die ideale Lösung.
Ando
2
Ich habe das gleiche Problem und in der Tat arbeiten Tabellen beitreten. Der Trick besteht darin, die Tabellen mit mehreren Werten mit dem einzelnen Wert der Tabelle zu verbinden (hier von Person zu Gebäude und nicht umgekehrt). Das Problem ist meines Erachtens, dass Sie auf diese Weise das Ergebnis nicht als georeferenzierte Datei suchen und exportieren können, was (zumindest für mich) ein Fehler ist. Wie kann dieses Problem umgangen werden? marc
Was ist das Endergebnis, das Sie erreichen möchten? Möchten Sie eine Verknüpfung auch dann auf einer Karte darstellen, wenn Sie es schaffen, eine Verknüpfung zu erstellen? Statistiken machen? Abhängig davon können verschiedene Workflows befolgt werden. Die Verwendung einer Datenbank ist jedoch in der Regel eine gute Idee, wenn Sie Verknüpfungen herstellen möchten.
Johanvdw

Antworten:

15

Ich habe dieses Problem mit QGIS 1.7.0 gelöst, indem ich die Vektorebene zunächst als CSV-Tabelle (Comma Separated Values) gespeichert und das Geometriefeld in einen bekannten Text konvertiert habe. Dazu muss im Ebenenfeld des Dialogfelds "Vektorebene speichern unter ..." GEOMETRY = AS_WKT lauten, um ein bekanntes Textfeld der Geometrie mit der Spalte WKT zu erstellen.

Die CSV-Geometriedatei wurde dann in einer Eins-zu-Viele-Verknüpfung auf der Registerkarte Eigenschaftenverknüpfungen der Nicht-Geometrieattributtabelle mit der Nicht-Geometrieattributtabelle verknüpft.

Die resultierende Verknüpfung wurde als andere Geometrie-CSV-Datei gespeichert.

Beim Öffnen dieser Tabelle in QGIS wurde jeder Attributdatensatz durch seine entsprechende Vektorgeometrie dargestellt.

Dabei habe ich festgestellt, dass das Delimited Text Plugin nicht zum Öffnen einer CSV-Geometriedatei erforderlich ist, wenn die Begrenzer Kommas sind und das WKT-Geometriefeld den Namen WKT trägt.

Einzelheiten dazu finden Sie in meinem Tutorial unter http://georgiawildlife.com/node/2849 .

Greg Krakow
quelle
Guter Ansatz, ich habe etwas Ähnliches getan, nur ogr2ogrum die CSV-Dateien aus den Shapefiles zu erstellen. Dann ein einfaches R-Skript, um die Dateien auf dem gewünschten gemeinsamen Feld zusammenzuführen und an CSV zurückzuschreiben. Dann ogr2ogrnochmal das zusammengeführte Shapefile erstellen.
Vpipkt
1
Dies kann als das höchste eingestuft werden, aber der dafür vorgesehene Prozess wird von @underdark unten beantwortet. Dies ist ein Hack und überhaupt nicht die beste Option, es ist langsam und ineffizient und führt zu größeren Dateien und mehr Schritten.
Nittyjee
10

In den Layereigenschaften erstellte Joins fügen nur Spalten zu vorhandenen Features hinzu. Wenn die Vektorebene nur 160 Features enthält, kann ein Join die Anzahl der Features nicht erhöhen!

Verwenden Sie stattdessen die Funktion für virtuelle Ebenen. Es bietet echte SQL / Datenbank-ähnliche Verknüpfungen. Ein Beispiel finden Sie in meinem letzten Beitrag: Kleine Multiples für OD-Flow-Maps mit virtuellen Layern

Bildbeschreibung hier eingeben

Underdunkel
quelle
7

In QGIS 1.7 gibt es eine neue Engine für Joins (Sie finden sie in den Vektoreigenschaften).

Geometrielose Tabellen können nun wie jede andere (Vektor-) Ebene zu einem Projekt hinzugefügt werden.

Giovanni Manghi
quelle
7

Ab Version 2.2 unterstützt QGIS Eins-zu-Viele-Beziehungen. Definieren Sie sie jedoch in den Projekteigenschaften, nicht in den Eigenschaften der Vektorebene. Anschließend werden über das Formular verknüpfte Datensätze in der Attributtabelle des Layers oder in Identify Results angezeigt.

Siehe Antwort und Link zu guter Anleitung hier .

Anna Pestereva
quelle
4

Machen Sie den Join in LibreOffice Base.

Sie können die Tatsache nicht überwinden, dass Sie versuchen, eine 1 zu viele Beziehung zu verwalten.

Für nichträumliche bis nichträumliche lohnt es sich zu lernen. Ich finde, der größte Trick besteht darin, sicherzustellen, dass die Join-Attributfelder genau die gleichen Begriffe haben.

Öffnen Sie die räumlich lokalisierten Daten als Layer in QGIS, und wählen Sie dann alle Datensätze in der Attributtabelle in QGIS aus (Auswahl aufheben, Auswahl umkehren) und kopieren Sie diese in ein neues Blatt in LibreOffice Calc. Sie werden feststellen, dass das erste Feld WKT ist, eine Beschreibung der Funktion, die in GIS universell verwendet werden kann. Calc gibt Ihnen einen Dialog zum Importieren der eingefügten Tabelle, wählt tabulatorgetrennte Tabulatoren und stellt sicher, dass das Komma nicht angekreuzt ist, da das WKT-Feld dadurch in Bits zerlegt wird. Markieren Sie dann diese Tabelle in Calc, wechseln Sie zu Base, markieren Sie das Tabellensymbol auf der linken Seite und fügen Sie es ein. Base führt einen Dialog durch, um die Tabelle zu importieren. Das WKT-Feld kann über den Join beibehalten werden. Wenn die Datei als .csv zurück in QGIS importiert wird, werden diese zum Verschieben der Features verwendet. Erinnern Sie sich einfach an die Projektion.

Auf diese Weise haben Sie die volle Kontrolle über den Join und können dies in umgekehrter Reihenfolge tun. Wenn Sie Joins in Base ausführen möchten, stellen Sie sicher, dass das eindeutige Datenfeld (die 1) ein Primärschlüssel ist, und zeigen Sie es dann auf "viele", wenn Sie mit einem 1: viele- oder 1: n-Konzept vertraut sind. Joins werden durch Herstellen von Beziehungen | TOOLS | erstellt. Wie ich bereits erwähnt habe, möchten Sie wahrscheinlich jemanden kicken, wenn Sie feststellen, dass die Verknüpfungsfelder dieselben Informationen enthalten, aber unterschiedliche Texte oder Syntaxen zur Darstellung verwendet haben.

hth

BWill
quelle
2

Ich denke nicht, dass dies möglich ist, um Tabellen mit einer 1 zu vielen Beziehung in QGIS zu verknüpfen. Alternativ können Sie gvSIG ausprobieren. Hier können Sie 1 bis viele Links erstellen. Wenn Sie nach dem Erstellen des Links ein Feature in der Karte auswählen, werden alle zugehörigen Datensätze in der verknüpften Tabelle hervorgehoben.

Ecodiv
quelle
1
Seit der Einführung der virtuellen Ebenen ist diese Antwort nicht mehr korrekt.
Underdunkel