BAG verwerking

De Basisregistratie Adressen en Gebouwen (BAG) is de belangrijkste bron voor de gebouwde omgeving in het model. Uit de BAG worden panden en verblijfsobjecten (vbo’s) afgeleid, inclusief hun gebruiksdoel, oppervlakte, bouwjaar en status. Deze pagina beschrijft hoe de BAG wordt verwerkt: van de XML-levering van het Kadaster tot de jaarlijkse snapshots waarmee het model rekent.

Het kernidee van de BAG-verwerking is dat niet één momentopname wordt ingelezen, maar de volledige levensloop van elk object: alle statussen en geldigheidsperioden. Daardoor kan het model een snapshot maken van de BAG op elke gewenste peildatum, zonder dat per jaar een aparte BAG-levering nodig is. Voor elk jaar vanaf 2012 tot en met BAG_RecentYear bestaat zo een snapshot per 1 januari, dat pas wordt uitgerekend wanneer iets erom vraagt.

De verwerkingsketen

BAG 2.0-extract (XML, Kadaster)
  │
  │  BAG-Tools: Xml2MMD (buiten RSopen, eenmalig per levering)
  ▼
Compacte stores, alle voorkomens      %RSo_DataDir%/Vastgoed/BAG_<BAG_file_date>_History/
  │                                   (pand.mmd, vbo.mmd, nummeraanduiding.mmd, ...)
  │
  │  VolledigeBAG (inlezen en verrijken)
  ▼
Snapshots per jaar                    BAG/PerJaar/Y2012 ... Y<BAG_RecentYear>
  (peildatum 1 januari)

Stap 1: de BAG downloaden

Het Kadaster levert de BAG als BAG 2.0-extract: een verzameling XML-bestanden met daarin alle voorkomens van alle objecten, dus inclusief de volledige mutatiehistorie.

Stap 2: XML naar compacte stores met BAG-Tools

Xml2MMD uit de BAG-Tools (een aparte GeoDMS-configuratie van Object Vision) zet het extract om naar een MMD-store per objecttype, met alle voorkomens. De stores zijn compact genoeg om rechtstreeks te lezen: identificaties als uint64, statussen als code met de labeltabel in de store, registratiedatums als yyyymmdd-getal, coördinaten in millimeters, pandvlakken vereenvoudigd met een tolerantie van 0,1 meter, en elk vbo met een punt. BAG-Tools geeft de map de naam BAG_<datum>_History; RSopen leest hem onder %RSo_DataDir%/Vastgoed/BAG_<BAG_file_date>_History/. Deze stap valt buiten de RSopen-configuratie en draait eenmaal per levering.

Een store beschrijft zichzelf: zijn dictionary noemt de eenheden buiten de store bij hun absolute pad, voor de coördinaten /Geography/rdc_mm. De configuratie moet die eenheid onder precies die naam kennen, anders laadt de store niet; main.dms heeft daarnaast aliassen onder /geometries voor stores die naar dat pad verwijzen. Het lezen van de stores vraagt GeoDMS 20.23 of later.

Staan de stores van een nieuwe levering in die map, dan vraagt die levering in RSopen alleen dat BAG_file_date wordt verzet en de basisdata opnieuw wordt gemaakt. De basisjaarcontroles van het diagnoseharnas (Diagnose/GenerateBasisjaar, onder meer basisjaar_woningen) en de sluitcontrole in BaseData/StartState/Verdeling_VSSH/Checks tonen dan of de woningstand nog met de BAG sluit.

Stap 3: VolledigeBAG leest in en verrijkt

De container VolledigeBAG leest de stores van pand, vbo en nummeraanduiding in en leidt per voorkomen attributen af, waaronder:

  • status_rel: koppeling van de status aan de statusclassificatie, via het label in de labeltabel van de store en niet via de volgorde van de codes (zie BAG statussen en voorraad);
  • Begindatum / Einddatum: de geldigheidsperiode van het voorkomen, als yyyymmdd-getal;
  • IsVoorraad: telt dit object mee in de voorraad volgens de CBS-definitie?
  • Bouwjaar_trunc: bouwjaar, getrunceerd (implausibele bouwjaren tot en met 1005 en bouwjaren na BAG_RecentYear worden null, bouwjaren voor 1500 worden 1500);
  • Footprint: pandoppervlakte op maaiveldniveau (m²);
  • oppervlakte_trunc: de gebruiksoppervlakte van het vbo, met de foutcodes van de BAG op null en een ondergrens voor elk object. Voor woonobjecten gelden twee bovengrenzen op een woningmaat (ModelParameters/Wonen/VBO_opp_truncation_upper en vijf keer de pandvoetafdruk). Die grenzen zijn op woningen geijkt en zouden bij utiliteit een groot deel van het vloeroppervlak wegdrukken, dus voor niet-woonobjecten wordt de oppervlakte begrensd op wat er fysiek in het pand past, uit de voetafdruk en de pandhoogte van de AHN-pandenset (ModelParameters/Advanced/VBO_opp_LaaghoogteNietWoon en VBO_opp_TolerantieNietWoon, #700);
  • gebruiksdoel-vlaggen per vbo (zie hieronder);
  • studiegebiedvlaggen per pand en vbo, die het model zelf berekent uit de ligging ten opzichte van de provinciegrenzen, want de stores kennen ze niet;
  • selectiecondities: alleen records met een geometrie binnen de bounding box van Nederland, panden met een omvang kleiner dan 1×1 km, en binnen het gekozen studiegebied (ModelParameters/StudyArea).

Eén pand of vbo kan in deze tabel meerdere records hebben: elk voorkomen (elke statuswijziging) is een eigen record met een eigen geldigheidsperiode. Dat is precies wat de snapshots per peildatum mogelijk maakt. Zie VolledigeBAG voor de details van het inlezen.

Stap 4: snapshots per jaar

De container BAG/PerJaar maakt via het sjabloon PerJaar_T voor elk jaar een snapshot met als peildatum 1 januari. Een record telt mee in het snapshot van jaar JJJJ als:

Begindatum < JJJJ0101  &&  Einddatum >= JJJJ0101

Per jaar worden drie selecties gemaakt, voor zowel panden als vbo’s:

Selectie Aanvullend criterium Gebruik
pand / vbo (“Voorraad”) IsVoorraad De voorraad volgens de CBS-definitie. Dit is de hoofdselectie waar de startstaat, geschiktheden en de meeste analyses op draaien.
pand_alle_statussen / vbo_alle_statussen geen (alle statussen) Identificatie van objecten in aanbouw of gevormd, ten behoeve van BAG nieuwbouw.
pand_alle_statussen_toekomst / vbo_alle_statussen_toekomst Begindatum >= JJJJ0101 (in plaats van <) Voorkomens die pas na de peildatum geldig worden: verleende bouw- en sloopvergunningen. Ook ten behoeve van BAG nieuwbouw.

Welke statussen wel en niet tot de voorraad horen staat uitgewerkt op BAG statussen en voorraad.

De store legt bij elke relatie tussen vbo en pand vast bij welk voorkomen van het vbo zij hoort. Elke selectie neemt alleen de relaties van haar eigen voorkomens, dus een vbo hangt in een jaarset aan de panden van zijn voorkomen op de peildatum en niet aan panden uit een eerdere registratie. In de toekomstset, die van hetzelfde vbo vaak meer voorkomens heeft, blijft elke relatie een keer per vbo en pand over, anders zou een woning met twee toekomstige voorkomens haar pand twee woon-vbo’s geven.

Afgeleiden per snapshot

Binnen elk jaarsnapshot worden vervolgens de modelrelevante grootheden berekend:

  • Woonpandtype (WP5): op basis van de pandgeometrie (buurpanden) en het aantal woon-vbo’s wordt elk pand getypeerd als vrijstaand, twee-onder-één-kap, hoekwoning, tussenwoning of appartement (AfleidingPandType, in SourceData/Vastgoed/BAG/AfleidingPandtype.dms). Hieruit worden de grovere indelingen WP4/WP3/WP2/WP1 afgeleid. De typering is een ontkoppeld bestand per pandenset en jaar onder %LocalDataProjDir%/BaseData/Vastgoed/BAG_<BAG_file_date>_History/WP5/, gelezen met BAG_WP5_rel_Ontkoppeld; omdat het een positionele array zonder sleutel is, toetst een IntegrityCheck of het bij de pandenset hoort met de regel dat een pand met meer dan één woon-vbo een appartement is.
  • Gebruiksdoelen: een vbo kan meerdere van de elf BAG-gebruiksdoelen hebben; deze worden opgeslagen als bitmask (functie_code). Het dominante gebruiksdoel volgt de CBS-methodiek: heeft het vbo een woonfunctie, dan woon; anders bij precies één utiliteitsfunctie die functie; bij meerdere utiliteitsfuncties utiliteit_combi. Voor de oppervlaktekolommen wordt het oppervlak van zo’n combi-object verdeeld over de functies die het zelf heeft, met een verdeelsleutel uit ModelParameters/Werken/UtiliteitCombi (#667); de tellingen blijven het object bij utiliteit_combi tellen, want een verblijfsobject valt niet te halveren. Aanvullend kent RSopen de categorie Logistiek. Die is gebaseerd op een statische pandenlijst met logistieke panden (stand 2021, zie Referenties); met de schakelaar ModelParameters/Werken/BAG_LogistiekDynamisch wordt die lijst aangevuld met een uit LISA afgeleide typering van nieuwbouw vanaf 2021, zodat ook recente distributiecentra als logistiek tellen in plaats van als nijverheid. Een pand in aanbouw of vergund telt pas als logistiek zodra LISA er banen ziet; een regel op pandkenmerken vond het logistieke oppervlak wel, maar met een precisie van minder dan de helft (#703). Verder wordt voor panden zonder vbo (loodsen, kassen) het gebruiksdoel afgeleid uit ligging op IBIS-bedrijventerreinen of BRT-glastuinbouw, zodat ook zo’n pand meetelt in de bouwjaarselectie die bepaalt of een cel te jong is om te slopen (#222).
  • Oppervlaktes en counts: vbo-oppervlakte per pand, footprint per gebruiksdoel, aantallen vbo’s per pand en per gridcel. Voor grootheden die over panden worden gesommeerd telt elk vbo precies één keer, bij het pand dat de jaarset voor dat vbo kiest (eerste_pand_rel): onder de panden van zijn voorkomen het pand met het jongste bouwjaar, de regel die CBS hanteert bij het afleiden van de woonvoorraad, en bij gelijke bouwjaren of zonder bouwjaar het eerste in de volgorde van de BAG (#839). Voor de typering van een pand (welke functies zitten erin) telt een vbo bij elk gerelateerd pand mee.
  • Uitsmeermatrix: een toedelingsmatrix die panden verdeelt over de 25m-gridcellen die ze overlappen (Uitsmeer_key.dms), zie de uitleg bij BAG nieuwbouw in details.

Sturende parameters

Parameter Locatie Betekenis
BAG_file_date ModelParameters.dms Welke BAG-levering wordt gebruikt: de datum van het extract (yyyymmdd). Bepaalt de map BAG_<datum>_History en de map van de WP5-typering, en staat in de fingerprints van de basisjaarstand en de BAG-afleidingen, zodat een nieuwe levering die opnieuw laat maken.
BAG_RecentYear ModelParameters.dms Het meest recente jaar waarvoor een snapshot wordt gemaakt; tevens het “recentste jaar” in het BAG-nieuwbouwmechanisme.
RSo_DataDir ConfigSettings.dms Bronmap van RSopen, met daaronder Vastgoed/BAG_<BAG_file_date>_History.
StudyArea ModelParameters.dms Studiegebied-selectie; alleen objecten binnen dit gebied worden meegenomen.
BAG_WP5_rel_Ontkoppeld ModelParameters.dms Leest de WP5-typering uit het ontkoppelde bestand (TRUE) of rekent haar opnieuw (FALSE).
BAG_LogistiekDynamisch ModelParameters/Werken.dms Vult de statische logistieke pandenlijst (stand 2021) aan met een LISA-afgeleide typering van nieuwbouw vanaf 2021, via een ontkoppeld bestand met alleen pand-id’s; de drempels staan in ModelParameters/Werken/LogistiekAanvulling. Hergenereren na een BAG- of LISA-vintagewissel: schakelaar tijdelijk uit, WritePrivData/LogistiekAanvulling/Generate draaien, schakelaar weer aan.
UtiliteitCombi/Verdeelsleutel ModelParameters/Werken.dms Hoe het oppervlak van een combi-object over zijn eigen functies wordt verdeeld: naar de typische omvang van elke functie, in gelijke delen, of helemaal niet (dan blijft de klasse heel en gaat zij naar nijverheid).

Gebruik in het model

De jaarsnapshots worden op veel plekken gebruikt, onder andere:

  • de startstaat voor wonen, werken en verblijfsrecreatie (snapshot van Model_StartYear);
  • het BAG-nieuwbouwmechanisme, dat het snapshot van het modeljaar vergelijkt met dat van BAG_RecentYear;
  • geschiktheidskaarten (onder andere nabijheid detailhandel, monumentale panden, sloopkosten);
  • de eigendomsstaat (verdeling vrije sector / sociale huur) en de koppeling met LISA-banen.

Relevante bronbestanden

Bestand Rol
SourceData/Vastgoed/BAG.dms Hoofdbestand: VolledigeBAG (inlezen van de stores van BAG-Tools) en PerJaar (snapshots via PerJaar_T)
main.dms De container geometries met de eenheden waar de stores naar kunnen verwijzen
SourceData/Vastgoed/BAG/AfleidingPandtype.dms Afleiding woonpandtype (WP5) per snapshot
SourceData/Vastgoed/BAG/Uitsmeer_key.dms Toedelingsmatrix van pand naar gridcellen
Classifications/Vastgoed/BAG.dms Statusclassificaties, voorraad-vlaggen, gebruiksdoelen, WP-indelingen en de verdeelexpressies voor utiliteit_combi
WritePrivData/LogistiekAanvulling.dms Genereert de LISA-afgeleide aanvulling op de logistieke pandenlijst (ontkoppeld bestand met alleen pand-id’s); de replicatie-toets waarmee de regel is gekalibreerd staat ernaast in WritePrivData/LogistiekReplicatie.dms

Table of contents