Voor online weergave van gegevens behorende bij gemeentes en wijken maakte ik een Leaflet toepassing.
In de kaart worden de gemeentes en wijken uit de dataset CBS Wijken en Buurten (2019) geladen.
De stijl en werking van de kaart is gebaseerd op Interactive Choropleth Map - Leaflet - a JavaScript library for interactive maps.
Ten behoeve van de snelheid van de weergave is de landelijke dataset voor gemeenten gedownload en zijn onnodige metagegevens verwijderd (55MB teruggebracht tot +/- 36MB).
Voor weergave van wijken wordt juist de WFS met bounding box toegepast om slechts de gegevens in te laden van de wijken die in de kaart zichtbaar zijn.
De desondanks behoorlijke datatransfers worden voor het oog versneld door de geojson op de leaflet map te streamen.
Een WMTS waarop de gegevens zijn ingetekend zou natuurlijk beter zijn, maar dat ligt buiten mijn expertise.
1) Verschil nieuwe service BRT-A
De gebruikte achtergrondkaart is de BRT-Achtergrondkaart grijs.
Vooralsnog laad ik die via de WMTS van geodata.nationaalregister.nl, tot 28 oktober.
De nieuwe service voor achtergrondkaarten van PDOK kaart toont de omliggende landen - en vooral de zee - minder mooi, vind ik. Waarom dat zo verschilt is mij onduidelijk. Weet iemand hier dat?
Zie https://open-roads.nl/wp-content/uploads/kaartverschil.jpg (PNG, 58KB)
Edit: ik lees hier meer.
2) Projectieconversies
Omdat ik geen GIS-specialist ben was het even zoeken naar een geschikt voorbeeld van conversie van projecties in deze context. Duidelijk was dat voor Leaflet Proj4Leaflet nodig is. Het duurde even voor ik duidelijk had dat voor een request met bounding box o.b.v. Leaflet zoiets als het volgende gebruikt kan worden (JavaScript):
var bngcoordsmin = proj4('EPSG:28992', [map.getBounds().getWest(), map.getBounds().getSouth()]);
var bngcoordsmax = proj4('EPSG:28992', [map.getBounds().getEast(), map.getBounds().getNorth()]);
var bngcoords = bngcoordsmin + ',' + bngcoordsmax;
var baseUrl = 'https://geodata.nationaalgeoregister.nl/wijkenbuurten2019/wfs';
var defaultParams = {
service: 'WFS',
version: '2.0.0',
request: 'GetFeature',
typeName: 'cbs_wijken_2019',
srsName: 'EPSG:4326',
outputFormat: 'application/json',
bbox: bngcoords
};
return (baseUrl + L.Util.getParamString(defaultParams));
Hierbij neemt proj4 (door gebruik van één projectie parameter) aan dat WGS84 als uitgangspunt geldt.
‘EPSG:28992’ verwijst naar de CRS definitie die voor de Leaflet kaart is ingesteld:
var RD = new L.Proj.CRS( 'EPSG:28992','+proj=sterea +lat_0=52.15616055555555 +lon_0=5.38763888888889 +k=0.9999079 +x_0=155000 +y_0=463000 +ellps=bessel +units=m +towgs84=565.2369,50.0087,465.658,-0.406857330322398,0.350732676542563,-1.8703473836068,4.0812 +no_defs',
{
resolutions: [3440.640, 1720.320, 860.160, 430.080, 215.040, 107.520, 53.760, 26.880, 13.440, 6.720, 3.360, 1.680, 0.840, 0.420, 0.210, 0.105, 0.0525, 0.02625, 0.013125],
bounds: L.bounds([-285401.920, 903401.920], [595401.920, 22598.080]),
origin: [-285401.920, 903401.920]
}
);
3) Nice to have: BRT-A zonder labels, WMTS met alleen labels
Leaflet geeft met map panes de mogelijkheid om een kaart gelaagd op te bouwen.
Idealiter zou voor deze toepassing de BRT-A zónder labels als achtergrondkaart gebruikt worden en een WMTS service met enkel de labels op transparante tiles gebruikt worden om deze in een map pane op de voorgrond weer te geven.
Daar zouden nieuwe varianten van de BRT-A layers voor moeten worden gemaakt: voor elke stijl een extra layer zonder labels, en een layer met enkel de labels.
Ik ben benieuwd of deze bevindingen iemand op ideeën kunnen brengen.