Centrale QGIS installatie en configuratie (QGIS.de)

QGIS wordt meer en meer geinstalleerd door organisaties en overheden door Windows Administrators (met SCCM, nu Microsoft Endpoint Configuration Manager); i.p.v door de GIS-mensen zelf op hun eigen CAD-stations.

We krijgen steeds meer dit soort vragen (bv hier).

Dus even een kort item hierover. Het mooie is dat mensen van de QGIS gebruikersgroep in Duitsland dit al heel goed hebben gedaan (en vertaald in het engels). Ik ga dat dus niet dunnetjes overdoen 🙂
Dus voor iedereen die zicht afvraagt hoe je QGIS moet installeren met een (voor de organisatie) gestandaardiseerde set plugins en instellingen…
LEES: https://qgis.de/doku.php?id=site:deployment:zentral_en. Bedankt QGIS.de!

En als je (technisch) geïnteresseerd bent in de volgorde van inlezen van al die bestanden:
de code

Python ontwikkeling met PyCharm

Nog een verwijzing… als je Python Plugins ontwikkelt, en PyCharm als IDE gebruikt, neem dan dit even door: om PyCharm alle QGIS en PyQt functies te laten vinden.. Het is gewoon heel makkelijk als je IDE alle QGIS en PyQT functies kan vinden en ‘voorspellen’. Bedankt Tudor!

Testing QGIS fixes in Windows

En nu ik toch aan het doorverwijzen ben bekijk dit eens https://github.com/qgis/QGIS/issues/39081.
Dit is een voorbeeld van iemand die een issue had, wat werd gefixed, en (voor mij nieuw) toen uitvond dat je de QGIS-build van de Windows-test kan downloaden om die gefixte versie te kunnen testen en gebruiken!
Erg handig als je die fix VANDAAG nodig had.
Kleine waarschuwing: dit zijn geen volledige QGIS installatiepakketten. Sommige zaken (zoals Python) werken niet. Wil je een volledige ontwikkelversie van QGIS installeren, dan kun je na een paar dagen de ‘nightly build’ testen.

Happy QGIS-ing

Versie 3.5.0 van de PDOKServicesPlugin

OK, het heeft een tijdje (te lang) geduurd. Veel services in de PDOKServiceplugin waren intussen verdwenen. En vooral één van de voor veel mensen interessantste: de kadastrale kaartlagen, deden het niet meer.
Dus een avondje en dagje verder: Update je PDOKServicePlugin eens: 3.5.0! Alles doet het weer. Raymond Nijssen heeft gezorgd voor een modernizering van het PDOK icoontje: niet alleen moderner, maar ook SVG nu… dus meeschalend wanneer je je iconen vergroot.
screenshot-20200619162318-204x46 Read More

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)