Waarden in samengestelde velden gebruiken

Bij het inlezen van sommige databronnen voegt Qgis meerdere waarden samen in een veld. Dit komt vooral vaak voor bij het inlezen van een gml-bestand zoals een bestand uit de BGT of een bestemmingsplan (IMRO).

Zo’n veld met meerdere waarden ziet er dan uit zoals in de volgende voorbeelden:bgt_1(BGT)

imro_1(IMRO)

De opzet is heel duidelijk. Als er zoiets staat als

(2:10,50)

dan betekent dat dat er twee waarden zijn opgenomen, in dit geval “10” en “50”.

Deze opzet is best goed leesbaar, maar het valt nog niet  mee om bijvoorbeeld labels te maken op basis van zo’n veld, of de waarden uit te splitsen naar verschillende kolommen met behulp van de field calculator.

Gelukkig is het niet moeilijk om een zogenaamde custom functie aan Qgis toe te voegen waarmee het wel gemakkelijk gaat.

In dit voorbeeld gaan we aan de slag met het zetten van labels op de panden in de BGT. Voeg daarvoor de pand laag toe uit de BGT met behulp van de QGIS plugin, en ga daarna via de eigenschappen van de laag naar het tabblad “labels” en kies voor de Expression Builder als in onderstaand voorbeeld:

labels

Kies daarna voor de Function Editoropen_functio_editor

en maak een nieuw bestand aan.  Plak dan vervolgens het volgende script in het venster:

from qgis.core import *
from qgis.gui import *

@qgsfunction(args='auto', group='Custom')
def values_from_list(string, number, feature, parent):
	"""
	Takes the n-th value from a list in a field where 
        the list is written like: (3:value1, value2,value3). 
        Such lists are often a result of importing gml. <br />
	
	<h3>Syntax</h3>
	
	values_from_list(<i>string</i>, <i>number</i>)
	
	<h3>Arguments</h3><br/>
	
	<i>string</i> The string containing the list
                      in format like 
                      (3:value1, value2,value3) <br/>
	<i>number</i> The index number of the value 
                      in the list to return
	
	<h3>Examples</h3>
	
	<pre>values_from_list("text", 1)</pre>
	
	"""
	
	components = string.strip('()').split(':',1)
	values_list = components[1]
	try:
		return values_list.split(',')[number - 1]
	except:
		return None

Dit script kun je ivm het kritisch gebruik van spaties en tabs in Python beter overplakken vanuit GitHub). Het venster ziet er dan als het goed is ongeveer zo uit:
add_functionVergeet daarna niet op de knop “>Load” te drukken!

Daarna kun je via het tabblad “Expression” de functie gebruiken. Je vindt deze onder het item “Custom”. Zoals je ziet wordt er netjes een help getoond.create_expressionDe eerste parameter die je meegeeft aan de functie is het veld waaruit je een waarde wilt opvissen, de tweede parameter is de hoeveelste waarde je wilt hebben. Een “2” geeft je dan de tweede waarde opgenomen in het veld. Indien er geen tweede waarde is komt er niks terug (ook geen fout).

In dit voorbeeld gebruiken we het veld “tekst” waarin de huisnummers staan, en de eerste waarde in dat veld.

Nadat je op “OK” hebt geklikt zullen de labels verschijnen, waarbij het eerste nummer wordt gebruikt voor de labels.

bgt_labelled

Uiteraard kun je deze functie nu ook gebruiken in de Field Calculator om bijvoorbeeld de waarden uit te splitsen naar verschillende kolommen.

Overigens is het daadwerkelijke script gedeelte heel compact, de rest is documentatie. Als je een beetje Python kent is het echt heel gemakkelijk om zo’n soort functie te schrijven.

Stromen weergeven met FlowMapper

Dit artikel demonstreert het weergeven van stromen op een kaart. Dat gebeurt aan de hand van gegevens over woon-werkrelaties tussen COROP-gebieden van het CBS (zie Statline). Hierbij maak ik gebruik van de FlowMapper-plugin.

Voorbeeld-output FlowMapper
Voorbeeld-output FlowMapper (nabewerkt)

Voorbereiding

Nadat deze plugin op de gebruikelijke manier is geïnstalleerd, is de handleiding te vinden in de map C:\Users\{gebruiker}\.qgis2\python\plugins\FlowMapper2_documentation. Er zijn drie tekstbestanden nodig met resp. de coördinaten van de knooppunten, de namen van de knooppunten en de stroomgegevens. Drie punten zijn van belang die niet in de handleiding worden vermeld. Ten eerste werkt de plugin niet goed met getallen met decimalen. Dat is op te lossen door de getallen bijv. met 1.000 te vermenigvuldigen en vervolgens af te ronden. Ten tweede mogen als scheidingstekens behalve spaties ook tabs worden gebruikt. Dat laatste is vooral handig bij het plakken van gegevens in een tekstbestand vanuit Excel. Ten derde kunnen de namen van de knooppunten beter geen spaties bevatten. Die worden namelijk ook in dit geval als scheidingstekens gezien. Vervang deze bijvoorbeeld door underscores.

Continue reading Stromen weergeven met FlowMapper

Serie kaarten maken met Python script

Soms wil je een serie vergelijkbare thematische kaarten maken. Het enige verschil is het dataveld dat wordt gebruikt om gebieden in te kleuren of symbolen met variabele omvang te tonen. Klasse-indelingen en maximale symboolgrootte zijn hetzelfde. Voor grote aantallen kaarten is het vervelend om in QGIS steeds dezelfde handelingen te herhalen. Bovendien maak je snel fouten als je niet goed oplet. Dit artikel legt uit hoe het maken van grote series kaarten kan worden geautomatiseerd met behulp van een Python script. Alle bestanden die nodig zijn om deze methode uit te proberen zijn beschikbaar in een ZIP-bestand. Dit is een aangepaste versie van een eerder artikel. Deze nieuwe methode werkt beter en sneller dan de vorige en werkt hetzelfde voor Windows en Linux.

Continue reading Serie kaarten maken met Python script

Een serie kaarten genereren 2 (Linux)

In een eerder artikel heb ik beschreven hoe je QGIS een serie thematische kaarten kunt laten genereren met behulp van een batch file. Deze methode was bedoeld voor de Windows-versie van QGIS. Nu heb ik voor Linux een vergelijkbaar shell script geschreven (‘projectsnapshots’). Dat is te vinden in het ZIP-bestand bij dit artikel. Dat bevat ook alle andere bestanden die je nodig hebt om dit script te testen en een voorbeeld van het resultaat. Het resultaat bestaat uit een serie afbeeldingen en een HTML-bestand waarin alle kaarten worden getoond. De inhoud kan bijvoorbeeld worden gekopieerd en geplakt in een tekstverwerkingsbestand. Let er wel op dat je het script nog uitvoerbaar moet maken voordat je het kunt starten. Voor verdere instructies verwijs ik naar het eerdere artikel. Het script is getest met openSUSE 12.3. Het werkt wel met QGIS 1.9.0-Master, maar helaas niet met QGIS 1.8.

Shell script to generate series of maps

Download ZIP file met shell script en voorbeeldbestanden

Proportionele symbolen (2)

In het artikel Gebieden inkleuren werd de waarde van een attribuut met QGIS gepresenteerd door gebieden in te kleuren. Voor relatieve gegevens, zoals percentages of verhoudingsgetallen, is dat een goede optie. Voor absolute gegevens, zoals inwonertal, zijn symbolen die in grootte variëren geschikter. Beide kaartvormen kunnen overigens ook goed met elkaar worden gecombineerd. Dit is een herziene versie van een ouder artikel.

Methoden

QGIS 1.8 bevat vier mogelijkheden om proportionele symbolen weer te geven. Die zijn allemaal te vinden in het dialoogvenster ‘Layer properties’, op verschillende tabbladen. De volgende tabel geeft de voor- en nadelen weer. ‘Old symbology’ wordt daarbij buiten beschouwing gelaten. Continue reading Proportionele symbolen (2)

Middelpunten verplaatsen (2)

Om labels, symbolen of diagrammen op de gewenste plek binnen gebieden weer te kunnen geven, is er soms behoefte aan een kaartlaag met middelpunten van gebieden. Hier wordt gedemonstreerd hoe zo’n kaartlaag in QGIS kan worden gemaakt en bewerkt. De Nederlandse provincies worden daarbij als voorbeeld gebruikt. Dit is de herziene versie van een ouder artikel, aangepast aan nieuwe mogelijkheden in QGIS.

Continue reading Middelpunten verplaatsen (2)

Een serie kaarten genereren

[Ga voor een aangepaste versie naar dit artikel.]

Soms wil je een serie vergelijkbare thematische kaarten maken. Het enige verschil is het dataveld dat wordt gebruikt om gebieden in te kleuren of symbolen met variabele omvang te tonen. Klasse-indelingen en maximale symboolgrootte zijn hetzelfde. Voor grote aantallen kaarten is het vervelend om in QGIS steeds dezelfde handelingen te herhalen. Bovendien maak je snel fouten als je niet goed oplet. Dit artikel legt uit hoe het maken van grote series kaarten kan worden geautomatiseerd. De stappen worden beschreven voor Windows, maar het moet niet zo moeilijk zijn om voor Linux een vergelijkbaar script te ontwikkelen.

Continue reading Een serie kaarten genereren

Direct data uit Excel-bestand gebruiken

Naar aanleiding van mijn vorige artikel over het koppelen van data uit een CSV-bestand, kreeg ik een hele goeie tip. Sinds QGIS 1.8 is het mogelijk om Excel-bestanden direct te openen in QGIS. Vreemd genoeg staat hierover niets in de ‘release notes’. Het werkt alleen met het oudere XLS-formaat; niet met het nieuwere XLSX-formaat.

Een Excel-bestand open je met de menu-optie of knop ‘Add new vector layer’ (‘Vectorlaag toevoegen’). Dat is wel verwarrend, omdat het hier om niet-ruimtelijke gegevens gaat. Het Excel-bestand moet minimaal een kolom bevatten waarmee je de gegevens aan een ruimtelijke laag kunt koppelen en een of meer kolommen voor de data die je weer wilt geven. Coördinaten zijn niet nodig. Zet bij het openen het filter voor bestandstypen op ‘All files’. Anders worden  Excel-bestanden niet getoond. Het dialoogvenster bevat geen apart filter voor Excel-bestanden.

Als het goed is kun je nu de tabel koppelen aan een ruimtelijke laag, zoals beschreven in mijn vorige artikel.

Koppelen van data uit CSV-bestand

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.

Continue reading Koppelen van data uit CSV-bestand

Staafdiagrammen met legenda

Dit artikel beschrijft hoe je een kaart kunt maken met staafdiagrammen en een legenda.

Benodigde software
Quantum GIS (qgis.org)
LegendSVG (qgis.nl)
Eventueel Inkscape (inkscape.org)

Benodigde bestanden
Kaartlaag met gebieden
Kaartlaag met data

Als voorbeeld is een vectorkaart van de Nederlandse provincies gebruikt als ondergrond. Daar bovenop is een laag geplaatst vanuit een csv-bestand. Dat bevat de x- en y-coördinaten van de gewenste gebiedsmiddelpunten en onder andere het aantal inwoners per provincie naar drie leeftijdsgroepen.

Beperkingen
Deze techniek is niet zo geschikt als zeer veel gebieden moeten worden weergegeven. Dit wordt al snel onoverzichtelijk. Bovendien is de staafbreedte is niet instelbaar.

Continue reading Staafdiagrammen met legenda