In een eerder bericht schreef ik dat de vernieuwde ruimtelijke plannen plugin voor QGIS makkelijker uitbreidbaar is door derden. Belangrijk, zodat volgens de beste Open Source traditie dan ook door anderen kan worden bijgedragen aan deze plugin.
Helaas is dat tot op heden niet gebeurd, maar toch vind ik deze plugin een goed voorbeeld hoe Open Source project door de bijdrage van meerdere partijen steeds beter wordt.
Ruimtelijke Plannen plugin vernieuwd
Het migreren van plugins
Bij de overgang van QGIS2 naar QGIS3 maakten velen zich zorgen over het feit dat alle plugins gemigreerd moe(s)ten worden wegens vernieuwing van de onderliggende programmabibliotheken.
En zij die als eerste de handen uit de mouwen staken om een plugin te migreren hebben flink gefoeterd. Het bleek een hele klus te zijn. Al snel kwamen er betere hulpmiddelen en documentatie om het migratieproces te vergemakkelijken, hetgeen flink hielp.
Inmiddels is QGIS3 ongeveer een jaar beschikbaar en zijn we alweer aangeland bij versie 3.4. In de tussentijd zijn al heel veel plugins gemigreerd zoals blijkt uit de volgende cijfers (ten tijde van het schrijven van dit artikel):
- Voor QGIS2 zijn er 594 plugins beschikbaar, waarvan 16 experimenteel.
- Voor QGIS3 zijn er 354 plugins beschikbaar, waarvan 68 experimenteel.
En zoals die dingen gaan zijn er vast wel wat plugins die niet meer onderhouden werden of goed werkten verdwenen. Een aardig bij-effect. Nog een aardig bij-effect is dat voor nogal wat ontwikkelaars de migratie aanleiding was voor het doorvoeren van verbeteringen en/ of uitbreiden van functionaliteit.
Zo’n verbetering heeft ook plaatsgevonden tijdens de migratie van de Ruimtelijke Plannen plugin, die OpenGeoGroep uitvoerde op verzoek van Provincie Zeeland.
De Ruimtelijke Plannen plugin
De Ruimtelijke Plannen plugin maakt het mogelijk om op basis van de services van het zogenaamde aftappunt van ruimtelijkeplannen.nl geldende plannen te vinden en deze via WFS (dus als data), met opmaak aan het project toe te voegen.
Doordat opmaak wordt toegevoegd werkt de plugin net zo makkelijk als een WMS service, maar biedt de extra mogelijkheid tot analyse op de data. En daat zit dan ook gelijk de meerwaarde van zo’n plugin ten opzichte van de website van ruimtelijkeplannen.
De nieuwe plugin
Uiteraard draait de nieuwe plugin onder QGIS3. Tijdens het migreren heeft een zogenaamde ‘refactoring’ plaatsgevonden waardoor het vlaggetje ‘experimenteel’ weggehaald kon worden. De plugin staat nu tussen de ‘normale’ plugins.
De ‘refactoring’ heeft ook tot gevolg dat de plugin nu makkelijker uitbreidbaar is, waardoor het voor andere ontwikkelaars eenvoudiger is geworden om er ondersteuning voor extra planvormen bij te bouwen.
Plannen vinden werkt nu door middel van klikken op de kaart, waarna een lijst met beschikbare plannen wordt getoond:
Dubbelklikken op een regel voegt het plan toe aan de kaart:
Verder zijn bij het migreren nog de volgende zaken toegevoegd:
- Nederlandse vertaling
- Ondersteuning voor verschillende projecties<br//>
- Ondersteuning voor alle planvormen op het tabblad ‘Juridisch’
Dit tabblad (op ruimtelijkeplannen.nl) bestaat niet meer. Het betreft vooral de plannen die een directe werking hebben voor de burger, zoals:- bestemmingsplannen
- beheersverordeningen
- gerechtelijke uitspraken
- omgevingsvergunningen
- voorbereidingsbesluiten
- inpassingsplannen
- Alle kaartlagen uit bestemmingsplannen worden nu getoond
- Tonen van het plantype in de plannenlijst
- Koppeling van de teksten aan ‘actions’, waardoor deze met 1 druk op de knop leesbaar zijn
Met name die laatste in het rijtje vraagt enige uitleg.
Aan elke laag is door de plugin ook een zogenaamde ‘actie’ gekoppeld. Door eerst bij het QGIS action-knopje (rechts naast het identify-knopje) de actie ‘Open text link(s) in browser’ te kiezen en daarna een object in een toegevoegd plan aan te klikken worden alle gekoppelde documenten in de velden ‘verwijzingNaarText’ of ‘verwijzingNaarObjectgerichteText’ geopend in uw webbrowser.
**Let op:** dit kunnen er soms veel zijn!
Dus ook bij de migratie van de Ruimtelijke Plannen plugin is er veel verbeterd. We hopen dat het nu ook voor anderen makkelijker is om bij te dragen aan deze plugin. Met name ondersteuning voor andere planvormen dan die op het tabblad ‘Juridisch’ zou welkom zijn.
Certificaat problemen
Helaas kennen sommige QGIS3 versies onder sommige Windows versies een probleem met het beveiligingscertificaat voor de verbinding. Er ontstaat dan een melding zoals deze:
Dit is eenvoudig te verhelpen door het toevoegen van een beveiligingsuitzondering zoals hierboven rood-omkringeld weergegeven.
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:
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:
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.
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)
(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:
Kies daarna voor de Function 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:
Vergeet 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.De 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.
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.
De QGIS BGT plugin
Jan-Willem van Aalst schreef een mooi stukje over het gebruik van de BGT in QGIS met als voorbeeld weer een van zijn bekende prachtige kaarten. Hiervoor is het wel nodig om de complete BGT in Postgis te laden. Dat is misschien een beetje overkill als je geïnteresseerd bent in pakweg 1 gemeente.
Zou QGIS ook op een makkelijker manier overweg kunnen met de BGT? Laten we als proef eens van de BGT download site (https://www.pdok.nl/nl/producten/pdok-downloads/download-basisregistratie-grootschalige-topografie) een deel van de BGT downloaden (hier de gemeente Bodegraven-Reeuwijk):
Als resultaat krijg je een zipfile met flink wat gml-bestanden. Deze kun je vanuit de verkenner zo in QGIS slepen en het resultaat is (na soms flink wachten) een stuk of 30 kaartlagen en een niet zo mooi opgemaakt kaartbeeld:
Een kenner ziet direct dat er iets mis is gegaan. De BGT is vlakdekkend, en de getoonde kaart niet!
Om te begrijpen waar dit probleem vandaan komt is het nodig iets meer te weten van gml. De Nederlandse overheid heeft ervoor gekozen om de open standaard gml te gebruiken voor het uitwissel van geo-informatie. Gml is daarbij inderdaad een standaard en geen bestandsformaat! De standaard is zeer rijk en staat een hele mooie objectgerichte modellering toe waarbij objecten zowel een punt-, een lijn- als een vlakgeometrie hebben. Maar zulke objecten zijn natuurlijk wel moeilijk te gebruiken in de meeste GIS-programma’s die net zoals QGIS graag punten, lijnen en vlakken in aparte kaartlagen zetten.
Als voorbeeld zien we hier de panden (bgt_pand.gml) die zowel een puntlocatie als een vlak aan zich hebben:
Indien we dan in de gml gaan kijken (dat kan, het is een gewoon tekstbestand), dan zien we dat zo’n pand een imgeo:geometrie2dGrondvlak attribuut heeft, en een imgeo:nummeraanduidingreeks.
In het bgt_vegetatieobject.gml zien we zelfs punten, lijnen en vlakken:
Er zijn hier meerdere objecten zichtbaar, twee punten boven op elkaar (de sterren), een lijn (rood gestippeld) en een vlak (groen).
Het gebruik van de identify tool leert dat het vlak, de lijn en een van de punten een “haag” betreft. Het andere punt betreft een boom.
Bij het inlezen van dit soort bestanden waarbij bij sommige objecten wel, en bij andere objecten niet meerdere typen geometrieen zijn opgenomen wordt het voor de onderliggend software die het bestand in moet lezen moeilijk te bepalen wat ingelezen moet worden. Zo krijg je al gauw de nummeraanduidingreeks van de panden terwijl je QGIS vraagt de vlakken in te lezen.
Gelukkig is de software niet al te moeilijk ervan te overtuigen om de juiste dingen in te lezen. Bij FOSS4GNL (28 juni 2017) werd door mij al een plugin aangekondigd die dat zou regelen. De BGT import plugin staat inmiddels bij de QGIS plugins en regelt het inlezen door een klein bestandje aan te maken waarin precies staat waar de geometrie elementen in het gml bestand zitten. QGIS gebruikt dat vervolgens om het gml bestand goed in te lezen.
Indien je een BGT bestand importeert met de plugin, dan maakt de plugin een kopie (of een symlink als dat kan) van het gml bestand, met de toevoeging _P, _V, _L in de bestandsnaam voor punten, lijnen en vlakken respectievelijk. Vervolgens wordt naast elk _X.gml bestand een _X.gfs bestand geplaatst op basis waarvan QGIS op de juiste manier de punten, lijnen of vlakken kan inlezen. Je hebt de plugin daarna dus niet meer nodig om zo’n _X.gml bestand goed in te lezen!
Als voorbeeld de bgt_pand.gml direct ingelezen met QGIS (er zijn alleen punten ingelezen):
En met gebruik van de plugin (zowel de punten als de vlakken zijn ingelezen):
Overigens is het voor de snelheid belangrijk om alleen die geometrie typen aan te vinken die daadwerkelijk in het gml bestand zitten. Anders moet de plugin de hele gml uitpluizen op zoek naar een geometrie type dat er niet is. Dat kan lang duren!
Met behulp van de plugin is het gebruik van de BGT gml bestanden niet zo moeilijk meer en hoef je niet over te gaan tot het gebruik van Postgis en/ of NL-extract.
Wel is het jammer dat je niet zomaar de prachtige visualisatie van Jan-Willem van Aalst kunt gebruiken. Nu maar hopen dat iemand een mooie visualisatie maakt (en deelt!)voor de bestanden die je rechtstreeks met de BGT import plugin inleest.