EN Density

This is an English translation of the Dutch page Dichtheid, which is leading. Translated on 8 November 2026 from the Dutch text committed together with this page, on top of wiki commit 2eddf6a.

Density determines how many actors or objects per unit of area are assigned to a location. It is one of the most influential parts of the model: higher densities lead to more inner-urban development and less urban extension, and vice versa. This page describes per sector how densities are calculated, which parameters play a role and which assumptions underlie them.

Role in the model

Density is used in phase 4 of the pre-allocation steps (see Model structure overview). As soon as the allocation assigns a location to a subsector, the density determines how many dwellings, jobs or megawatts are realised at that location. The density thereby also indirectly determines how many locations are needed to meet a regional claim: with a higher density, fewer locations are needed.

Densities are variant-specific and are set through VariantK.dms and the development packages. They also change over time: growth factors are applied in each projection year.

Housing density

The housing density (dwellings per hectare) is determined per subsector (dwelling type × tenure) through development packages. A development package specifies, per dwelling type, the density at net neighbourhood level, which is then translated to cell level.

Development packages

The development packages are defined in VariantParameters/Ontwikkelpakketten/NettoBuurt/ and are composed per variant through the column OP_Aanvulling in VariantK.dms. That column points to a supplement block: the set of a variant is the default set followed by that variant’s own rows, or only the default when the column says geen. A variant thus carries only the packages that belong to it, and the sieve does not have to exclude packages from other variants per cell. Each package fixes a dwelling type (single-family or multi-family, and within that terraced, semi-detached, detached or apartment) and with it a density in dwellings per hectare at net neighbourhood level.

The net neighbourhood is the only spatial scale that the packages know; there is no gross neighbourhood with a tare deduction. The net neighbourhood is the residential land: the plots with the dwellings and the public space between them, with streets, neighbourhood green and water. District parks and district water are not part of it, and the model does not allocate them as housing either. That the packages are conceived at that scale is shown by the detached and semi-detached packages: their density and plot fit the residential land of completed new-build neighbourhoods and not the district around them (#858).

Incidentally, the density is not an input column but a derived value: FSI times ten thousand divided by the gross floor area per dwelling, and the latter in turn follows from the dwelling size and the shape factor. What else a package fixes and how the winning package per cell is chosen is described on Housing elaboration (in Dutch).

Maximum housing density

Besides the density from the development package, there are upper limits that are location-specific. The maximum housing density is built up from several components:

  1. Observed density in the base year, calculated at several spatial scales (cell, neighbourhood, district, municipality, NVM region, COROP, province). Per cell, the maximum of these levels is taken.

  2. Density factors: multiplication factors that raise the observed density on the basis of location characteristics. A factor is set per combination of dwelling type (EG/MG) and location characteristic:

    • DichtheidFactorGeneriek: base factor, applies everywhere. Like the location-specific factors, it exists in three versions: _EG, _MG and _NietWonen. In the NL2120 application it is set to 1.0, with one exception: single-family in the two NbS variants is set to 0.80. Those numbers belong to the project and not to the method.
    • DichtheidFactorOV: near a rail stop
    • DichtheidFactorWater: near large water bodies within existing built-up area
    • DichtheidFactorBevKern100kPlus/20kPlus/20kMin: when located around a population centre of that size

    Each of the location-specific factors exists in three versions: single-family, multi-family and non-residential. They are combined additively, not multiplicatively: the final factor is 1 + (OV - 1) + (Water - 1) + (Kern - 1) + (Generiek - 1). Of the three population-centre factors, at most one counts; a cell falls into the largest category that applies. The characteristics of the surroundings are at 25 metres; because the maximum housing density is a block quantity, the factor is averaged over the sixteen cells of the 100-metre block.

    The outcome is not used directly as a ceiling. The observed density times the factor is first spread spatially with a distance-weighted potential over 2000 metres, so that a single high cell does not produce a sharp peak in the ceiling, and is then set against the minimum density. The maximum is defined on AllocDomain, so at 100 metres.

  3. Landscape limits: separate maxima apply in beautiful and very beautiful landscape (MaxDichtheidInMooiLandschap, MaxDichtheidInZeerMooiLandschap).

  4. Minimum densities: the ceiling never drops below the lowest density that the development packages of that dwelling type have. That lower bound comes from the packages themselves and not from a separate variant parameter per dwelling type.

  5. Released parcels: on a cadastral parcel that the Redevelopment probability (in Dutch) has released for housing, the more generous of the surroundings maximum and ModelParameters/Wonen/Herontwikkelingskans/MaxDichtheidFactorVrijPerceel times the density of the parcel itself applies. The surroundings maximum is smoothed over two kilometres and in the city usually lies below the density of a built-up parcel, while a package there has to be denser than what stood there before; without that room, no package fits on such a parcel.

MinimumDichtheidToenameWonen

The parameter MinimumDichtheidToenameWonen sets a lower bound on the relative density increase. The reference point is not the state at the start of the projection year but the base-year state: per 25-metre cell, the test divides the difference between the potential state and the base-year state by that base-year state, and does so again in every projection year. On a cadastral parcel with a building, that base-year state is the average over the cells of the parcel, so that a block of flats with its green is tested as a whole and not per cell. A cell only qualifies for housing construction if that relative increase exceeds the threshold. On greenfield, where the base-year state is zero, the test does not apply: there is nothing to lose there. On a parcel released by the redevelopment probability (in Dutch), any increase suffices: the probability is estimated on demolition and new construction with a net gain in dwellings, and the threshold excluded every package on a dense parcel. This prevents the model from carrying out marginal densifications that are unrealistic in practice. In the NL2120 application the threshold is 0.10 in all variants, or ten per cent; that value belongs to the project and not to the method.

Employment density

The employment density is expressed in m² of building footprint per hectare and is conceptually different from the housing density: it is not prescribed through packages, but derived from observed ratios between building footprint and jobs.

Building footprint per job

The core calculation is the building footprint per job (PandFootprint_baan.dms). Per Jobs6 subsector (industry, logistics, retail, other consumer services, business services, government/quaternary services), the ratio m² building footprint / number of jobs is calculated. This can be done in two ways:

  • Smoothed (default): numerator and denominator are spread per cell with a potential function with distance decay over 5000 m, so that transitions between regions are gradual. Both are given a lower bound (PandFootprint_Ondergrens, Job_Ondergrens) to keep outliers out of the division.
  • PerRegio: the ratio is calculated at NVM region level and projected back to grid cells. This gives sharp transitions at the region borders.

The choice is set through ModelParameters/Werken/Type_m2perBaan, which is set to Smoothed.

The calculation year for the building-footprint-per-job ratio is explicitly linked to the LISA reference year (PandFootprint_per_job_calc_yr). This ensures that the numerator (building footprint from BAG) and the denominator (jobs from LISA) come from the same year. See Time dynamics for the background.

Maximum employment density

As for housing, the maximum employment density is derived from observed densities in the base year, multiplied by a density factor: the building footprint per hectare per subsector at the same spatial scales as for housing, the maximum of these times the factor, spread over 2000 metres. For employment there is no package density that stays below it: that building footprint per hectare times the jobs per m² of building footprint is the density with which the allocation fills a cell. The density factors for employment (DichtheidFactorOV_NietWonen, DichtheidFactorWater_NietWonen, etc.) follow the same structure as for housing; of the three population-centre factors, the highest counts for employment.

The parameter MinimumDichtheidToenameWerken works in the same way, and here too the reference point is the base-year state and not the state at the start of the projection year. There is one difference with housing: for employment, the denominator is all employment in the cell that lies within reach of the subsector, and not that of the subsector itself. That is deliberate, because the subsector that wins a cell demolishes all others that are there; the test thus works as a balance test that prevents loss. Here too: if there is nothing there, the test does not apply. In the NL2120 application the threshold is 0.10; this value is also project-specific.

Growth factors

In each projection year, the building-footprint-per-job ratios are adjusted through annual growth factors. The rates are set per Jobs6 subsector in ModelParameters/Werken/Groeifactor; VariantK.dms takes them over per variant (Groeifactor_Nijverheid and so on), so that an application can let them differ per variant. The growth factor is applied over the period between the previous projection year and the current one:

PandFootprint_perJob_zichtjaar = PandFootprint_perJob_vorig × (1 + growth_factor × number_of_years)

The number of years in that formula is not the full period between two projection years but an adjustable part of it (Groeifactor_WanneerToepassen; at 0.5 the dilution takes effect halfway through the interval). With this damper, the effective dilution is half the set rate: with the default values of 1 per cent per year for industry and 0.5 for logistics, that is 0.5 and 0.25 per cent per calendar year. Both are deliberately below the trend from the report Ruimte voor werken, which gives 2 and 1 per cent; that trend flattens after 2012. Retail is set to zero, in line with the report. With the switch DienstverleningVolgtRapporttrend, the three service subsectors follow the declining trend in space use per job from the same report and therefore densify; it is a switch because the values come from the observation period up to 2019 and the report itself warns that further intensification of public sites may not be realistic. For projection years after JaarVanafWaarGeenWerkdichtheidMeerAangepastWordt no dilution is applied, because a linear extrapolation beyond the observation period is not substantiated.

This mechanism models the trend that industrial and logistics functions take up more space per job over time. For offices, a separate mechanism applies through the office coefficient (m2BVO_job_Kantoor_groeifactor), which accounts for the effects of working from home on the m² per job.

Working-from-home intensification for offices

For business services, the office coefficient works differently from the trend-based growth factors above (#668). The intensification factor follows from the ratio between the target (VariantK/m2BVO_job_Kantoor, in m² gross floor area per job) and the coefficient in the base year (ModelParameters/Werken/m2BVO_job_Kantoor_Basisjaar). The denominator is the base-year value and not an older value from before desk sharing, because the building footprint per job on which the factor acts comes from the observation year: the desk sharing from before the base year is already included in it and would otherwise be counted twice. The factor is a level shift that is placed on the base-year observation again in each projection year and therefore does not compound; the projection-year chain runs through Subsectoren0, without the override.

Jobs are exogenous and form the claim. An increase in the number of office jobs in the existing cells would therefore come straight off the residual claim and bring the office allocation to a halt. Instead, desk sharing lands as capacity in the existing stock, on the cells where offices dominate the employment state in the base year (BaseData/Omgeving/KantoorDominantie: an office share of at least KantoorDominantieDrempel and an employment state of at least VerdikkingsMinimumStand_Kantoor, so that a one-person business at home does not produce a dominant cell). The regular potential is an average over the surroundings (the maximum over the cell itself and the regional averages, spread over 2000 m) and not a building capacity; a dense office cell therefore has a potential below its own state and could never densify. Four interventions on the dominant cells:

  • a potential floor of the cell’s own employment state times the intensification factor, per 25-metre cell in the potential state (PotentieleStates/PerSectorxSubsector_T/Vloer); a cell quantity, because if it were spread over the hectare, the employment state of the dominant cells would be distributed over the empty neighbouring cells and the building cell itself would not pass the balance test per cell
  • rung priority above greenfield (Tredes/Werken/Zak_dienstverlening) plus priority 4 in the subsector choice, so that the subsector keeps its own cells
  • dropping the demolition-age and IBIS-full tests for this subsector in the projection-year sieve and the evidently-in-use test in the base-year sieve, because assignment there is intensification and not demolition and new construction
  • leaving the dwellings and the residential footprint in place when the subsector wins such a dominant cell (Allocatie_T/Impl/VerdringTenzijVerdikking_Expr), for the same reason: the building stays and is only used more intensively. If an employment subsector wins a cell where it did not dominate in the base year, the dwellings disappear, as with any sector that takes over a cell (#868)

The floor uses the total employment state of the cell and not just the office state, because a floor on the office state alone only passes the density test of MinimumDichtheidToenameWerken at an office share well above the dominance threshold (with the default values about 0.96 against 0.90); the floor would then do nothing on most dominant cells.

The same construction applies to government and quaternary services (BaseData/Omgeving/OverheidDominantie), with its own lower bound on the cell state (VerdikkingsMinimumStand_Overheid) and a fixed intensification factor (ModelParameters/Werken/VerdikkingsFactor_Overheid), because there is no coefficient for that subsector from which the factor could be derived.

MinimalLandAvailability

The parameter MinimalLandAvailability_Landbouw sets a threshold on the available space around a cell: if the available share of a disc of 50 metres around the 25-metre cell is smaller than the threshold, the cell is declared restrictive for agriculture (Zeef_T/GeeftOnvoldoendeRuimte_Landbouw). The parameter is defined as hectares per 100-metre cell, so as a share of a hectare, and is applied as a share of the disc. The test exists only for agriculture, and the parameter is only read when agriculture is included as a sector; otherwise it is zero.

For the urban functions there is no space test. The column MinimalLandAvailability in VariantK.dms is not read by any test and only remains because ExportSettings writes it out and removing it would change the export format; for employment, the full test on IBIS (HeeftGeenRuimteOpBedrijventerrein) fulfils that role. In the NL2120 application, MinimalLandAvailability_Landbouw is set to 0.60 ha, based on expert judgement; that value belongs to the project and not to the method.

Water storage density

The storage capacity of a cell is the storable water layer (BaseData/Suitabilities/Waterberging/Diepte, capped at Maximum_Waterschijf) times the cell area of 625 m2. The potential state reads that layer per 25-metre cell and not as a hectare average: an average would give an admitted cell not its own volume but that of its neighbours, including the cells below Minimum_Waterschijf that the sieve removes per cell, and then the storage accounting per cluster does not add up on the map. DichtheidZichtjaar_T also provides the density per hectare as an informative item; the allocation does not read it.

Solar and wind density

For solar and wind, densities are expressed in megawatts per hectare and are based on technical key figures, not on observed values.

Solar energy

The capacity per hectare is set through ModelParameters/Zon/Vermogen_ha and has three classes (low/medium/high). The parameter ZonCombinerenMetBestaandGroen in VariantK.dms determines whether solar fields may be combined with existing green land use. When they are combined, the capacity per hectare is multiplied by FractieVermogenHaIndienZonCombinerenMetBestaandGroen.

Wind energy

The density of wind turbines is determined by the turbine type (TurbineType in VariantK.dms), which specifies the capacity per turbine and the required spacing between turbines. The spatial placement follows a stamp pattern with adjustable parameters for the number of rows, spacing and orientation.

Holiday accommodation

The density for holiday accommodation (holiday homes per hectare) is, per region, the marginal density from the observed trends: objects added per year divided by hectares added per year. That is the density at which new land is built on according to the observations; the average density of the whole stock, including campsites and spaciously laid-out parks, lies below it. Where the hectare trend is close to zero, the region falls back on that average density. No development packages or growth factors are applied.

Parameter overview

The column Default shows the values in the NL2120 application as an example; they belong to the project and not to the method.

Parameter Sector Unit Default Effect
MaxDichtheidInMooiLandschap Housing dwelling/ha 100 Upper limit in beautiful landscape
MaxDichtheidInZeerMooiLandschap Housing dwelling/ha 50 Upper limit in very beautiful landscape
DichtheidFactorGeneriek_EG/_MG/_NietWonen Housing/Employment factor 0.80 to 1.00 Generic multiplication factor
DichtheidFactorOV_* Housing/Employment factor 1.10 to 2.00 Extra density near public transport
MinimumDichtheidToenameWonen Housing fraction 0.10 Min. relative densification, per 25-metre cell
MinimumDichtheidToenameWerken Employment fraction 0.10 Min. relative densification, per 25-metre cell
MinimalLandAvailability Housing/Employment ha 0.40 No effect; the column only remains for the export format
MinimalLandAvailability_Landbouw Agriculture ha 0.60 Min. available share of a disc of 50 metres around the cell
Groeifactor (per subsector) Employment per year -0.011 to 0.010 Annual change in m²/job
Vermogen_ha Solar MW/ha adjustable Capacity per hectare of solar

The output indicator Dichtheid_Wonen

Besides the densities that steer the allocation, the model reports a density indicator per projection year, Dichtheid/Wonen under /Indicatoren/<casus>/Zichtjaren/<jaar>, written out as the raster Dichtheid_Wonen and as a regional table. This measure needs a reading guide, because it measures something different from what its name suggests.

The numerator is the entire housing stock of the cell, so including the dwellings that were already there in the base year, divided by the number of hectares of the cell. The mask around it is restrictive: AllocatieHeeftPlaatsgevonden tests whether the field SubSector_rel in the state points to the housing sector, and that field is only filled where the allocation has struck after the base year. Cells without allocation drop out. The national figure is then an unweighted average over the remaining cells, so a cell with two dwellings weighs as much as a cell with two hundred.

The figure is therefore neither the density of the new construction, because the existing stock is in the numerator, nor the national housing density, because the cells without allocation do not count. Read it as: how dense, on average, are the cells where the model has placed something in this projection year or earlier. For the density of the new construction itself, the development packages are the source; for a national picture there is the base-year variant of the same indicator, which masks on all cells with dwellings instead of on the allocated cells. For employment, Dichtheid/Werken/Banen_ha and PandFootprint_ha follow exactly the same construction, with the same caveat.

The infill indicator

Besides the density itself, the model reports which part of the new dwellings ends up within existing built-up area. That indicator is under /Indicatoren/<casus>/Zichtjaren/<jaar>/Inbreiding and provides two national fractions:

Indicator Meaning
FractieWoningenErbijInBestaandBebouwdGebied Share of the dwellings added that lies in existing built-up area
FractieWoningenErbijInBestaandGroenInBestaandBebouwdGebied Same, but on cells within that built-up area that were green in the base year

Both divide gross by gross: the numerator and the denominator count only the increase per cell (WoningenErbij), not the net difference. With the net difference, the measure tips over as soon as demolition takes place somewhere, and it can even become negative. The net change within existing built-up area is reported separately as NettoVeranderingInBestaandBebouwdGebied; that is a meaningful number in itself, but not an infill share.

Existing built-up area here is BegrenzingBebouwdGebied, the model’s own derivation per reference year (ModelParameters/BegrenzingBebouwdGebied_jaar; in NL2120 the reference year 2022). It is a boundary and not the union of all cells with a dwelling or work location, because then scattered buildings would count as built-up area. The urbanisation indicator in Land-use change (in Dutch) reads the same boundary.

The reference year affects more than this indicator alone: through the land production costs it feeds into the residual value and thus into the allocation itself. Switching reference year therefore requires a full recalculation of all projection years.