BAG nieuwbouw in details
Het startjaar van de simulatie (Model_StartYear) valt zelden samen met de meest actuele BAG-jaargang: de BAG wordt dagelijks bijgewerkt, dus op het moment van modelleren is er doorgaans een recentere jaargang dan het basisjaar. Bovendien bevat de BAG statusinformatie over objecten die nog in aanbouw zijn of waarvoor een bouw- of sloopvergunning is verleend. Het BAG-nieuwbouwmechanisme benut beide bronnen om de startstaat bij te werken voordat de allocatie begint. Het resultaat geldt voor het eerste zichtjaar: deze ontwikkelingen hoeven niet meer door het model te worden gealloceerd.
Twee BAG-jaargangen
Het mechanisme werkt met twee BAG-snapshots:
| Jaargang | In code | Beschrijving |
|---|---|---|
| Modeljaar | BAG_ModelJaar = BAG/Y{Model_StartYear} | De voorraad op 1 januari van het startjaar. Dit is de stand waarop de startstaat (StateBasisjaar) is gebouwd. |
| Recentste jaar | BAG_RecentsteJaar = BAG/Y{BAG_RecentYear} | De meest recente BAG-jaargang die in het model is geladen. Hieruit komen zowel de voorraad op die peildatum als de toekomstset. |
Uit de recentste jaargang komen drie sets, zowel voor verblijfsobjecten (vbo’s) als voor panden; de selecties staan op BAG statussen en voorraad:
- Voorraad: objecten met een voorraadstatus op de peildatum.
- Alle statussen: alle objecten met een op de peildatum geldig voorkomen, dus ook in aanbouw, vergund of gevormd.
- Toekomst: voorkomens waarvan de begindatum op of na de peildatum ligt, dus mutaties die de BAG al kent maar die op de peildatum nog niet golden: verleende bouw- en sloopvergunningen, gestarte bouw, ingebruiknames en intrekkingen.
Vijf mutatiecategorieën
Door de twee jaargangen te vergelijken onderscheidt het model vijf categorieën mutaties, elk een eigen set vbo’s met bijbehorende panden. Daarnaast is er een route voor toevoegingen binnen bestaande panden, die geen voetafdruk draagt en hieronder apart staat.
Toevoegingen
| # | Naam in code | Selectiecriterium | Toelichting |
|---|---|---|---|
| 1 | NieuwVBO_TussenModelenRecentJaar | Vbo zit in de voorraad van het recentste jaar maar niet in die van het modeljaar | Gerealiseerde nieuwbouw en toevoegingen die al hebben plaatsgevonden. |
| 2 | NieuwVBO_NaRecentJaarWelActief | Vbo heeft op de peildatum van het recentste jaar de status Verblijfsobject gevormd | De pijplijn: objecten die al een registratie hebben maar nog niet als voorraad tellen. |
| 3 | NieuwVBO_NaRecentJaar | Vbo zit in de toekomstset maar niet in de voorraadset, zit niet al in categorie 2 en heeft geen ingetrokken status | Objecten die de BAG na de peildatum vormt of in gebruik neemt. |
De pijplijn (categorie 2) kent een ouderdomsgrens: alleen voorkomens met een begindatum vanaf ModelParameters/Advanced/PijplijnOndergrensDatum tellen mee, MaxLeeftijdPijplijn jaar voor BAG_RecentYear. Een vergunning die nooit tot bouw kwam draagt de status gevormd nog jaren en zou anders als toevoeging in de boeken komen zonder route eruit; de grens ligt waar de bouwtijd van een normaal project ophoudt, en op nul geldt geen ondergrens. Dezelfde grens geldt voor de panden met de status bouw gestart of bouwvergunning verleend.
De toekomstset bevat voorkomens en geen objecten: elke mutatie sinds de peildatum is een eigen rij. Categorie 3 en 5 worden daarom ontdubbeld naar een voorkomen per object, aan beide kanten tegelijk, want een object dat eerst wordt gevormd en daarna in gebruik genomen zou anders twee keer meetellen en een object met twee ingetrokken voorkomens twee keer worden afgetrokken. Een toekomstvoorkomen met een ingetrokken status (niet gerealiseerd, ingetrokken, ten onrechte opgevoerd) zegt dat er niets komt en telt niet als toevoeging.
Onttrekkingen
| # | Naam in code | Selectiecriterium | Toelichting |
|---|---|---|---|
| 4 | WegVBO_TussenModelenRecentJaar | Vbo zat in de voorraad van het modeljaar maar niet meer in die van het recentste jaar | Gerealiseerde sloop of onttrekking die al heeft plaatsgevonden. |
| 5 | WegVBO_NaRecentJaar | Vbo zit in de toekomstset met een ingetrokken status en was voorraad in het recentste jaar | Objecten waarvoor een sloopvergunning is verleend of die de BAG al als gesloopt of ingetrokken kent. |
Toevoegingen binnen bestaande panden
De pijplijnroute (categorie 2) rekent met panden die de status bouw gestart of bouwvergunning verleend dragen. Splitsingen, verbouwingen en transformaties binnen bestaande bouw leveren ook gevormde vbo’s op, maar in een pand dat al in de stand staat. Die objecten vormen de set NieuwVBO_InBestaandPand: gevormde woonobjecten in een pand met een op de peildatum geldig voorkomen dat niet in aanbouw of vergund is. Ze tellen als woningen met een voetafdruk van nul, op de ligging van het object zelf en dus zonder uitsmering, met het woningtype van het bestaande pand (een gesplitst appartementencomplex geeft meergezins, een gesplitste vrijstaande woning eengezins) en meergezins als terugval waar het pand geen typering heeft. Deze route voedt alleen de woonsector.
Panden
Voor panden zijn er drie sets: NieuwPand_NaRecentJaarWelActief (op de peildatum de status bouw gestart of bouwvergunning verleend, binnen de ouderdomsgrens), NieuwPand_NaRecentJaar (in de toekomstset, niet in de voorraad, niet al in de eerste set en niet ingetrokken) en WegPand_NaRecentJaar (in de toekomstset met een ingetrokken status). De eerste twee dienen als pandenset bij het uitsmeren van categorie 2 en 3; hun voetafdruk per gebruiksdoel volgt uit het vbo-oppervlak van de objecten in diezelfde categorie. De uitsluiting van de eerste set in de tweede is nodig omdat een pand in aanbouw anders via beide sets met zijn volledige voetafdruk twee keer als nieuwbouw in de boeken komt. Voor de onttrekkingen (categorie 4 en 5) is de pandenset de volledige pandvoorraad van het modeljaar respectievelijk het recentste jaar: een onttrokken verblijfsobject zit per definitie in die voorraad, dus zijn pand ook, en een vernauwing tot de panden met een sloopvoorkomen zou elke onttrekking zonder pandsloop (samenvoeging, functiewijziging, onttrekking van een enkel appartement) stil uit de aftrek laten vallen.
Per gebruiksdoel: CalcNieuwbouw_perDoel_T
Elke mutatiecategorie wordt vervolgens opgesplitst per BAG-gebruiksdoel (wonen, kantoor, logies, industrie en zo verder) via het sjabloon CalcNieuwbouw_perDoel_T. Dit sjabloon:
- Selecteert de vbo’s uit een mutatiecategorie met het betreffende gebruiksdoel, volgens de CBS-afleiding op het object zelf: een woonfunctie gaat voor, een enkele utiliteitsfunctie geeft die functie, meer utiliteitsfuncties geven
utiliteit_combi. De klasse Logistiek komt van het pand, zie BAG verwerking. - Koppelt elk vbo aan zijn gerelateerde pand via de
gerelateerdPand-tabel, zodat pandkenmerken (woningtype, voetafdruk, eigendomsvorm) beschikbaar zijn. - Berekent per vbo zijn aandeel in de pandvoetafdruk van dat gebruiksdoel. In de categorieën van gerealiseerde mutaties (1 en 4) is de verdeelsleutel het vbo-oppervlak: de voetafdruk van het gebruiksdoel in het pand maal het oppervlak van dit object, gedeeld door het oppervlak van alle objecten van dat doel in het hele pand (
VBOopp_InPand_perGebruiksdoel), dezelfde sleutel als aan de voorraadkant. Delen door het aantal objecten binnen de mutatiecategorie zou een enkel nieuw geregistreerd object in een bestaande hal de hele hal als nieuwbouw laten boeken. In de pijplijn- en toekomstcategorieën (2, 3 en 5) bestaat het pand alleen uit objecten van diezelfde categorie en is de voetafdruk per object de voetafdruk van het doel gedeeld door het aantal objecten van dat doel in het pand (Footprint_perGebruiksdoelgedeeld doorVbos_InPand_perGebruiksdoel). - Smeert de resultaten uit naar het 25m-grid (
CompactedAdminDomain) via het uitsmeersjabloon.
Uitsmeren naar gridcellen: Uitsmeren_T
Objecten uit de BAG zijn puntlocaties of polygonen; het model werkt op een 25m-raster. Het sjabloon Uitsmeren_T vertaalt individuele panden naar gridcellen. Dit is nodig omdat een pand vaak meerdere gridcellen overlapt. Als een pand zonder uitsmering aan slechts één cel zou worden toegekend, zou de naastgelegen cel als leeg worden beschouwd en mogelijk onterecht worden volgebouwd.
De uitsmering werkt als volgt:
- Vergridding naar 5m: de pandgeometrie wordt vergrid naar een 5m-raster (
poly2allgrids). Panden die geen 5m-cel raken (te klein of ongelukkig gepositioneerd) worden toegevoegd op hun centroïde. - Toedelingsmatrix: per combinatie van pand en AdminDomain-cel wordt een toedelingsgewicht berekend. Dit gewicht is het aandeel van de 5m-cellen van dat pand dat in de betreffende 25m-cel valt.
- Uitsmering: het aantal woningen (of de voetafdruk, of het aantal vbo’s) van een pand wordt vermenigvuldigd met het toedelingsgewicht en gesommeerd per 25m-cel.
Elk verblijfsobject telt daarbij bij precies één pand, het eerste gerelateerde pand binnen de pandenset (vbo_eerste_pand_rel), zodat een object met meerdere gerelateerde panden niet dubbel meetelt in de aantallen en oppervlaktes.
Het gevolg is dat een gridcel een fractie van een woning kan bevatten. Dit is een bewuste ontwerpkeuze: het voorkomt overschatting van beschikbare ruimte in aangrenzende cellen.
De uitsmering vindt afzonderlijk plaats voor elke combinatie van mutatiecategorie en woningtype (WP2: eengezins of meergezins, of WP4: rijtjes, twee-onder-een-kap, vrijstaand of appartement), en eenmaal voor het totaal. Bij sloop (WegVBO_*) wordt bovendien onderscheid gemaakt naar eigendomsvorm (vrije sector of sociale huur, WP2×VSSH), zodat de onttrekking correct kan worden verrekend met de startstaat.
Aggregatie naar sectoren
Na het uitsmeren worden de mutatiecategorieën samengevoegd tot nettomutaties per sector.
Wonen
De netto woningmutatie per WP2×VSSH-categorie per gridcel is:
Netto = NieuwVBO_TussenModelenRecentJaar (WP2→WP2×VSSH)
+ NieuwVBO_NaRecentJaarWelActief (WP2→WP2×VSSH)
+ NieuwVBO_NaRecentJaar (WP2→WP2×VSSH)
+ NieuwVBO_InBestaandPand (WP2→WP2×VSSH)
− WegVBO_TussenModelenRecentJaar (per WP2×VSSH)
− WegVBO_NaRecentJaar (per WP2×VSSH)
De uitsplitsing van de toevoegingen naar WP2×VSSH (woningtype en eigendomsvorm) gaat via het gemeentelijke aandeel sociale huur uit de eigendomsstaat (P_SH_perCompactedAdminDomain): elke cel in een gemeente krijgt dat aandeel als kans op sociale huur. Bij sloop is de eigendomsvorm van het pand zelf bekend uit de eigendomsstaat en wordt die gebruikt.
De pandvoetafdruk voor wonen is de som van de voetafdrukken van de vijf mutatiecategorieën; de toevoegingen binnen bestaande panden dragen geen voetafdruk.
Werken
Voor de werksectoren wordt de netto pandvoetafdruk per gebruiksdoel per gridcel berekend en gebundeld naar de zes werksubsectoren (Jobs6) volgens de vaste toewijzing van gebruiksdoelen aan subsectoren in Classifications/Actor. Vervolgens wordt die voetafdruk gedeeld door de dichtheid in vierkante meter pandvoetafdruk per baan van de betreffende subsector (BaseData/PandFootprint_baan, ruimtelijk variërend) om tot een netto aantal banen te komen:
Netto banen per cel = Netto pandvoetafdruk per cel / pandvoetafdruk_per_baan
Wanneer de nettomutatie negatief is (meer sloop dan nieuwbouw) wordt het resultaat begrensd op minus de celoppervlakte; wanneer het positief is op plus de celoppervlakte. Dit voorkomt onrealistische uitschieters door overlappende pandgeometrieën.
Verblijfsrecreatie
Voor logiesverblijven wordt het netto aantal vbo’s per cel geteld, analoog aan de woonsector maar zonder verdere typedifferentiatie. Alleen logies-objecten in panden binnen de CBS-verblijfsrecreatiegebieden tellen mee, dezelfde afbakening als de basisjaarstand en de trendanalyse voor de claim gebruiken, zodat stand en claim over dezelfde populatie gaan.
Wind en zon
De BAG-nieuwbouw levert geen mutaties op voor wind- en zonneparken en evenmin voor waterberging: die worden op nul gezet. Windturbines, zonnepanelen en bergingsgebieden zijn geen BAG-panden of vbo’s.
Toepassing op de startstaat: StartState_metBAGnieuwbouw
De nettomutaties worden opgeteld bij de oorspronkelijke startstaat per subsector per gridcel:
StartState_metBAGnieuwbouw = max_elem(StartState + BAG_nieuwbouw, 0)
De max_elem(..., 0) zorgt ervoor dat de stand niet negatief kan worden. Dit kan voorkomen wanneer in een cel meer sloop dan nieuwbouw is geregistreerd.
Correctie bij overschrijding celoppervlakte
Voor de pandvoetafdruk (zowel wonen als werken) geldt een aanvullende correctie: als de som van startstaat en BAG-nieuwbouw de celgrootte (NrMeter2PerCell) overschrijdt, wordt de bestaande stand naar beneden bijgesteld zodat het totaal op de celgrootte uitkomt. De BAG-nieuwbouw corrigeert in dat geval dus de oorspronkelijke startstaat. Dit kan optreden door overlappende pandgeometrieën, fouten in de BAG of afrondingseffecten.
Subsectorbepaling
In cellen waar de BAG-nieuwbouw een positieve nettomutatie oplevert, wordt via ArgMax over de netto subsectorkolommen de dominante subsector bepaald. Alleen positieve nettomutaties tellen: een cel met alleen sloop, of met meer sloop dan nieuwbouw, krijgt geen subsector en is voor de allocatie beschikbaar. Dit is de initiële subsectortoewijzing van de cel in het allocatieproces.
OP-toekenning aan BAG-nieuwbouw
Cellen die via de reguliere allocatie worden ontwikkeld krijgen een verwijzing naar het gekozen ontwikkelpakket (OP_rel). Indicatoren die kenmerken uit het ontwikkelpakket aflezen, met name de groenwaarde- en woningprijsbepaling, hebben zo’n verwijzing ook nodig voor de cellen met BAG-nieuwbouw. Daarom kent OPMatch_BAGnieuwbouw (binnen StartState_metBAGnieuwbouw) aan elke BAG-nieuwbouwcel met woningen een representatief ontwikkelpakket toe.
De toekenning gebeurt op basis van geobserveerde kenmerken van de gerealiseerde en geplande woningen in de cel. Het object staat er immers al, dus de stedenbouwkundige geschiktheid die bij reguliere allocatie wordt gebruikt is hier niet nodig; die zou bovendien een ongewenste afhankelijkheid van de geschiktheidsberekening introduceren.
| Kenmerk | Bron in de cel | Rol in de match |
|---|---|---|
| WP4 (woningtype) | dominante WP4 uit de nieuwbouwtellingen van de drie categorieën met voetafdruk (ArgMax over count_..._WP4) | harde eis, bepaalt onder andere de groencoëfficiënt per WP4 |
| VSSH (eigendomsvorm) | dominant via het gemeentelijke aandeel sociale huur (P_SH_perCompactedAdminDomain) | voorkeur (zware penalty bij mismatch) |
| Dichtheid | aantal nieuwbouwwoningen / celoppervlak | nabijheid ten opzichte van OP/Dichtheid |
| Woonoppervlakte per woning | woon-gebruiksoppervlak / aantal woningen | nabijheid ten opzichte van OP/Woonoppervlakte_woning |
Het best passende ontwikkelpakket is het pakket met hetzelfde WP4 (verplicht) en bij voorkeur dezelfde VSSH, met de kleinste relatieve afstand in dichtheid en woonoppervlakte per woning samen. Cellen zonder nieuwbouw blijven undefined en worden later door de reguliere allocatie gevuld; de toegekende waarde wordt via MakeDefined in de allocatie-iteratie behouden.
Een pakket wordt alleen toegekend waar de startstaat ook een subsector toekent. Het model steunt op de invariant dat een gedefinieerde OP_rel een gedefinieerde SubSector_rel impliceert. De woningtelling voor de match is de bruto toevoeging per WP4, terwijl de subsector uit de nettokolommen inclusief sloop volgt; een cel kan dus bruto nieuwbouw hebben terwijl geen nettokolom boven nul uitkomt. Zo’n cel is voor de allocatie beschikbaar, en met een proxypakket erop zou de eerste-wint-regel in de iteratie dat pakket laten staan terwijl de voetafdruk het nieuw gealloceerde pakket volgt.
De OP-toekenning levert alleen kenmerken. De woningaantallen blijven volledig uit de BAG-tellingen komen; het ontwikkelpakket wordt niet gebruikt om aantallen of dichtheid te herrekenen, want dat zou de BAG-totalen verstoren.
Voor deze match levert Uitsmeren_T naast de woning- en voetafdruktellingen ook het woon-gebruiksoppervlak per gridcel (vbo_opp_Per_CompactedAdminDomain).
Behoud van bestaande indicatoren
De vlag IsBAGnieuwbouwWonen markeert de cellen met een toegekend proxypakket. Indicatoren die de werkelijke bebouwing nodig hebben in plaats van de typologie van het ontwikkelpakket, zoals de verhardingsgraad, het piekbuibergingsaanbod, de overstromingsschade en de natuur- en waternabijheid, herkennen daarmee de BAG-nieuwbouwcellen en gebruiken daar de geobserveerde pandvoetafdruk; een cel geldt voor hen pas als fysiek ingericht ontwikkelpakket wanneer OP_rel gedefinieerd is en de vlag niet staat. De vlag wordt uit dezelfde OP_rel gelezen, zodat zij niet blijft kleven op een cel die later een echt pakket krijgt.
Samenvatting van het dataproces
BAG (volledige registratie)
│
├── Snapshot modeljaar (voorraad per 1 jan Model_StartYear)
│ └── StateBasisjaar (= startstaat)
│
└── Snapshot recentste jaar (BAG_RecentYear)
├── Voorraad ─┐
├── Alle statussen │──→ Vergelijking → 5 mutatiecategorieën + toevoegingen in bestaande panden
└── Toekomst ─┘ │
├── Per gebruiksdoel (CalcNieuwbouw_perDoel_T)
├── Uitsmeren naar 25m grid (Uitsmeren_T)
├── Aggregatie naar Wonen / Werken / Verblijfsrecreatie
│
└──→ StartState_metBAGnieuwbouw
= StartState + nettomutaties
→ input voor eerste zichtjaar
Relevante bronbestanden
| Bestand | Rol |
|---|---|
BaseData/BAG_Nieuwbouw.dms | Hoofdcontainer: vergelijkt jaargangen, definieert de mutatiecategorieën en de route voor toevoegingen in bestaande panden, aggregeert naar wonen, werken en verblijfsrecreatie |
BaseData/BAG_Nieuwbouw/CalcNieuwbouw_perDoel_T.dms | Sjabloon: splitst mutatiecategorieën per gebruiksdoel, initieert de uitsmering |
BaseData/BAG_Nieuwbouw/Uitsmeren_T.dms | Sjabloon: vertaalt tellingen op pandniveau naar gridcellen via de toedelingsmatrix |
SourceData/Vastgoed/BAG/Uitsmeer_key.dms | Genereert de toedelingsmatrix van pand via het 5m-raster naar het 25m-grid |
Templates/Allocatie_T/StartState_metBAGnieuwbouw.dms | Voegt nettomutaties toe aan de startstaat, inclusief correcties voor celgrootte; bepaalt de subsector en kent via OPMatch_BAGnieuwbouw een representatief ontwikkelpakket toe aan BAG-nieuwbouwcellen |
SourceData/Vastgoed/BAG.dms | BAG-inlezing en snapshotgeneratie per jaar (inclusief het sjabloon PerJaar_T) |
ModelParameters/Advanced.dms | MaxLeeftijdPijplijn en de afgeleide PijplijnOndergrensDatum |
Verantwoording
De keuzes hierboven zijn gemaakt in de volgende issues; daar staat de afweging en de meting die eraan ten grondslag ligt.
- #48 in de fork pbl-nl/model-RSopen: elk verblijfsobject telt bij precies één pand, het eerste gerelateerde pand binnen de pandenset.
- #364: de verblijfsrecreatie telt alleen logies-objecten binnen de CBS-verblijfsrecreatiegebieden, dezelfde populatie als de claim.
- #524: alleen een positieve nettomutatie geeft een cel een subsector; sloop alleen niet.
- #550: het representatieve ontwikkelpakket voor BAG-nieuwbouwcellen via de kenmerkmatch, de vlag
IsBAGnieuwbouwWonen, en de regel dat een pakket alleen komt waar de startstaat een subsector toekent. - #703: de verdeelsleutel op vbo-oppervlak in de gerealiseerde categorieën, de uitsluitingen en de ontdubbeling in de toekomstroute, de volle pandvoorraad bij de onttrekkingen, de route voor toevoegingen binnen bestaande panden en de ouderdomsgrens van de pijplijn.