In een eerder artikel heb ik laten zien hoe gegevens uit een tekstbestand als een extra laag op een kaart kunnen worden weergegeven. Het ging hier om punten die over gebieden heen werden gelegd. De gegevens in beide lagen bleven echter gescheiden. In dit artikel leg ik uit hoe de gebieden uit de ene laag kunnen worden ingekleurd op basis van gegevens uit een tekstbestand in een andere laag. Als voorbeeld wordt de nabijheid van warenhuizen per gemeente in 2010 gebruikt.
De ene laag is de andere niet
Vooraf is het nodig om te wijzen op een ongemak waar je met QGIS geregeld tegenaan zult lopen. De ene laag is namelijk de andere niet. Lagen kunnen uit verschillende bronnen komen, zoals een database, een shapefile of een tekstbestand. Nadat die lagen zijn geopend zie je in eerste instantie geen verschil. Toch maakt het voor de mogelijkheden uit wat de herkomst van een laag is. Dat geldt in ieder geval voor het koppelen van gegevens aan een andere laag en voor het visualiseren van gekoppelde gegevens. Hierbij speelt ook de manier waarop QGIS met datatypen omgaat een rol. Numerieke velden worden soms als tekst beschouwd, waardoor ze niet kunnen worden gebruikt om data te visualiseren.
Voorbereiding gegevens
Sinds versie 1.7 is het vrij eenvoudig gegevens van twee lagen aan elkaar te koppelen. Dat gebeurt in het dialoogvenster ‘Layer properties’ (‘Laag eigenschappen’), op het tabblad ‘Joins’ (‘Koppelingen’). Een laag die met ‘Add delimited text layer’ (‘Toevoegen tekengescheiden kaartlaag’) is toegevoegd kan helaas niet direct worden gekoppeld. Het kan wel met een tussenstap, door de laag eerst op te slaan als een shapefile. In dit artikel wordt echter een andere methode gebruikt.
Er is namelijk nog een andere manier om gegevens uit een tekstbestand te importeren in QGIS. Verwarrend genoeg gaat dat via de knop ‘Add vector layer’ (‘Vectorlaag toevoegen’). De voorbereidingen bestaan uit twee stappen.
De eerste stap is het maken van een CSV-bestand. Dat moet in ieder geval een kolom bevatten waarmee de koppeling aan de andere laag kan worden gemaakt (in dit geval de gemeentecode). Verder de gegevens die je wilt weergeven (in dit geval de nabijheid van supermarkten en warenhuizen). In dit geval hoeft het tekstbestand geen coördinaten te bevatten. Let er wel op dat het decimale teken niet hetzelfde is als het veldscheidingsteken. De Nederlandstalige Excel-versie gebruikt automatisch een puntkomma als veldscheidingsteken. In LibreOffice Calc kun je zelf het veldscheidingsteken kiezen.
De tweede stap is het maken van een CSVT-bestand, waarin de datatypen worden gespecificeerd. Dit is een tekstbestand dat uit één regel bestaat. Voor elke kolom wordt het datatype tussen dubbele aanhalingstekens gezet. De nadere specificatie tussen haakjes is niet verplicht. Hiermee kunnen veldlengte en nauwkeurigheid worden ingesteld. Met het CSVT-bestand dwing je QGIS om numerieke velden ook echt als numeriek te behandelen.
Nu kan het CSV-bestand in QGIS worden geopend. Klik op de knop ‘Add vector layer’ (‘Vectorlaag toevoegen’). Controleer of de codering op ISO8859-1 staat. Diacritische tekens in gemeentenamen worden anders niet goed weergegeven. Klik vervolgens op op ‘Browse’ (‘Bladeren’).
Mogelijk zie je nu je bestand nog niet. Zet dan rechtsonder het filter op ‘Comma Separated Value’ (of op ‘All files’). Selecteer nu je databestand met de extensie ‘.csv’.
Gegevens koppelen
In de lijst met lagen zie je nu een nieuwe laag. Het symbool geeft aan dat het om niet-ruimtelijke gegevens gaat. Open nu de shapefile met je gebiedsindeling (in dit geval de gemeenten van 2010). Dubbelklik op de laag, ga naar het tabblad ‘Joins’ (‘Koppelingen’) en klik op het plusteken. Selecteer de juiste laag en stel de velden in de gebruikt moeten worden voor de koppeling.
Nadat je deze keuze hebt bevestigd, zie je dat er een laag is toegevoegd. Je kunt het resultaat nader bekijken door naar het tabblad ‘Fields’ (‘Velden’) te gaan. Let vooral op het datatype. Verder kun je de attributentabel bekijken. Maar dat gebeurt buiten dit dialoogvenster.
De gegevens zijn nu gekoppeld aan de kaart met gemeenten. Het kaartbestand zelf is echter ongewijzigd. (Wil je bepaalde gegevens permanent toevoegen aan je gemeentekaart, dan kun je de gemeentekaart op de gebruikelijke wijze opslaan onder een andere naam.)
Gebieden inkleuren
Nu de gegevens aan de kaart zijn gekoppeld, kun je die op de gebruikelijke manier inkleuren. Het automatisch classificeren werkt bij gekoppelde gegevens niet altijd. Stel in dat geval zelf de onder- en bovengrenzen per categorie in.
Andere presentatievormen
De gekoppelde gegevens kunnen ook op andere manieren worden weergegeven, maar niet alle opties werken. Je kunt wel staafdiagrammen maken via het tabblad ‘Diagrams’ (‘Diagrammen’), maar het tabblad ‘Overlays’ negeert de gekoppelde gegevens. Voor het weergeven van cirkels, taartdiagrammen en staafdiagrammen is koppeling aan een laag met gebieden echter geen noodzaak. Dit werkt veel beter met ‘Add delimited text layer’ (‘Toevoegen tekengescheiden kaartlaag’). In dat geval moet je tekstbestand wel coördinaten bevatten. Dit heeft als bijkomend voordeel dat je zelf exact kunt bepalen waar de symbolen worden neergezet.
Since QGis 1.8.0, you can directly open XLS files from QGis. Just open an XLS file as a vector (using the All files filter). You do not need to convert those files to CSV format. Data types from XLS files are also well managed by QGis (means integers are found as integers, string as strings, etc.) and you do not need to build a CSVT file anymore.
when I do try to open xls qsig answer that is not a valid format
Thanks, this works fine. However if you update the CSV file with new data is there anyway to get the project to refresh, reread the original csv file etc. Otherwise the only way around this seems to be to edit the joined attribute table if you do not wish to recreate the labels colour schemes etc.
Jeff Wilson
If I change a value in a CSV file and open the project again, the area gets a different colour, as I would expect.
Thank you for your helpful post. I didn’t manage to join a .csv file because the .csvt file was missing !!
Ik heb met de bovenstaande info een joint gemaakt, ik heb een database met stage adressen van studenten, echter er zijn studenten die in dezelfde gemeente stagelopen, bij de joint zie ik de dubbelingen niet. Hoe kan ik dit beter doen?
Bij het koppelen van gegevens aan een gemeentekaart is het de bedoeling dat iedere gemeente maar een keer voorkomt. Je tekstbestand moet dus geen individuele studenten bevatten, maar per gemeente een getal voor het aantal studenten.
QGIS is overigens sinds ik dit artikel schreef sterk verbeterd. Om een csv-bestand direct te kunnen koppelen, is geen csvt-bestand meer nodig. Ik werk nu zelf altijd met tabs als scheidingsteken. Dat is ook wat je krijgt als je vanuit bijv. Excel een selectie in een tekst editor zoals Kladblok/Notepad plakt.
Dank je, volgens mij kan dit wel in ArcGIS, met een spatial join.
nee geen spatial join