Elk adres in Nederland heeft een bouwjaar. Het staat in de BAG, de Basisregistratie Adressen en Gebouwen. Zet je 9,3 miljoen van die bouwjaren op de kaart, dan zie je Nederland groeien. Druk op afspelen.
Elk blok is een vierkante kilometer, en de hoogte is het aantal adressen. Blauw is wat er al stond: hoe lichter, hoe meer adressen. Oranje is wat er in die periode bij kwam. De balken onder de kaart tonen per decennium hoeveel adressen er bij kwamen.
Klik op een balk om naar één periode te gaan. Zoom in met de knop + of met het muiswiel, op een telefoon met twee vingers. Sleep om de kaart te verschuiven. Met de muis op een blok zie je hoeveel adressen erin staan. De knop 2D legt de kaart plat.
Wat je op de kaart ziet
De jaren zeventig zijn de grootste bouwperiode. Van de adressen die er nu staan, hebben er 1.365.073 een bouwjaar van 1970 tot en met 1979. Tel je alles van vóór 1980 bij elkaar, dan kom je op 4.842.696 van de 9.291.729 adressen. Iets meer dan de helft van alle adressen is dus ouder dan 45 jaar.
In de jaren zeventig verschijnt Lelystad als nieuwe oranje vlek in de polder. Almere komt pas daarna. Van de 103.393 adressen in Almere hebben er 2.991 een bouwjaar van vóór 1980.
De oorlog zie je in de balken. In de jaren dertig kwamen er 478.990 adressen bij, in de jaren veertig 138.454. Daarna gaat het hard: 651.727 in de jaren vijftig en 1.076.599 in de jaren zestig.
Echt oud is zeldzaam. 295.682 adressen hebben een bouwjaar van vóór 1900, 3,2% van het totaal. In het eerste beeld zijn dat de oranje stadskernen.
De kaart toont alleen adressen die nu nog bestaan. Een wijk uit 1960 die in 2000 is gesloopt, staat er niet op. De vroege jaren lijken daardoor kleiner dan ze toen waren.
Wat er straks bij komt
Het laatste beeld heet “straks”. Daarin staan 298.365 adressen die nog niet af zijn: 177.644 met een verleende bouwvergunning en 120.721 waar de bouw is gestart. De BAG kent die adressen al voordat er iemand woont.
Amsterdam heeft er de meeste: 27.271. Daarna komen Rotterdam met 15.576, Utrecht met 12.830 en Den Haag met 10.914. Van alle 298.365 hebben er 252.991 een woonfunctie. Plan je aansluitingen, bezorging of de werving van nieuwe klanten, dan heb je zo een adreslijst met coördinaten voordat de eerste bewoner er is.
De data: vier kolommen uit één bestand
Alles op deze pagina komt uit één CSV: het adressenbestand Zilver van postcode.store. Daarin staat elk adres uit de BAG op een eigen rij. Voor de kaart zijn vier kolommen nodig:
| Kolom | Wat erin staat |
|---|---|
BouwJaar |
het bouwjaar van het pand |
PandStatus |
in gebruik, vergund, in aanbouw, gesloopt |
XCoordinaat |
RD-coördinaat oost-west, in meters |
YCoordinaat |
RD-coördinaat zuid-noord, in meters |
De truc zit in de RD-coördinaten. Rijksdriehoek is het Nederlandse coördinatenstelsel, en de eenheid is de meter. Deel je X en Y door 1000 en rond je af naar beneden, dan heb je het vak van een kilometer waarin het adres ligt. Je hebt geen geografische functies nodig. Met latitude en longitude zou je eerst moeten omrekenen naar een vlakke kaart.
Na een CSV-import zijn de kolommen tekst. Daarom staat er overal TRY_CAST: een waarde die geen getal is, wordt NULL en geeft geen fout.
De query
WITH a AS ( SELECT CAST(FLOOR(TRY_CAST(XCoordinaat AS float) / 1000) AS int) AS km_x, CAST(FLOOR(TRY_CAST(YCoordinaat AS float) / 1000) AS int) AS km_y, TRY_CAST(BouwJaar AS int) AS jaar FROM dbo.PostcodetabelZilver WHERE PandStatus NOT IN ('Bouwvergunning verleend', 'Bouw gestart', 'Pand gesloopt'))SELECT km_x, km_y, CASE WHEN jaar < 1900 THEN 1800 ELSE jaar / 10 * 10 END AS decennium, -- 1800 = alles van vóór 1900 COUNT(*) AS adressenFROM aWHERE km_x IS NOT NULL AND km_y IS NOT NULL AND jaar <= 2026GROUP BY km_x, km_y, CASE WHEN jaar < 1900 THEN 1800 ELSE jaar / 10 * 10 END;jaar / 10 * 10 is een deling van gehele getallen: 1974 / 10 is 197, maal 10 is 1970. Zo krijgt elk adres het begin van zijn decennium.
Het filter op PandStatus haalt drie soorten adressen uit de kaart. Een vergund pand of een pand in aanbouw staat er nog niet. Die gaan naar het beeld “straks”. Een gesloopt pand staat er niet meer.
De query geeft 246.190 rijen: één per vierkante kilometer per decennium, alleen waar adressen zijn. Opgeteld zijn dat 9.291.729 adressen.
Klopt de som?
Een kaart die stil adressen verliest, ziet er net zo mooi uit als een kaart die klopt. Daarom telt het script elke rij van het bestand. Van de 9.590.787 rijen staan er 9.291.729 op de kaart als gebouwd en 298.365 in “straks”. De laatste 693 vallen af: 680 hebben geen coördinaten, en 13 zijn gesloopt of hebben als pand in gebruik een bouwjaar na 2026.
Telt het niet op tot 9.590.787, dan stopt het script met een fout. Die controle is één keer bewust kapotgemaakt: met een extra filter in de query viel een deel van de adressen weg en weigerde het script.
Bouwjaren met een korrel zout
Het bouwjaar is niet altijd precies. Bij oude panden zie je pieken op ronde jaren: 21.394 adressen met 1890, 17.382 met 1880 en 14.304 met 1850. Dat wijst op schattingen. Er zijn ook 312 adressen met het bouwjaar 1005. Op een kaart per decennium vallen die allemaal in “vóór 1900”, dus ze verstoren het beeld niet.
De kaart zelf is één HTML-bestand
De kaart is een gewone HTML-pagina met één canvas, zonder library. Een klein Node-script draait de query met sqlcmd en schrijft het resultaat naar een JSON-bestand van 1,2 MB. Per vak staat daarin een rij getallen: de positie en het aantal adressen per periode.
De blokken tekent de pagina met WebGL, op de videokaart. Dat zijn er 31.943, en elk blok heeft een bovenkant en een voorkant. Met gewone canvas-functies duurde één beeld ruim 100 milliseconden, en dan hapert het verschuiven. Alle periodes staan in één buffer op de videokaart. Een andere periode kiezen verschuift alleen twee posities in die buffer, dus er gaat niets opnieuw over de lijn.
De hoogte van een blok is de wortel van het aantal adressen. Zonder die wortel zou het centrum van Amsterdam alles verbergen en zag je het platteland niet meer. De plaatsnamen staan op het gemiddelde RD-punt van de adressen van die plaats, uit hetzelfde bestand.
Open de kaart op een eigen pagina.
Zelf proberen
Met het gratis demobestand van postcode.store test je de query op een deel van de adressen, in hetzelfde formaat als het volledige bestand. De nieuwbouw per gemeente vind je zo:
SELECT TOP (10) Gemeente, COUNT(*) AS adressenFROM dbo.PostcodetabelZilverWHERE PandStatus IN ('Bouwvergunning verleend', 'Bouw gestart')GROUP BY GemeenteORDER BY adressen DESC;Zilver heeft ook de kolommen Doel, Oppervlakte, Buurt en Wijk. Vervang km_x en km_y door Wijk, en je hebt het bouwjaar per wijk in plaats van per vierkante kilometer.
Wil je de adressen zelf als punten op een kaart, lees dan postcodes op een kaart op postcode.store. Daar staat ook een animatie van de adresdichtheid per provincie. Zoek je alleen postcodes en huisnummerreeksen, begin dan bij de postcodetabel van Nederland in SQL Server.
Veelgestelde vragen
Hoe maak je een kaart van Nederland per bouwjaar met SQL Server?
Tel de adressen per vierkante kilometer en per decennium. Deel XCoordinaat en YCoordinaat door 1000 en rond af met FLOOR. Groepeer op die twee getallen en op het decennium van BouwJaar. Dat geeft 246.190 rijen voor heel Nederland.
Waarom zijn RD-coördinaten handig voor een rasterkaart?
Rijksdriehoekscoördinaten zijn meters. FLOOR(x / 1000) geeft dus meteen een vak van een kilometer, zonder geografische functies. Met latitude en longitude moet je eerst omrekenen naar een vlakke kaart.
In welk decennium zijn de meeste adressen in Nederland gebouwd?
In de jaren zeventig. Van de 9.291.729 adressen die nu staan, hebben er 1.365.073 een bouwjaar van 1970 tot en met 1979. Iets meer dan de helft van alle adressen is van vóór 1980.
Hoe vind je nieuwbouwadressen in de BAG?
Filter op de kolom PandStatus. De waarden 'Bouwvergunning verleend' en 'Bouw gestart' horen bij adressen die nog niet af zijn. In het adressenbestand waren dat er 298.365, waarvan 27.271 in Amsterdam.
Hoe betrouwbaar is het bouwjaar in de BAG?
Bij oude panden is het vaak een schatting. Het bestand heeft pieken op ronde jaren zoals 1850, 1880 en 1890, en een paar honderd adressen hebben een jaar als 1005. Gesloopte gebouwen staan er niet meer in.
Reacties