Tabellenverknüpfung mit CSV-Datei führt nach der Verknüpfung zu Nullfeldern

8

Ähnlich wie bei Fragen, die bereits zu DBF-Dateien gestellt wurden, versuche ich, CSV-Dateien mit einer GDB- oder Shapefile-Abdeckung in QGIS zu verknüpfen. Die Tabellen, die vor dem Join zu QGIS hinzugefügt wurden, sehen gut aus. Nach Abschluss des Joins enthält die zusammengeführte Tabelle jedoch NULL-Werte für alle verknüpften Felder. Das gleiche passiert mit einer Vielzahl unterschiedlicher Tabellen und unabhängig davon, ob ich einer Shapefile- oder einer GDB-Datei beitrete.

Ich verwende QGIS 2.0.1 unter OSX 10.8.5. Die ursprünglichen Tabellendateien sind im MDB-Format enthalten, daher habe ich den MDB ACCDB Viewer gekauft und verwendet, um sie in CSV zu exportieren. Die Tatsache, dass sie bei separater Anzeige in Ordnung sind, lässt mich glauben, dass das Problem beim Join-Verfahren liegt, nicht beim Tabellen selbst.

Vorschläge?

KMT
quelle
Bezogen auf [Link] ( gis.stackexchange.com/questions/63804/… )
KMT
Können Sie überprüfen, ob die Spalte in der CSV vom selben Typ ist wie die Spalte, durch die im Ziel-Shapefile / GDB verbunden wird? Normalerweise können Sie die Feldtypen im Eigenschaftenfenster für jede Ebene anzeigen, indem Sie zur Registerkarte Felder wechseln.
SaultDon
1
Aha - das Shapefile hat also ein ganzzahliges Feld, während alle Tabellenfelder Zeichenfolgenfelder sind. Hätte die Konvertierung von .mdb nach .csv die Feldtypen verloren? Kann ich den Feldtyp einfach im Eigenschaftendialog ändern?
KMT
Überprüfen Sie unbedingt, ob Sie genaue Übereinstimmungen haben. Ich hatte dieses Problem auch dann, wenn die Feldtypen übereinstimmten. Es stellte sich heraus, dass ich einen führenden Leerraum in meinen Saiten hatte. Dies wurde behoben, indem mithilfe der QGIS- trim(oldField)Funktionalität ein neues Feld erstellt wurde .
Lauren

Antworten:

2

CSV-Dateien in QGIS importieren standardmäßig alle Daten als Zeichenfolgen. Sie müssen eine CSVT-Textdatei erstellen, die QGIS mitteilt, welche Spalten als welche Datentypen angegeben werden sollen.

A .csvt file contains only one line and the types for each column have to be quoted and comma separated, e.g.

"Integer","Real","String"

Zitiert von: http://anitagraser.com/2011/03/07/how-to-specify-data-types-of-csv-columns-for-use-in-qgis/

Dann sind Ihre Daten vom gleichen Typ und der Join sollte funktionieren.

Amos Budde
quelle
Danke @Amos Budde, ich werde auch die .csvt-Route ausprobieren, aber wie sich herausstellt, habe ich ein anderes Shapefile und eine andere Tabelle ausprobiert, beide mit Zeichenfolgenfeldern, und funktioniert immer noch nicht - ich erhalte Nullwerte in der verknüpften Tabelle . Meine Daten werden oben geteilt - können Sie es versuchen?
KMT
Ich habe es gerade mit einer CSVT-Datei versucht und immer noch kein Glück. Funktioniert es für dich?
KMT
2

Am besten stellen Sie sicher, dass die beiden Felder denselben Datentyp haben.

Der Feldtyp kann für Shapefiles nicht geändert werden . Es ist jedoch einfach, ein neues leeres Textfeld zu erstellen und dieses dem Ganzzahlfeld gleichzusetzen.

Sie können einen Feldrechnerausdruck verwenden, der ungefähr so ​​aussieht: tostring( "INT_FIELD" )und einfach durch INT_FIELDden Namen des tatsächlichen Ganzzahlfelds ersetzen .

Sie können einen CSV-Layer-Attributwert auch einfach aus der Textnummer <-> ändern .


AKTUALISIEREN

Wenn Sie Nullwerte erhalten, können Sie versuchen, den Join beizubehalten, aber diese Attributtabelle einfach schließen und erneut öffnen, um festzustellen, ob die verknüpften Werte vorhanden sind (oder sogar QGIS schließen / erneut öffnen).

Ich konnte eine CSV erfolgreich mit einem Shapefile mit einer Mischung von Feldtypen verknüpfen, sodass String vs. Integer nicht das Problem sein sollte.


UPDATE 2

Um die Nullwerte zu entfernen, müssen sie tatsächlich einen übereinstimmenden Datensatz in der entsprechenden Tabelle haben, aus der Verknüpfungen erstellt werden. Aber im Bild unten können Sie sehen, dass einige einen passenden Datensatz haben:

erfolgreiche Verbindungen in gelb

SaultDon
quelle
Ok, selbst wenn beide Zeichenfolgenwerte sind, habe ich das Problem der NULL-Werte in der verknüpften Tabelle. Andere Gedanken?
KMT
Kein Glück beim Schließen / Öffnen der Attributtabelle oder von QGIS.
KMT
@KMT Haben Sie Daten, die Sie teilen können, damit jeder sie testen kann?
SaultDon
Sicher. Shapefile unter dropbox.com/sh/jvbh2pafm2dreec/lr0GiFiq2t (unter Verwendung der Datei "Delta Covers"). Tabelle unter dropbox.com/sh/qw25uxmaoo6pgqh/s8EKrU9DfL (unter Verwendung der Tabelle "Covers_Survey"). Auch eine .gdb Datei (gleiche wie die Shape - Datei) bei dropbox.com/sh/8vdalc68jjd2c7i/iFpsm7MgAD . Join basierend auf den Feldern "Covlnk_text" (Shapefile) und "Covlnktxt" (Tabelle).
KMT
1
@KMT Ich glaube nicht, dass das Konvertieren von Felddatentypen überhaupt hilfreich ist, da die Werte immer noch nicht übereinstimmen. Ich würde zu den Quelldaten (der MDB) zurückkehren und die Werte in der Ausgabe-CSV mit der MDB-Tabelle vergleichen (vielleicht wurden sie auf dem Weg irgendwie durcheinander gebracht). LibreOffice Base kann auch eine MDB öffnen.
SaultDon