BRT Achtergrondkaart label styling

Is ergens inzichtelijk hoe de styling van de huidige BRT Achtergrondkaart is opgebouwd?
Daarbij ben ik vooral op zoek naar de stylingsregels voor de labels.

Ik ben dus benieuwd naar:

  • welke lagen worden er gebruikt voor de labels (Plaats, Waterdeel, etc.)
  • welke labels worden op welke zoomniveaus getoond
  • worden hierbij bijv. attributen als visualisatie code of type gebied gebruikt
  • hoe wordt er omgegaan met de verschillende geometrie soorten en bijv. aansluitende objecten met gelijke naam

Is deze informatie ergens beschikbaar?

Hallo @damien, de BRT Achtergrondkaart wordt samengesteld in Mapserver met behulp van een geopackage voor de data en een mapfile voor de stylingsregels. Deze mapfile wordt nu nergens ontsloten. De belangrijkste reden hiervoor is dat de BRT Achtergrondkaart alleen als plaatje (WMTS) wordt ontsloten en niet als data, dus dan heeft de gebruiker in principe ook niks aan de stylingsregels. Als je hier toch belang bij hebt kunnen we deze wel met je delen. Mocht blijken dat er een bredere behoefte aan is dan kunnen we ook overwegen deze via de officiĂ«le kanalen te ontsluiten. Een deel van de stylingkeuzes wordt natuurlijk ook al ‘voorbereid’ in de data, dus je kunt ook weer niet alles opmaken uit de Mapfile. Hierbij alvast een poging om wat duidelijkheid te geven:

1. Lagen voor labeling: de labels worden gegenereerd op basis van de TOP10NL objecten uit de objectklasses ‘Plaats’, ‘Waterdeel’ en ‘Wegdeel’. Op de labels van plaatsnamen wordt nog een soort fishnet toegepast om de plaatsnamen min of meer gelijkmatig over Nederland te verspreiden. De labels voor plaats- en wegnamen komen uiteindelijk allemaal terecht in een speciale laag voor annotaties, de labels voor de waterdelen hebben een eigen laag per zoomniveau.

2. Labels per zoomniveau: in de voorbereiding van de data wordt voor elk object bepaalt wat het minimale en het maximale schaalniveau is. In elke laag zijn hier speciale attributen voor aanwezig in de data. De mapfile gebruikt deze attributen. Waar nodig kunnen deze attributen nog overruled worden door de mapfile.

3. Attributen voor visualisatie: In principe vindt de styling volledig plaats op basis van visualisatiecodes en de al genoemde attributen voor schaalniveau. Alleen bij de laag van de labels worden extra attributen gebruikt voor labelgrootte, prioriteit en uiteraard de labeltekst zelf.

4. Geometriesoorten en objecten met gelijke naam: De annotatielaag is een puntenlaag, al dan niet op basis van centerpoints van TOP10NL vlakobjecten. De labeling van waternamen gaat niet op basis van punten maar op basis van (hart)lijnen en de watervlakken zelf voor de diepste zoomniveau’s. Naast elkaar gelegen weg- en waterobjecten met dezelfde naam worden bij de voorbereiding van de data gedissolved.

1 like

Hoi @JaccoMijnders, bedankt voor het duidelijke antwoord.
We werken met een vergelijkbare achtergrondkaart in een omgeving waar we geen toegang hebben tot externe web-services, vandaar de vraag.
De genoemde mapfile zou ik graag ontvangen. Op basis daarvan kunnen we onze huidige labels verbeteren.

Kun je het toepassen van de ‘fishnet’ over de plaatsnamen wat verder toelichten?
Welke tooling wordt daar bijv. voor gebruikt?

De BRT achtergrondkaart wordt vaak gebruikt als referentieondergrond. Het kan voorkomen dat dit juridische betekenis heeft of krijgt.

Zo wordt in de standaarden Omgevingswet gesteld dat vastgelegd moet worden welke ondergrond zichtbaar was in de viewer op het moment van vaststellen van een besluit tot wijzigen van een regeling. Dit met het idee om die ondergrond later weer zichtbaar te kunnen maken (bijvoorbeeld in het geval van een geschil).

Bij wijzigende visualisatieregels wordt dit natuurlijk een uitdaging. In mijn beleving is het bovenstaande beschreven principe dan ook niet heel goed om de rechtszekerheid te borgen. Maar gegeven deze werkwijze is het denk ik wel heel aardig om de mapfiles te ontsluiten (evenals de toegepaste versie van Mapserver :frowning: ) op bijvoorbeeld GitHub, zodat hiervan een versie historie ontstaat.

Ik weet, het is allemaal natuurlijk dan niet “officieel” enzo, maar als je toch overweegt om mapfiles te delen, dan is het denk ik een aardige optie.

Als je de MAP-files hebt, moet je ook de bijbehorende data hebben om het juiste kaartbeeld te krijgen. Zo zou je dus in het kader van het DSO de website Topotijdreis.nl kunnen uitbreiden met iedere update van de BRT-Achtergrondkaart om ten alle tjden de referentiekaart op te kunnen roepen die vigeerde op het moment, dat een omgevingsdocument werd vastgesteld ;-). Benieuwd trouwens of de Archiefwet hier ook een rol in speelt!

Bij het opstellen van de BRT-Achtergrondkaart (in 2010) is de visualisatie indertijd afgestemd met de Rijkshuisstijl. In dat kader is vastgelegd wat je laat zien op welk zoomniveau. Dit is nog altijd beschikbaar op de website van de Rijkshuistijl onder het kopje “Webcartografie”. Wellicht, dat dat alvast handvatten biedt om zelf aan de slag te gaan?

Inderdaad, maar dat is toch het hele idee van de BRT? Dan de onderliggende data bewaard wordt, met een begin en eind datum.

Overigens is “Beschikbaar” een woord dat voor interpretatie vatbaar is. Je hebt een login nodig om bij het document te kunnen.

Ik zal proberen de toepassing van het fishnet-principe voor de spreiding van de plaatsnaamlabels iets verder toe te lichten:

We maken hiervoor gebruik van een python script. Als input voor dit script dienen de plaatsvlakken uit TOP10NL, omgezet naar punten. Per zoomniveau wordt er een fishnet over Nederland gelegd en binnen elke ruit van het fishnet wordt de plaatsnaam met het hoogste inwoneraantal geselecteerd. Op deze manier kan een kleinere plaats in een dunbevolkt gebied toch relatief snel op de kaart verschijnen zodat de kaart daar niet (te) leeg blijft en in dichtbevolkte gebieden niet te vol raakt.

Een formule* bepaalt per schaalniveau hoe groot de ruiten van het fisnet zijn en hoeveel ruiten er in het extent (alle plaatspunten + 25 km marge) passen. Voor zoomlevel 0 wordt Nederland bijvoorbeeld in ruiten van ca. 295 x 182 km verdeeld wat ten opzichte van de extent betekent dat er vier ruiten over Nederland gelegd kunnen worden (eigenlijk maar twee over Nederland zelf). In de bovenste ruit wordt Amsterdam als grootste plaats gemarkeerd en in de onderste ruit Rotterdam waardoor op zoomlevel 0 alleen deze twee plaatsen in aanmerking komen voor labeling (al worden deze later in het proces nog overruled). Voor alle volgende schaalniveaus wordt deze procedure herhaald waarbij de ruiten steeds 4x zo klein worden.

image

Omdat naast een evenwichtige spreiding ook de relatieve belangrijkheid van plaatsnamen een rol speelt worden er aan de uitkomsten van de fishnet-spreiding uitzonderingen toegevoegd. Er worden zowel plaatsnamen verwijderd als plaatsnamen toegevoegd.

* 2.4 (is een parameter en kan eventueel worden gewijzigd) * 0.01 (= 0.024) * schaalniveau vh zoomlevel = de breedte van de ruit. De hoogte wordt vervolgens bepaald d.m.v. het golden ratio principe waarbij de breedte door 1.618 wordt gedeeld. Voor zoomlevel 0 (vanaf 1:12288000) betekent dat dus: 0.024 * 12.288.000 = 294.912 meter breed / 1.618 = 182.269 meter hoog. Voor zoomlevel 0 wordt Nederland dus in ruiten van ca. 295 x 182 km verdeeld.

4 likes

Hoi Jacco, opnieuw bedankt voor het uitgebreide antwoord!
Hier ga ik mee aan de slag.

1 like