QGIS en het KLIC

KLIC WIN en de nieuwe Klic Viewer voor QGIS

Gisteren 1 januari 2019 trad de nieuwe regeling RIBON (Regeling informatie-uitwisseling bovengrondse en ondergrondse netten en netwerken) in werking. Zie de staatscourant. Dit is ook het startschot KLIC WIN waarbij in een half jaar veel netwerkgegevens van netwerkbedrijven centraal worden geregistreerd bij het Kadaster zodat deze via KLIC en Inspire kunnen worden opgevraagd.

b4udig128

Vanaf vandaag woensdag 2 januari 2019, levert het Kadaster de KLIC gegevens in een nieuwe formaat! Nu bevat zo’n KLIC levering (die een andere structuur heeft) nog steeds de ligging van leidingen in raster-formaat, maar volgens planning zal de netinformatie vanaf 1 juli 2019 alleen in vectorformaat worden aangeleverd.

Zie ook de informatievideo over KLIC WIN naar aanleiding van  deze wijziging.

Op 2 januari 2019 om 10:00 uur werd ook de nieuwe KLIC-viewer versie 2.0.0 gereleased waarmee de nieuwe KLIC-berichten bekeken kunnen worden in QGIS! Er zal nog een upgrade van deze plugin plaatsvinden van QGIS 2.18 (huidige LTR-versie) naar QGIS 3.4 (nieuwe LTR-versie).

klicbericht_in_vectorQGIS met daarin geopend een KLIC resultaatbestand die je ook hier kunt downloaden. Deze bevat zowel vector- als raster-gegevens. Maar de raster-gegevens zijn hier uitgezet.

klicviewerDe interface is simpel, open een folder met een KLIC-bericht en deze wordt geladen in QGIS. Een lijst van bijlagen wordt gevuld en die kun je vanuit het menu openen.

vernieuwd-themas-menuHet tabblad Thema’s waarin je ineens een thema aan of uit kunt zetten. Nieuw zijn de Vector- en Raster-aanvink vakjes waarmee je bijvoorbeeld ineens alle netinfo in raster-formaat uit kunt zetten.

Maar wat is dat eigenlijk, ‘het KLIC’ en hoe begon het?

KLIC is met name een begrip in de graafwereld en de aannemerij. Voordat er mechanisch wordt gegraven moet er eerst een KLIC melding worden gedaan bij het Kadaster. Dezelfde dag krijgt de aannemer een E-mail met een download-linkje terug waarmee ze een zip-bestand kunnen ophalen met informatie over de ligging van leidingen op de plek waar ze binnenkort (of in de toekomst) willen gaan graven.

Het aanmaken van een graafmelding

daarnagraven

Plaatjes uit een oude KLIC-folder!

Er was een tijd dat er nog niet zoveel leidingen in de grond lagen. telefoon en elektra hing toen nog veelal tussen houten telefoonpalen. Water- en gasleidingen lagen er inmiddels wel en de water- en gasbedrijven wisten wel waar die leidingen lagen. Het waren deze bedrijven die in 1989 in verschillende regio’s een “Kabels en Leidingen Informatie Centrum” (KLIC) oprichten.

Je kon als graver gratis en geheel vrijwillig een aanvraag indienen bij het KLIC.
De aannemer gebruikte in die tijd de KLIC-atlas met daarin de zogenaamde KLIC vierkanten. Wanneer je ergens wilde gaan graven keek je in je KLIC-atlas. En dan stuurde je naar het KLIC een brief met daarin aangegeven in welk KLIC-kwadrant en KLIC vierkant je wilde gaan graven. Vervolgens stuurde het KLIC dan naar alle netbeheerders die actief waren in dat KLIC-vierkant een leveringsverzoek. Elke netbeheerder maakte dan eerst afdrukken en stuurde vervolgens afgedrukt kaartmateriaal met een begeleidende brief terug naar de aanvrager.

klicatlasEen oude KLIC atlas van KLIC Oost.

Later werd het KLIC landelijk ondergebracht bij het Kadaster.
Die stuurden toen een e-mail van de aannemer door naar netbeheerder en die stuurden nog steeds kaarten (eerst in papier en later ook digitaal) naar de aanvrager.

In 2008 trad de wet WION in werking die gravers verplicht stelden een KLIC-melding te doen. In 2010 werd met KLIC online de aanvraag en afhandeling volledig geautomatiseerd, zodat het resultaat sneller terug kon worden geleverd. Via een website geef je aan waar je gaat graven en een paar uur later kreeg je dan een email met een download-link.

Het resultaat kon je bekijken in de gratis KLIC-viewer van het Kadaster, maar de 1e KLIC viewer was niet best. Hier werden de transparante PNG raster plaatjes op elkaar gestapeld en daar kon je naar kijken. Je kon er niet in meten en kon in de viewer eigenlijk ook niet zien waar je eigenlijk was in de wereld. Later is die KLIC-viewer aanzienlijk verbeterd, maar voor mij was dat toen de aanleiding om de WION-viewer plugin te bouwen voor QGIS.

De eerste versie uit 2010 van de WION viewer plugin was simpel, selecteer de folder met daarin de PNG rasterbestanden van het Klic bericht en voeg aan een elk PNG-bestand een zogenaamde worldfile toe, waarmee de PNG-bestanden gegeorefereerd werden. Vervolgens kon zo’n PNG rasterbestand als laag worden ingeladen in QGIS. Later ontsloot ik ook de meegeleverde brieven en huisaansluitschetsen vanuit het menu en maakte deze werkend voor de Mac en Linux. Vervolgens voegde ik ook een menu met thema’s toe waarbij je per thema ineens alle kaartlagen uit- of aan kon zetten voor bijvoorbeeld water of datatransport. Klic als begrip heeft standgehouden en dus besloot ik al snel om de Wion Viewer te hernoemen naar Klic Viewer.

De laatste versie van de Klic Viewer heeft aardig wat inzet gevraagd. Met name het toekennen van stijlen en hoe moet je nu eigenlijk per thema gegevens zichtbaar of onzichtbaar zetten. Dit is zeker niet de laatste versie. Zo wordt de maatvoering en “eigen topografie” nog niet goed weergegeven in vector-formaat.

Ik wens jullie bij deze allemaal de beste wensen voor het nieuwe jaar en veel voorspoed met het gebruik van QGIS!!

BGT Import plugin vernieuwd

In een eerdere blog post schreef ik over het gebruik van BGT data in QGIS, en wat er dan allemaal mis kan gaan. Verder werd uitgelegd hoe dat opgelost kan worden met de BGT Import plugin. Helaas is (was !) het werken met die plugin nogal omslachtig.

Inmiddels is de BGT Import plugin sterk verbeterd en kun je direct vanuit QGIS de BGT downloaden. Je kunt eventueel ook een eerder gedownloade zip met BGT-data verwerken. Dat ziet er in het dialoog scherm zo uit:

bgt-import_186

Alle lagen uit de BGT worden vervolgens opgenomen in een geopackage en voorzien van een ruimtelijke index. Vervolgens worden alle lagen (indien gewenst) toegevoegd aan QGIS, met een filter op vervallen objecten en een fatsoenlijke styling.

Het resultaat ziet er dan zo uit:

selection_187

Let op: het downloaden van de BGT kan (erg) lang duren. Gelukkig maakt de BGT Import plugin gebruik van achtergrond processen (een nieuwe feature in QGIS 3) zodat je gewoon kunt doorwerken.

De plugin bevat een vrij uitgebreide help. Het kan geen kwaad deze even te lezen. Er staat bijvoorbeeld in hoe de standaard styling van de plugin vervangen kan worden door je eigen styling. Die wordt dan toegepast bij elke import die je doet. Als je mooie styling maakt, dan wordt het natuurlijk enorm op prijs gesteld als je deze deelt.

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.