Aangepaste tijden programma QGIS Gebruikersdag

De organisatoren van de gebruikersdag hebben dit bericht rondgestuurd, dat ik graag ook even hier deel:

Wij hebben besloten om het programma iets aan te passen zodat het iets compacter wordt. Dit betekent dat wij de workshops hebben verschoven naar de ochtend, de deelnemers van de workshops kunnen daardoor ook de presentaties bijwonen.

Het programma van 3 oktober ziet er nu zo uit:

10:00 – 12:30 Workshop Cartografie (Niene Boeijen, Webmapper) (Zaal 1)
10:00 – 12:30 Workshop Plug-in Bouwen (Marco Duijker, MD Kwadraat) (Zaal 2)

12:30 – 13:30 Lunch en inloop andere bezoekers
13:30 – 13:45 Openingswoord
13:45 – 14:15 DEM to 3D (Wouter Poos, Ordina)
14:15 – 14:45 Digitalisering Projectplannen RWS (Jacco Wanders, Stantec)
14:45 – 15:15 Koffiepauze
15:15 – 15:45 Custom installatie inclusief styling en voorgeinstalleerde plug-ins (Jonas van Schrojenstein, Nelen & Schuurmans en Marco Duijker, MD Kwadraat)
15:45 – 16:15 Geodata in QGIS (Jonna Bosch, Nieuwland)
16:15 – 17:30 Borrel

Mocht je door deze wijziging niet meer kunnen komen dan is het uiteraard mogelijk om je geld terug te vragen.

Met vriendelijke groet, Coen Nengerman en Jonas van Schrojenstein.

Oh, en aanmelden kan nog altijd via Eventbrite!

Presentaties QGIS gebruikersdag bekend

De gebruikersdag op 3 oktober gaat vier geweldige verhalen opleveren: en nu zijn ze bekend ook… De workshops zitten al bijna vol, dus als je daar nog aan wilt deelnemen moet je snel zijn!

Dem to 3D
Wouter Poos (Ordina) gaat laten zien hoe hij QGIS gebruikt in een workflow om hoogtekaarten in 3D te printen.

Digitalisering projectplannen RWS
Jacco Wanders (Stantec) laat zien hoe QGIS succesvol wordt ingezet om in een multidisciplinair team plannen te digitaliseren in postgres. Locatieonafhankelijk worden objecten ingetekend en heeft de opdrachtgever 24/7 toegang tot de gegevens.

Custom installatie inclusief styling en voorgeinstalleerde plugins
Jonas van Schrojenstein (Nelen & Schuurmans) en Marco Duiker (MD-Kwadraat) laten zien hoe je QGIS helemaal volledig naar je hand kan zetten. Het customizen van een menu is niks nieuws, maar het gaat nog verder! Je kan ook de styling van qgis helemaal naar je hand zetten en een compleet voorgebakken QGIS inclusief plugins in 1 installer klaar zetten voor de klant.

Geodata in QGIS

Jonna Bosch (Nieuwland): wat bestandsformaten betreft is QGIS het Koekiemonster onder de GIS-pakketten. Naast het standaardmenu van shapefile, CSV en uiteraard de nieuwe standaard Geopackage, leest QGIS ook ‘exotischere’ formaten in als GeoJSON, GPX of de ESRI file geodatabase en maakt het contact met diverse databases, zoals SpatiaLite, PostgreSQL, of Oracle.

Leuk, maar wat kun je er mee? Inlezen is één ding, maar als daarmee de computer stilstaat omdat het bestand te groot is, of het is een alleen-lezen bestand kan het toch onbruikbaar zijn voor het doel van het project.

Tijd voor duiding. In deze sessie antwoord op de vragen: wat is en kan het bestandstype? Hoe verhouden de formaten zich tot elkaar, bijvoorbeeld qua gebruik en grootte?

Locatieserver: hectometerpaaltjes en percelen

Sinds kort is de PDOK Locatieserver ook gevuld met NWB gegevens (Nationaal Wegen Bestand) van Rijkswaterstaat. Standaard krijg je die bij een bevraging op de Locatieserver echter niet terug in je resultaat (zie de wiki voorbeelden).

Om dat mogelijk te maken moet je de zoek-url uitbreiden met een zogenaamde fq (Filter Query). Dus bijvoorbeeld ALLEEN zoeken naar de eerste tien hectometerpaaltjes op de A1:

https://geodata.nationaalgeoregister.nl/locatieserver/v3/suggest?q=a1&fq=+type:hectometerpaal

Of i.p.v. alleen zoeken op de typen: gemeente, woonplaats, weg, postcode en adres (de ‘default’ typen), kun je ook aangeven op ALLES te willen zoeken:

https://geodata.nationaalgeoregister.nl/locatieserver/v3/suggest?q=a1&fq=+type:*

In de PDOKServicesPlugin werd nog niet gebruik gemaakt van die Filter/fq mogelijkheid. Sinds vandaag is er een versie beschikbaar die dat WEL heeft. Het Geocoder-tabje in de plugin ziet er nu zo uit:

pdokservicesplugingeocodertab

Zoekend naar de ‘a10′ zie je adressen en wegen.

Wanneer je nu echter ‘Hectometerpaal’-type aanvinkt, verschijnen er ook opeens ‘hectometerpaal’ resultaten:

pdokservicesplugingeocodertabhmp.

Op dezelfde wijze kun je nu in QGIS ook zoeken op kadastrale percelen, door het type ‘Perceel’ aan te klikken: zoekend op ‘haarle’ bijvoorbeeld komen de perceelnummers direkt naar boven:

pdokservicesplugingeocodertab

Maar ook kun je natuurlijk zoeken op de kadastrale ‘aanduiding’, ‘gemeentecode’ of ‘sectie’!

En in combinatie met een mooie ondergrondkaart als de OpenTopokaart, die de Hectometerpaalbordjes daadwerkelijk toont, heb je op deze manier een hele mooie combinatie:

pdokservicesplugingeocoderopentopo

Happy QGISsing :-)

(English) AmsterdamTimeMachine

Via twitter: AmsterdamTimeMachine.nl.

Jan Hartman’s en WebMappers bloed, zweet en traantjes om een oude set kaarten van Amsterdam te georefereren: http://amsterdamtimemachine.nl.

6 XYZ-Map services met kaarten van Amsterdam, vanaf 1625 om een inkijkje in de geschiedenis van Amsterdam te hebben. En natuurlijk zo in QGIS te laden :-)

Altijd al eens de Waag willen zien in 1625?

debroen

Of Hollands Glorie op het IJ (als je de kaart teminste 135 graden draait :-) ):

vbercenrode

En wist je dat er OOK een Waag was op De Dam?

vberckenrodededam

Ga naar http://amsterdamtimemachine.nl voor de xyz url’s of download dit zip bestand met een QGIS project file.

Het zipje bevat een .qgs bestand welke je NU zo al project kunt laden in QGIS 2.18 of QGS 3.x. Maar er zit ook een bestandje ‘amsterdamtimemachine.nl.xml’ in, die je kunt importeren als setje ‘XYZ-services’ MITS je een QGIS versie nieuwer dan 3.1 hebt (dus als je een ontwikkelversie hebt, OF als je nog even wacht tot 3.2).

Happy QGISsing…

Maak een QgsLocator (Plugin) met PyQGIS

Wat is een Locator (plugin)

Een paar maanden geleden, voegde Nyall Dawson stilletjes een klein zoekinvoer(widget) toe aan QGIS: zie de linker benedenhoek:

locatorbel

Mensen die bekend zijn met QtCreator (de Qt-ontwikkelomgeving) zouden het kunnen herkennen als een ‘QtCreator Locator’ clone: een manier om (heel) snel in een project te kunnen zoeken op: woorden, classes, favorieten, help-onderwerken, bestanden enz enz.. Het is eigenlijk een alles kunnen om razendsnel iets op te zoeken OF op te starten. Zie ook de originele Qt documentatie.

Nyall had het briljante idee om zoiets ook toe te voegen aan QGIS… en hij deed dat ook. In de code heet dit een QgsLocator en het laad/registreert zogenaamde ‘QgsLocatorFilters’.
In een nieuwe QGIS kun je daar al direct zoeken op: Acties, Processing Algorithmen, Ruimtelijke Favorieten, Features in de actieve laag, Projectlagen en Project Layouts.
Om even te proberen, tik ‘bel…’ en je ziet dat er wat (buffer) gerelateerde Processing Algoritmen beschikbaar zijn.

Door er dan op te dubbelklikken start je het algorithme, of eigenlijk je start het in processing, supersnel en handig. Maar als je net een kaart van de wereld hebt geladen zoals in bovenstaand plaatje en je klikt daar op ‘Belgium’ dan zoom je naar dat object.

Maar het mooiste nog (vind ik), is dat je als (python) ontwikkelaar heel ‘gemakkelijk’ zelf zo’n QgsLocatorFilter kunt bouwen.

Het eerste wat er bij mij opkwam was: ‘Dit moet je gebruiken om een geocoder aan te roepen…’.

Dus, meteen proberen…

De Locator plugin bouwen

De crux is, om de zogenaamde ‘QgsLocatorFilter’ te implementeren ( Zie de QGIS API documentatie, de PyQGIS Api of de cpp headerfile).

Jouw implementatie van die Class is dan eigenlijk het werkpaard van je Locator Filter. Het zal de invoertekst nemen, hier iets mee doen (in ons geval naar een Online Geocoder sturen), the resultaten verzamelen en dan een rij ‘QgsLocatorResult’-objectjes ervan maken die dan in die zoekrij worden getoond. En het bepaalt wat er wordt gedaan wanneer de gebruiker op een zoekresultaat klikt.

Daarnaast moet je die Class natuurlijk nog even in QGIS lijmen:
– een mini plugin die je dan in de QGIS plugin repo kan zetten, zodat gebruikers je filter kunnen downloaden
– in de plugin ‘registeer’ je je QgsLocatorFilter zodat QGIS die opppikt en toont in de Locator zoekwidget (zie de Nominatim Locator Plugin als je wilt zien hoe dat wordt gedaan)

Sommige geocoders (Google…) hebben tegenwoordig een ‘api key’ nodig om te blijven werken. Daarvoor moet je op het kleine vergrootglas icoontje klikken, zodat er een menu verschijnt en je op ‘Configureren’ kan klikken.

configuremenu

Dat brengt je dan in de ‘Locator’ tab in de Opties Dialoog:

locatoroptions

Je kunt er daar voor kiezen om een Locator Filter altijd te activeren of juist uit te zetten.

Helemaal rechts zie je een (nu niet aktieve) configureerknop. Als jouw Locator ‘True’ retourneert in de code wanneer hasConfigWidget() wordt aangeroepen, dan wordt die knop actief en kun je zelf een (klein) configuratiedialoogje bouwen en tonen.

Een voorbeeldgeocoder: Nominatim_Locator_Plugin

Nominatim (latijn, ‘op naam’) is volgens de OpenStreetMap wiki “a tool to search OSM data by name and address and to generate synthetic addresses of OSM points (reverse geocoding)”. Lees erover in de OSM wiki of de OSM api informatie.

Ik heb nu een ‘Nominatim_Locator_Plugin’ gebouwd die precies dat doet: de QgsLocatorFilter interface implementeren. Je kunt deze zelf via de Plugin Manager van QGIS installeren: zoek op ‘Nominatim’ en installeer de ‘Nominatim Locator Filter’ plugin. Of … bekijk gewoon de Python code.

In die code zie dat dat we in de ‘fetchResults’ wachten tot de gebruiker 2 letters heeft getikt, en dan pas gaan zoeken.
De Nominatim service is nog een speciaal geval: het is gratis, maar het is NIET toegestaan het als een ‘suggest-service’ te gebruiken. Je mag dus niet letter voor letter zoeken, maar alleen op een volledig adres zoeken. Om hieraan te gehoorzamen heb ik toegevoegd dat je zoekterm moet eindigen op een ‘spatie': pas dan wordt het verzoek naar Nominatim gestuurd.

Het supermooie met Nominatim en OpenStreetMap is dat het alle talen kan verwerken. Dus als je in het nederlands
‘vrijheidsbeeld’ intikt, dan krijg je dus gewoon resultaat:

vrijheidsbeeld

Wat technische details
De methoden die je moet implementeren en de beschrijving ervan vind je in de api docs van de qgslocatorfilter.h headerfile.

Een belangrijk ding om je bewust van te zijn is dat het zoeken/ontvangen/tonen van de resultaten allemaal plaatsvindt buiten de ‘applicatie’-thread om. Ik dacht slim te zijn en dus de ‘requests’ naar de services asynchroon af te vuren, maar dat eindigde met een ‘gevecht om threads’. Dus mijn tip: gebruik synchrone HTTP voor je aanroepen.

Dit brengt me op welke Python module je moet gebruiken voor het HTTP-verkeer. In QGIS 2 plugins gebruikte men vaak de Requests-module, of gewoon httplib2 of bouwde hun eigen NetworkAccessManagers.
Het nadeel van het gebruiken van die externe of zelfgemaakte oplossingen is dat QGIS eigen Netwerkinstellingen zoals ‘Proxy Settings’ of ‘Network Timeout’ vaak genegeerd werden…

Voor deze plugin gebruikte ik deze module networkaccessmanager.py.

Het mooie eraan is dat het probeert om een dunne schil te zijn rondom QGIS’ eigen QgsNetworkAccessManager (die op zijn beurt weer een schil is om Qt’s QnetworkAccessManager).
Het gebruikt alle Proxy-instellingen die een gebruiker heeft ingesteld, en het kan ook uitstekend samenwerken met QGIS’ eigen authorisatie-modules en -configuraties, dus het HTTP verkeer wordt geauthoriseerd en geleid volgens de eigen systeeminstellingen.

De Boundless oplossing werkt goed, maar het zou nog mooier zijn als de (beetje kale) QgsNetworkAccessManager C++ implementatie kon worden uitgebreid om ‘m wat Python/gebruiksvriendelijke te maken. Zodat het wat eenvoudiger wordt om redirects, timeouts en speciale headers te behandelen. En zoals in de Boundless module ook kan: kiezen of je de requests synchroon of asynchroon (niet blokkerend) wilt hebben.

Ik heb hiervoor een QEP (QGIS Enhancement Proposal) aangemaakt, ik hoop dat er meer mensen in geinteresseerd zijn.

Toekomst

Een OpenSource project is natuurlijk nooit ‘klaar’, in de positieve zin van ‘nooit af’ :-)

Terwijl je aan het programmeren bent borrelen de ideeen al weer op:

– toch een configuratieschermpje toevoegen aan Nominatim, om bijvoorbeeld te kunnen zoeken op OSM tags (wat dacht je van “alle cafe’s in de de kaart die ik nu voor mijn neus heb”, of nog beter: hier in de buurt :-) )

– de ‘accept-language option’ van Nominatim gebruiken (als in gebruik de huidige ingestelde taal) om zo te kunnen zoeken op: Эйфелева башня of eiffeltoren en dan ook van OSM de resultaten in die taal terug te krijgen.

eiffeltowerrussion

– zoeken met de Google Maps api. Heb je dan wel een ‘api key’ voor nodige dus zul je een configuratieschermpje moeten maken (heb ik al af :-) )

– De PDOK locatieserver gebruiken…. uh… intussen af PDOK Locatieserver Locator Filter:

pdok_nominatim_postcode

– of andere interessante zoekservices gebruiken

Ik hoop dat ik wat interesse heb gewekt, en zie de ‘locators’ wel verschijnen op plugins.qgis.org

Ah, en nog wat tips voor Python QGIS / PyQGIS programmeurs:

Latest Python API docs (thanks Denis): https://qgis.org/pyqgis/master/

https://qgis.org/api/api_break.html (all QGIS2.x – QGIS3.x api breaks and fixes)

PDOK services plugin: nieuwe versie + services

Er zijn (zowel voor QGIS 2.x als voor QGIS 3.x) nieuwe versies van de PdokServicePlugin beschikbaar.

Altijd al eens willen zien hoeveel Rijksmonumenten er zijn?

pdokrijksmonumenten

Of welke Postcode6 gebieden de kortste (of langste) aanrijdtijd hebben voor de brandweer?

pdokpc6brandweerbereikbaarheidwms

Of misschien de WFS voor de Postcode4 gebieden gebruiken?

pdokpc4wfs

Naast het fixen van een aantal bugs, is de belangrijkste aanpassing een update van de PDOK-services lijst.

De nieuwe lagen op een rijtje (we gaan van 8645 naar 9684 lagen!):

# Nieuwe luchtfotos: 2017
# Beschermde Gebieden INSPIRE (geharmoniseerd)
# BRO Bodemkaart 1:50.000
# BRO Geomorfologischekaart 1:50.000
# BRO Geotechnisch sondeeronderzoek (CPT)
# CBS Postcode4 statistieken
# CBS Postcode4 statistieken
# CBS Postcode6 statistieken
# Hydrografie – Netwerk RWS (INSPIRE geharmoniseerd)
# Hydrografie – Physical Waters (INSPIRE geharmoniseerd)
# Statistical Units Grid
# Vervoersnetwerken – Gemeenschappelijke elementen (INSPIRE geharmoniseerd)
# Vervoersnetwerken – Kabelbanen (INSPIRE geharmoniseerd)
# Vervoersnetwerken – Luchttransport (INSPIRE geharmoniseerd)
# Vervoersnetwerken – Spoorwegen (INSPIRE geharmoniseerd)
# Vervoersnetwerken – Waterwegen (INSPIRE geharmoniseerd)
# Vervoersnetwerken Waterwegen RWS (INSPIRE geharmoniseerd)
# Vervoersnetwerken – Wegen (INSPIRE geharmoniseerd)
# Vervoersnetwerken Wegen RWS (INSPIRE geharmoniseerd)

Je eerste 3-D kaart in QGIS 3.0

Hoera, QGIS 3.0 ondersteunt het maken van 3-D kaartbeelden! Maar wat komt daar allemaal bij kijken? Wat zijn de “let-opjes”? Deze blog helpt je om in een paar minuten een eerste indrukwekkend 3-D kaartbeeld op het scherm te toveren. Bedenk wel dat de 3-D view nog wat buggy is in QGIS 3.0; word niet ontmoedigd door een crash zo nu en dan.

1. Zorg ervoor dat je Richard’s onvolprezen PDOK plugin hebt geïnstalleerd.
2. Maak een nieuw project aan in QGIS met CRS EPSG:28992.
3. Voeg via de PDOK plugin de “ahn2_5m” WCS laag toe aan je project. Je zou een zwart vlak moeten zien verschijnen. Vink de zichtbaarheid ervan uit.
4. Voeg via de PDOK plugin de “opentopo” kaart toe aan je project. OpenTopo heeft van zichzelf al hillshading, dus dat helpt voor het realisme van het eindresultaat.
5. Zoom de kaart in naar een gebied met wat reliëf, bijvoorbeeld de Grebbeberg, Veluwezoom of het Zuid-Limburgs landschap. Zoom in tot ten minste 1:10.000.
6. Open de eigenschappen van de ahn2_5m laag, ga naar transparantie, en voeg bij “extra waarde voor geendata” de waarde -3.4028234663852886e+38 in. Als je dit vergeet dan probeert QGIS op water (waar geen goede AHN2 waarden zijn) heel diep te gaan en daar loopt hij op vast.
7. Kies in het menu “beeld” voor “nieuwe 3D kaartweergave” en wacht geduldig totdat hij de initiële tegels heeft geladen.
8. Klik op het gereedschap menu-icoon, en stel de ahn2_5m in als de hoogtelaag. Stel een verticale schaal in van 2 of 3 (of meer als je wilt lachen).
8. Stel de grootte van je 3D-window met de muis naar smaak in. Zoom desgewenst nog iets meer in. Wacht weer totdat de tegels zijn geladen.
9. Houd de Shift toets ingedrukt terwijl je met de muisknop ingedrukt naar links-rechts beweegt (x,y roteren) en naar boven-beneden (z roteren).
10. Druk op printscreen of kies save as image uit het menu.

Zo kun je bijvoorbeeld de volgende kaartbeelden maken.

201803-3d-lemelerberg

Lemeler- en Archemerberg, Overijssel.

201803-3d-gulperberg

Zicht op de Gulperberg, Zuid-Limburg.

Dit is natuurlijk slechts het begin. Als je data hebt over hoogtes van gebouwen, dan is dat een volgende stap. Maar het maken van je eerste 3-D kaart kan dus echt in vijf minuten.

Zie ook een 3D animatiefilmpje van Valkenburg met de AHN2 en luchtfoto data van PDOK: https://www.youtube.com/watch?v=VxOlIFe9WHw

Andere tips? Deel ze vooral hier!

Jan-Willem van Aalst

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.

Diagrammen met objecten per locatie

Stel je hebt een lijst met verschillende objecten die je als volgt op een kaart wil tonen:

screenshot-from-2018-02-16-11-16-07

Diagrammen in QGIS verwachten dat voor elke staaf of punt een kolom bestaat, maar onze objecten zitten allemaal onder elkaar in een kolom:

screenshot-from-2018-02-16-11-28-45

En de geometrie is opgeslagen in een goeie ouwe shapefile:

Shapfile 'cities.shp'
Shapfile ‘cities.shp’

We kunnen dus het veld ‘code’ gebruiken om de tabellen te koppelen en te groeperen tot een rij per locatie.

Omdat QGIS vector-koppelingen geen 1:n relaties aankunnen, gaan we hiervoor een virtuele kaartlaag gebruiken. Hierin kun je alle sql gebruiken die door sqlite wordt ondersteund, inclusief JOIN en GROUP BY.

Dus we maken een nieuwe virtuele kaartlaag ‘cities_grouped’ met deze sql query:

SELECT
  c.name,
  c.code,
  group_concat(amenity) AS amenities,
  CASE WHEN INSTR(group_concat(amenity),'university') > 0 THEN 1 ELSE 0 END AS university,
  CASE WHEN INSTR(group_concat(amenity),'airport') > 0 THEN 1 ELSE 0 END AS airport,
  CASE WHEN INSTR(group_concat(amenity),'station') > 0 THEN 1 ELSE 0 END AS station,
  CASE WHEN INSTR(group_concat(amenity),'harbor') > 0 THEN 1 ELSE 0 END AS harbor,
  count(*) AS cnt,
  c.geometry
FROM amenities a
LEFT JOIN cities c ON a.code = c.code
GROUP BY c.code, c.geometry

De attributentabel van deze laag ziet er dan zo uit:

Virtual attribute table 'cities_grouped'
Virtual attribute table ‘cities_grouped’

Nu kunnen we diagrammen gebruiken als symbologie voor deze nieuwe kaartlaag, waarbij we de nieuwe kolommen university, airport, station en harbor invoegen. Ik heb de count kolom (‘cnt’) gebruikt voor het instellen van de grafiekgrootte en label-afstand.

Ik hoop dat je hier wat aan hebt, en als je een makkelijkere manier weet om dit te doen hoor ik het graag!

Programma gebruikersmiddag compleet!

Okee, niet heel snel (volgende week woensdag is het al zover), maar het programma voor de gebruikersmiddag staat nu helemaal!

QGIS gebruikersdag

Mocht je hem nog niet gezien hebben: Woensdag 31 januari met inloop vanaf 12:00, IHE Delft (tegenover NS-station Delft), de allereeerste Gebruikersmiddag QGIS in Nederland. Inschrijven kan nog via Eventbrite.

Het programma zelf zit er als volgt uit:

  • 12:00 Inloop met broodjes
  • 13:00 Plenair programma (Engels, vanwege aanwezigheid internationale studenten)
    • IHE Rector Prof. Eddy Moors verzorgt de formele aftrap
    • Hans van der Kwast: Wat doet een instituut als IHE met QGIS?
    • Raymond Nijssen: Wat is er nieuw in QGIS3?
  • 14:15 Twee paralleltracks (een Engelstalig, een Nederlandstalig), een doctor’s office voor al je QGIS-problemen, en ruimte om met elkaar QGIS-zaken aan te pakken (neem je laptop mee!)
NL-spoor EN-track
14:15 Marco Duiker – praktische oplossingen voor BAG en BGT problemen in QGIS

https://geo-academie.nl/marco/

http://www.qgis.nl/author/marcoduiker/

Claudia Ruz Vargas – QGIS plugins for groundwater monitoring and modelling

https://www.un-igrac.org/staff/claudia-ruz-vargas

14:35 Jan-Willem van Aalst – Gebruik van QGIS bij het maken van OpenTopo en de Gemeentenatlas.nl

http://www.qgis.nl/author/janwillemvanaalst/
@janwillemvaalst

Leya Zgheib – Using QGIS for analysis in the Kafue Flats, Zambia

MSc Student IHE Delft, Environmental Sciences

14:55 Joost Deen – Gebruik en naar de hand zetten van QGIS bij de brandweer (Veiligheidsregio Noord-Holland Noord)
@OosJoost
Jonas van Schrojenstein – QGIS as a gui for hydrographical modelling
https://www.linkedin.com/in/jonas-van-schrojenstein-lantman-4584002/
15:15 pauze break
15:45 Nico de Graaff – QGIS in het applicatielandschap van Datalab Amsterdam
@njdegraaff
Niel de Jong – Preparing data for an effective humanitarian response in Malawi
@Niel_Aquanaut
https://www.linkedin.com/in/niel-de-jong-6063687b/
16:05 Marco van Antwerpen en Erik Leemrijze – De Zeeuwse aanpak: de QGIS samenwerking van provincie en gemeenten Pratik Tiwari – River hydro-potential and selection of possible hydropower sites using open source software and open data.

Student IHE Delft, Water Science and Engineering

16:25 Hoe verder? Een afsluitend gesprek met de zaal over de QGIS gebruikersmiddag en hoe we een mogelijk gezamenlijke toekomst willen organiseren. Martijn Meijers – Auto-refreshing the QGIS map pane for visual debugging algorithms

https://www.linkedin.com/in/bmmeijers/

http://www.gdmc.nl/martijn/

  • 16:45 Borrel
  • 18:00 Voor wie wil: afsluitend eten in het Post(GIS)kantoor, Hippolytusbuurt 14, Delft (inventarisatie volgt).

Kortom, wij hebben er zin in, en we gaan er een mooie middag van maken! Tot volgende week, ook namens Hans van der Kwast,

Erik Meerburg.