Als je een geografisch bestand voor het eerst in QGIS opent, worden willekeurige kleuren toegekend aan de punten, lijnen en vlakken om een eerste indruk te kunnen krijgen. Maar QGIS biedt natuurlijk uitgebreide functionaliteit om zelf een kleurenschema samen te stellen en te beheren. Dit artikel beschrijft het opstellen van zo’n kleurenschema voor de TOP10NL, met het volgende effect:
Vanaf het moment dat ik als zevenjarig jongetje de speciale TDN uitgave van de topografische kaart Walcheren 1:25.000 kreeg, ging het fout (en het is nooit meer goedgekomen…). Mijn voorliefde voor grafische vormgeving kreeg een duidelijke cartografische dimensie! Dus toen het Kadaster in 2012 eindelijk de TOP10NL kosteloos aanbood, kon ik mijn geluk niet op. De beroemde topografische kaart kunnen voorzien van een eigen opmaak: een jongensdroom die eindelijk uitkwam. En QGIS leest ook GML bestanden, dus dat leek appeltje-eitje te worden!
Totdat je in de details van het gegevensmodel van TOP10NL duikt. Dan blijkt het ontwerpen van zo’n kleurenschema toch best complex. Het luistert behoorlijk nauw welke laag je boven welke andere laag plaatst in de kaartlagenboom. Om nog maar te zwijgen van het überhaupt bevolken van die kaartlagenboom! “Even GML importeren…?” dat pakte dus anders uit. Het bestellen ging supervlot: 3 januari besteld, nog dezelfde dag geleverd via een downloadlink op WeTransfer. complimenten! Maar de GML bestanden die Kadaster aanbiedt hebben de nare eigenschap dat sommige objectklassen uit meervoudige datatypen bestaan. Dus het objecttype “Wegdeel” in de GML bevat zowel punten, lijnen als vlakken. De GML import module in QGIS, conform de GDAL specs, snapt dat niet:
When reading a feature, the driver will by default only take into account the last recognized GML geometry found (in case they are multiples) in the GML subtree describing the feature.
en zet dan maar “Unknown” in de geometrie-kolom in het lijstje van mogelijk te importeren kaartlagen:
Dat gaat dus inderdaad niet goed. Op sommige kaartbladen worden de objecten van het objecttype “Wegdeel” als een verzameling puntjes weergegeven, soms als lijntjes. QGIS snapt echter niet, dat er feitelijk drie kaartlagen aangemaakt moeten worden: wegdeel_punt, wegdeel_lijn en wegdeel_vlak. Een ander nadeel is, dat de GML die wél goed wordt ingelezen (zoals terrein_vlak), behoorlijk traag verwerkt wordt ten opzicht van, bijvoorbeeld, ESRI Shape bestanden.
Nu bleek ik gelukkig niet de enige te zijn die tegen deze zaken was aangelopen. Onder de noemer “NLExtract” hebben enthousiaste geesten inmiddels een set scripts gereed om de GML te converteren naar een PostGIS database. En uiteraard kan QGIS ook netjes verbinding maken met een PostGIS database. Met behulp van een technisch ingestoken vriend en wat trial’n’error lukte de conversie naar PostGIS. Wie schetst mijn vreugde, als ik de volgende mogelijk te importeren kaartlagen zie in QGIS:
Tot mijn niet geringe verbazing performt deze (landelijk dekkende!) PostGIS database (10Gb uitgepakt) ontzettend snel in QGIS. Het renderen duurt even, afhankelijk van het zoom-niveau. Om zo het land te verkennen is wel erg luxe. Voor een basisbeeld zijn overigens niet alle kaartlagen even relevant. Ik heb de volgende lagen geïmporteerd uit de PostGIS database voor mijn kleurenschema (in die volgorde):
- waterdeel_vlak
- terrein_vlak
- isohoogte_lijn
- hoogteverschillz_lijn
- hoogteverschilhz_lijn
- waterdeel_lijn
- wegdeel_vlak (t.b.v. omlijning)
- wegdeel_hartlijn (t.b.v. tunnels en bospaden)
- wegdeel_vlak (t.b.v. kleuring typeweg)
- wegdeel_vlak (t.b.v. kleuring verkeersgebruik)
- wegdeel_vlak (t.b.v. kleuring verhardingstype)
- spoorbaandeel_lijn
- gebouw_vlak
- gebouw_vlak (t.b.v. kassen en torens)
- inrichtingselement_lijn
- inrichtingselement_punt
- geografischgebied_punt
De gemeentegrenzen haal ik uit de TopGrenzen, die ook bij het Kadaster zijn op te vragen als ESRI Shape bestand.
Tja, denn geht’s los. Waterdeel, terrein en hoogte(verschil) waren tamelijk snel ingesteld (waarbij het wel handig is om het Gegevensmodel TOP10NL er bij te houden). QGIS biedt een schat aan instelmogelijkheden: per vlak kun je niet alleen de kleur van het vlak instellen, maar ook de dikte en kleur van de omranding. Je kunt ook kiezen of de vlakken met of zonder anti-aliasing (rafeligheid) getekend worden. Wel een snelle PC aanschaffen… Hier een voorbeeldje van het opmaken van terrein_vlak en waterdeel_vlak.
Het opmaken van wegen was (en is) een wat grotere uitdaging. De TOP10NL biedt erg veel informatie per wegdeel. Het is dus mogelijk om een wegbeeld te tonen met verharde en onverharde wegen, met busbanen, fietspaden, wandelpromenades, parkeerplaatsen, naast de “standaard” typering van straat, lokale weg, regionale weg, hoofdweg, en autosnelweg. Met wat puzzelen kom je al een heel eind zonder voor elk wegtype de “wegdeel_vlak” als nieuwe kaartlaag te moeten inladen. Ook tunnels zijn te doen door in het SQL “WHERE” gedeelte de filter ‘”Hoogteniveau” = 0’ op te nemen en de wegdeel_hartlijn-laag wel (vaag) te tonen. Het wordt pas spannend bij de omlijning van de wegen. Want ik wil graag een omlijning om het wegbeeld als geheel, maar ook tussen autowegen en fietspaden, maar dan weer niet op kruisingen. Voor een omlijning van het gehele wegbeeld zet ik een “wegdeel_vlak” laag ónder de gekleurde wegenlaag, met transparante vulling en donkere lijn. En dan flink goochelen met het SQL “Where” filter. Een eigenaardigheid die ik daarbij tegenkwam was dat die omlijning aanvankelijk om àlle wegdelen zichtbaar was. In theorie sluiten de wegdelen naadloos aan, maar QGIS rendert dat (door afrondingscalculatie?) toch niet helemaal aansluitend. Dus heb ik de opvulling van ieder gekleurd wegdeel ietsiepietsie moeten uitbreiden. Het resultaat is zichtbaar op de volgende voorbeelden.
OSGeo wiki link Galerie: Almere
OSGeo wiki link Galerie: Naarden
OSGeo wiki link Galerie: Wijchen
OSGeo wiki link Galerie: Zeist
Het kan natuurlijk altijd beter. Waar ik nog naar op zoek ben, is een manier om ongelijkvloerse kruisingen van wegdelen van hetzelfde type aan te geven met “viaduct” lijntjes. Dus een snelweg die een snelweg kruist voorzien van een dubbele lijn zodat je ziet welke snelweg over welke snelweg gaat. Ik houd me aanbevolen voor de magic tip…
Een erg aardige bijkomstigheid die opvalt als je de nieuwe (2011) release vergelijkt met de ESRI Shape bestanden uit 2009: de dataset groeit echt in kwaliteit, zie illustratie hieronder. Met name de gebouwcontouren zijn aanmerkelijk beter. Uiteraard is de volgende stap om in plaats van de gebouwcontouren de BAG pandcontouren te gebruiken. Scheelt Kadaster ook weer flink wat werk in het actualiseren van de dataset. Deze “verversingsfrequentie” is nu iedere twee jaar, met de ambitie om naar jaarlijks te gaan.
De kleurenschema’s komen (als .qml bestanden) vrij beschikbaar via www.nlextract.nl. De naamgeving is zoveel mogelijk gelijkgetrokken met de namen van de TOP10NL kaartlagen. Ik heb ook geprobeerd ze als SLD bestanden te exporteren, maar ik heb nog geen plugin gevonden die alle features in SLD kan modelleren en exporteren. Ik houd me aanbevolen voor tips.
Een tekstinstructie voor het configureren van de kaartlagen vind je hier.
Vragen of tips over het opmaken van de TOP10NL? Neem gerust contact op. Zie ook de Galerij.
En gelijk boter bij de vis:
De QML bestanden zijn te downloaden vanaf nlextract.nl:
https://github.com/opengeogroep/NLExtract/tree/master/top10nl/style/qgis/jw_van_aalst
Of in één keer als zipfile via:
http://www.imergis.nl/file/QGIS-kleurenschemas-jwstyle-qmlformaat.zip
Een tekst-instructie voor het plaatsen van de Top10NL kaartlagen in QGIS, inclusief SQL filter per kaartlaag, kun je downloaden vanaf http://www.imergis.nl/file/QGIS-Top10NL-JWkleuren-QML-instructies.txt
De logica van complexe kruisingen van wegdelen zit gedeeltelijk in het gebruik van symbol_h0 als attribuut voor het visualiseren. Als de waarde van dit attribuut “0” is, dan is het object niet zichtbaar op de kaart, omdat het verborgen zit onder een ander object dat er bovenop ligt. Er is al het ware een berekening uitgevoerd op basis van het attribuut “hoogteniveau”. Als je te veel inzoomt kan het zijn, dat er dus ineens objecten lijken te ontbreken. Een ander deel van de logica van complexe kruisingen van wegdelen zit in het attribuut “fysiekvoorkomen” om te bepalen of een wegdeel op een brug ligt of in een tunnel. Ten slotte is natuurlijk het attribuut “hoogteniveau” zelf een indicator, maar dit is volgens mij niet overal consequent ingevuld. Bovendien is slechts 1 waarde beschikbaar voor het hele wegdeel. Hierdoor is het niet duidelijk of het begin of het eind van een wegdeel bijvoorbeeld misschien wel op maaiveldniveau ligt. De aansluiting zou dan toch een zwarte lijn krijgen die eigenlijk de zijkant van de weg visualiseert. Nu het Kadaster in het kader van de automatische generalisatie van TOP10NL naar TOP50NL hier zelf ook tegenaan loopt worden deze punten in volgende versies beter aangepakt.
Hoi JW,
Indrukwekend hoe je alles voor elkaar gekregen hebt. Dat gaat boven hobby, dit wordt professioneel!
Je roeping om cartograaf te worden heb je zo toch kunnen invullen.
In GitHub staat naast de opmaak van Jan-Willem ook mijn opmaak welke iets fellere kleuren heeft en meer op de oude Top10 lijkt.
Bijvoorbeeld Den Helder:
De URL naar het plaatje van Den Helder is https://github.com/LuukS/NLExtract/raw/master/top10nl/style/qgis/luuk_schaminee/Voorbeelden/Top10NL%20-%20Den%20Helder.png
bij het laden van je stijlen krijg ik een foutmelding :
tag mismatch in regel 45 kolom 9
In de PDOK viewer is het mogelijk om onderscheid te maken in wegdeel vlakken (parkeren, voetgangers, fietsers, straat, lokale weg, regionale weg, hoofdweg en autosnelweg). Het lukt me echter niet om de top10nl map van Eindhoven in QGIS te importeren zodat ik deze onderverdeling te zien krijg. Zou ik hiermee geholpen kunnen worden? Het omzetten van GML nar PostGIS is me namelijk ook niet duidelijk.
Hallo Rob,
Het omzetten van GML naar PostGIS is een helse klus waar je beter niet zelf aan kunt beginnen: dit hebben de jongens van NLExtract al voor ons gedaan. Dat scheelt veel werk.
Eerst moet je zelf PostGRES installeren met de PostGIS extensie (http://www.postgresql.org/download/). Zorg aan het einde van de installatie dat je “PostGIS extensie” aanvinkt. Je kunt vervolgens de PostGIS Top10NL backup file downloaden vanaf http://data.nlextract.nl/top10nl/postgis/ en dan met het tool PgAdminIII restoren naar je gloednieuwe PostGIS omgeving (wel eerst even een lege database aanmaken met naam Top10NL). Vervolgens kun je in QGIS een nieuwe kaartlaag kiezen via kaartlaag toevoegen -> PostGIS, en dan voor tabel “wegdeel_vlak” kiezen. Bij de styling in QGIS van die laag kun je dan kiezen voor “categorie” met als indexveld “typewegdeel”. Het gegevensmodel van Top10NL verandert echter eind dit jaar, in de novemberversie is de wegvlakindeling anders dan in de september release.
Hallo Jan-Willem,
Voor een ontwerp heb ik een kaart met de fietspaden van Rotterdam nodig, maar wanneer ik de GML-file in Qgis laad, laat deze niet dezelfde details zien als ik op jouw kaarten te zien krijg. Ik ben helemaal nieuw in het werken met Qgis en Postgis en online manuals helpen me niet verder.
Wat moet ik precies doen om een kaart met de lagen met fietspaden te zien? Is er iemand die mij daarbij helpen kan?