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, alsyyyymmdd-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 naBAG_RecentYearworden 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_upperen 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_LaaghoogteNietWoonenVBO_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, inSourceData/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 metBAG_WP5_rel_Ontkoppeld; omdat het een positionele array zonder sleutel is, toetst eenIntegrityCheckof 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 utiliteitsfunctiesutiliteit_combi. Voor de oppervlaktekolommen wordt het oppervlak van zo’n combi-object verdeeld over de functies die het zelf heeft, met een verdeelsleutel uitModelParameters/Werken/UtiliteitCombi(#667); de tellingen blijven het object bijutiliteit_combitellen, 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 schakelaarModelParameters/Werken/BAG_LogistiekDynamischwordt 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 |