1 Leeswijzer

Met deze rapportage wordt de deelscore op het kenmerk Aanwezigheid rijbaanscheiding van de SPI Veilige Infrastructuur beschikbaar gesteld. De rapportage bevat tevens de programmacode en biedt daarmee een verantwoording voor het bepalen van de deelscore vanuit de beschikbare data.

De lezer die op zoek is naar de deelscore vindt deze onder hoofdstuk 6, ‘Scores en Benchmark SPI Veilige Infrastructuur - kenmerk aanwezigheid rijbaanscheiding’. De hoofdstukken daarvoor vormen de meer inhoudelijke en technische verantwoording om tot die score te komen. Deze verantwoording omvat tevens alle programmeercode voor het gepresenteerde resultaat.

2 Voorwoord programma code

Deze rapportage is opgemaakt als Rmarkdown document (.rmd) met behulp van R in Rstudio. Het html bestand is zelfstandig leesbaar. Het voorwoord is bedoeld voor personen die het script (het .rmd) bestand willen draaien en/of geïnteresseerd zijn in de technische verantwoording van de bepaling van de kenmerkscore Aanwezigheid rijbaanscheiding van de SPI. Lezers van de rapportage (het html bestand) kunnen dit voorwoord verder overslaan.

Het voorwoord bevat de programma code voor het controleren van de mappenstructuur, het installeren/inladen van de benodigde packages en het aanmaken van een aantal hulpvariabelen.

Let op in de volgende stappen dat bij het installeren van ‘source’, een juiste installatie van rtools op de default installatie locatie nodig is.

# check iranges apart omdat deze vanuit biocmanager van bioconductor geinstalleerd moet worden
# zie
# https://bioconductor.org/packages/release/bioc/html/IRanges.html

if (!requireNamespace("IRanges", quietly = TRUE)) {
  print("Indien volgende wordt gevraagd - Update all/some/none? [a/s/n] - kan n worden gekozen ")
  if (!require("BiocManager", quietly = TRUE)) 
      install.packages("BiocManager", repos = "https://cloud.r-project.org/")
 
   BiocManager::install("IRanges")
} 

# let op, IRanges wordt niet geladen omdat functies conflicteren met veel andere functienamen
# list required libraries
libraries_to_load <- c("here", "tidyverse", "data.table", "dtplyr", "sf", "mapview", "stringr",
                       "this.path", "units", "kableExtra", "curl", "openxlsx2", "readr", "gt", "plotly",
                       "foreach", "doParallel")

# Install and load libraries if they are missing
for (library_name in libraries_to_load) {
  if (!requireNamespace(library_name, quietly = TRUE)) {
    install.packages(library_name, dependencies = TRUE, repos = "https://cloud.r-project.org/")
  }
  library(library_name, character.only = TRUE)
}

# unload here to reload it later after defining the location of the script and the relative path
# for the data downloads and outputs. 
detach("package:here", unload = TRUE)
# set locale naar nl in utf8 
Sys.setlocale("LC_ALL", "Dutch_Netherlands.utf8") 

Bij het runnen van het script (.rmd bestand) worden de benodigde data en resulterende outputs in mappen geplaatst in de map waar het script zich bevindt.

# Define a function for getting the relative path of the script based on the level of the subfolder
# relative to the folder where the script resides. With the script folder level = 0
relative_path_script <- function(level = 0) {
  # Split the string by "/"
  split_string <- stringr::str_split(this.path::this.path(), "/")[[1]]
  
  # Calculate the starting index for the nth part from the right
  start_index <- length(split_string) - level 
  
  # Check if the start_index is valid
  if (start_index == 1 || start_index > length(split_string)) {
    print("The value of level is absolute and not relative, thus not applicable for use with i_am")
  }
  
  # Check if the start_index is valid
  if (start_index < 1 || start_index > length(split_string)) {
    stop("The value of level is out of bounds for the given string.")
  }
  
  # Reconstruct the substring from the specified index
  subset_string <- paste(split_string[start_index:length(split_string)], collapse = "/")
  
  return(subset_string)
}
# Verwijs here naar de map waarin het script zelf staat met level = 0
here_locatie <- relative_path_script()

# 
here::i_am(here_locatie)

library(here)
# controleer de aanwezigheid van '.here'
if (!file.exists(here(".here"))) {    # If not, create the folder
  file.create(".here")
  cat(paste("Bestand '", ".here", "' aangemaakt.\n", sep = ""))
} else {
  cat(paste("Bestand '", ".here", "' bestaat al.\n", sep = ""))
}

De code gaat uit van een vaste mappen structuur. Deze wordt gecontroleerd en aangemaakt als deze ontbreekt.

# folder structure
# Check list of folders
folder_list <- c("Data", "Output", "RDS")

# Check for folders and create missing folders
for (folder_name in folder_list) {
  if (!file.exists(here(folder_name))) {
    # If not, create the folder
  dir.create(here(folder_name))
  cat(paste("Folder '", folder_name, "' created.\n", sep = ""))
  } else {
  cat(paste("Folder '", folder_name, "' already exists.\n", sep = ""))
  }
}

Ten slotte worden een aantal helper functies aangemaakt die in het script worden gebruikt.

# helper function to deal with missing values. Missing values as indexer are
# considered to be false.
na.as.false <- function(x){
  x[is.na(x)] <- FALSE
  x
}

na.as.true <- function(x){
  x[is.na(x)] <- TRUE
  x
}

# helper function for negate
`%nin%` = Negate(`%in%`)
blue_rgb <- c("39 42 102", "99 94 138",
              "136 130 164", "168 163 189",
              "206 203 217", "219 216 226")
blue_vals <- sapply(strsplit(blue_rgb, " "), function(x)
  rgb(x[1], x[2], x[3], maxColorValue=255))

orange_rgb <- c("216 87 44", "224 126 85",
                "233 164 130", "241 197 173",
                "247 224 210", "249 233 222")
orange_vals <- sapply(strsplit(orange_rgb, " "), function(x)
  rgb(x[1], x[2], x[3], maxColorValue=255))

green_rgb <- c("184 203 51", "204 215 115",
               "217 224 152", # 35% komt enkel bij groen voor
               "227 232 182", "231 235 191",
               "238 241 211", "245 247 231")
green_vals <- sapply(strsplit(green_rgb, " "), function(x)
  rgb(x[1], x[2], x[3], maxColorValue=255))

col_comb <- c(blue_vals[1], green_vals[2], orange_vals[3],
              blue_vals[4], green_vals[5], orange_vals[6], 
              blue_vals[2], green_vals[3], orange_vals[4])

long_list <- c(blue_vals[1:3], green_vals[1:3], orange_vals[1:3])
long_list_full <- c(blue_vals[1:6], orange_vals[1:6], green_vals[1:7] )
# aanmaken van tabel previeuw functie voor kleine tabellen die de eerste paar regels plus de laatste
# uit de dataset toont
# let op, gt tabellen werken enkel met een html output
tabel_preview <- function(data, title = NULL, rows = 9, top_n = 7, bottom_n = 1, incl_rownums = TRUE) {

    gt_preview(data, top_n = top_n, bottom_n = bottom_n, incl_rownums = TRUE) %>%
    tab_header(title = title) %>%
    # Table background color and other style options
    tab_options(
      #table.background.color = blue_vals[6],
      column_labels.background.color = blue_vals[1],
      column_labels.font.size = px(16),
      table.font.size = px(12),
      data_row.padding = px(4)
      # Uncomment and set table.width if needed
      # table.width = px(250)
    ) %>%
    tab_style(
      style = cell_borders(sides = "bottom", color = blue_vals[1], weight = px(3)),
      locations = cells_body(rows = rows)
    )
}
# aanmaken van een functie voor uitgebreide tabellen met scrol functie
# let op, gt tabellen werken enkel met een html output
scroltabel_gt <- function (data, title = NULL, table.height = px(350)) {
    gt(data) %>%
      # tabel titel
      tab_header(title = title) %>%
      # tabel opmaak opties
      tab_options(
        #table.background.color = blue_vals[6],
        column_labels.background.color = blue_vals[1],
        column_labels.font.size = px(16),
        table.font.size = px(12),
        data_row.padding = px(4),
        table.width = pct(100), # px(250)
        container.height = table.height,
        container.overflow.y =  TRUE # px(250)
      ) %>%
      # tabel opmaak optie onderkant
      tab_style(
        style = cell_borders(sides = "bottom", color = blue_vals[1], weight = px(3)),
        locations = cells_body(rows = nrow(data))
      )
}

3 Introductie

De SPI Veilige Infrastructuur bevat het kenmerk “Aanwezigheid rijbaanscheiding”. Op wegen van een limiet van 70 en hoger is een rijbaanscheiding gewenst, in de vorm van een middenberm en/of een geleiderails. Deze rapportage beschrijft de bepaling van scores van de SPI Veilige Infrastructuur op dit kenmerk en de resultaten daarvan. Een wegdeel scoort positief op dit kenmerk wanneer op minimaal 90% van het wegvak een geleiderials en/of een middenberm van voldoende breedte aanwezig is. Per snelheidslimiet verschilt de minimale breedte van een middenberm (vanaf kant rijbaan) zonder geleiderails (conform richtlijnen):

  • 70 km/u \(\ge\) 1,5m voldoet
  • 80 km/u \(\ge\) 3m voldoet
  • 100 km/u \(\ge\) 20m voldoet

Per wegbeheerder wordt bepaald welk deel van het wegennet positief scoort. Dit vormt de score van de wegbeheerder op dit kenmerk. Deze score wordt bepaald over het voor dit kenmerk relevante deel van het wegennet.

Een verantwoording van de bepaling van scores wordt mede gegeven door het meeleveren van de programmacode waarmee deze scores zijn bepaald.

4 Data

In de analyse wordt gebruik gemaakt van het NWB (Nationaal Wegenbestand) en de WKD (Wegkenmerkendatabase). De WKD bevat twee producten: Geleiderails en Middenbermbreedte. Hiervoor geldt dat wanneer een geleiderails aanwezig is er geen middenbermbreedte genoteerd is. Toetsing op de gewenste middenbermbreedte bij de plaatsing van een geleiderails wordt dan ook buiten beschouwing gelaten.

Voor het bepalen van de kenmerkscore Aanwezigheid rijbaanscheiding wordt gebruik gemaakt van de producten Geleiderails en Middenbermbreedte. Daarbij wordt gebruik gemaakt van het Januari-bestand. Het betreft een CSV bestand die direct of via een zip bestand kan worden gedownload vanaf: https://downloads.rijkswaterstaatdata.nl/wkd/Geleiderails/ en https://downloads.rijkswaterstaatdata.nl/wkd/Middenbermbreedte/

Uit de WKD worden de volgende onderdelen gebruikt.

  • Maximum snelheden
  • Komgrenzen
  • Geleiderails
  • Middenbermbreedte

Documentatie over het NWB is te vinden bij het NDW:
https://docs.ndw.nu/handleidingen/nwb/
Documentatie over de WKD is te vinden onder de download pagina van rijkswaterstaatdata:
https://downloads.rijkswaterstaatdata.nl/wkd/Documentatie/

Het update beleid kan verschillen tussen de WKD onderdelen. In ieder geval krijgt elk onderdeel een ‘grote’ jaarlijkse update gekoppeld aan het januari bestand van het NWB. Daarom worden bij het gebruik van de WKD de januari bestanden gebruikt. Deze updates komen in de loop van elk jaar binnen. Een planning daarvoor is nog niet beschikbaar. De laatste updates zijn te vinden op de WKD download-pagina en het NDW Verkeersveiligheid Dataportaal. Berichten hierover worden tevens geplaatst op het Nationaal Toegangspunt Mobiliteitsdata.

4.1 Data downloads

4.1.1 NWB

## geen aanpassingen

# -------------KIES JAAR------------------------
# indien gewenst, kies een ander jaar, bijv 2025
# Jaar versie nwb
nwbjaar <- "2024"

# ----------------------------------------------

#' Deze code chunk bevat het jaar waarvan de data wordt gedownload en waarvoor de analyse wordt gedraaid. 
#' Het is niet mogelijk om de analyse op jaren voor 2024 te draaien vanwege beperkingen aan de datakwaliteit.
#' Nieuwe januari bestanden komen in de loop van 2025 beschikbaar. Wanneer deze beschikbaar komt,
#' kan het jaar worden aangepast.

De analyse is uitgevoerd op het NWB van Januari 2024. Door het NWB-jaar (variabele ‘nwbjaar’) aan te passen in het script kan de volledige analyse op een ander jaar worden gedraaid, mits de data voor dat jaar (reeds) beschikbaar is.

Het NWB is gedownload van: https://downloads.rijkswaterstaatdata.nl/nwb-wegen/geogegevens/shapefile/Nederland_totaal/

# Deze code chunk verzorgt de download en het inladen in R van het NWB. 

#' Wanneer het script eerder lokaal is gedraait en het NWB al is gedownload en verwerkt wordt de .RDS
#' versie van het NWB geladen. Wanneer de RDS niet beschikbaar is, wordt het bestand gedownload en 
#' verwerkt.

# rds bestandsnaam op basis van jaar
nwb_rds_naam <- paste0("nwb", nwbjaar, "jan.sf.RDS")
# nwb datum op basis van jaar
nwb_datum <- paste0("01-01-", nwbjaar)
# zip bestandsnaam op basis van jaar
nwb_zip <- paste0("nwb", nwbjaar, "jan.zip")

# conditioneel laden of downloaden en verwerken van het NWB
if (file.exists(here("RDS", nwb_rds_naam))) {
  # if file exist load RDS
  NWB <- readRDS(here("RDS", nwb_rds_naam))
  cat(paste("Bestand geladen uit .RDS"))

  } else {

  # url for dutch open data
  nwbjaarjan_url <- paste0("https://downloads.rijkswaterstaatdata.nl/nwb-wegen/geogegevens/shapefile/Nederland_totaal/01-01-", nwbjaar, ".zip")

  # destination file + folder
  dest_file_nwbjaarjan <- here("Data", nwb_zip)
  dest_folder <- here("Data", paste0("nwb", nwbjaar, "jan"))

  # download file
  curl_download(nwbjaarjan_url, destfile = dest_file_nwbjaarjan, mode = "wb")

  # unzip
  unzip(dest_file_nwbjaarjan, exdir = dest_folder)

  # load the shapefile
  NWB <- st_read(here(dest_folder, nwb_datum, "Wegvakken", "Wegvakken.shp"))

  # Save as RDS
  saveRDS(NWB, here("RDS", nwb_rds_naam))

  # clear zip
  file.remove(dest_file_nwbjaarjan)
    
  # code resultaat bericht
  cat(paste("Bestand opgehaald van internet van https://downloads.rijkswaterstaatdata.nl/wkd/"))
  }
## Bestand geladen uit .RDS

4.1.2 WKD snelheidslimieten

De analyse maakt gebruik van snelheidslimieten, gekoppeld aan het NWB, uit de WKD van januari 2024. Ook hier geldt dat door het NWB-jaar aan te passen in het script, de volledige analyse op een ander jaar kan worden gedraaid. De snelheidslimieten data is gedownload van: https://downloads.rijkswaterstaatdata.nl/wkd/Maximum%20Snelheden/

# Deze code chunk verzorgt de download en het inladen in R van de wkd snelheidslimieten 

#' Wanneer het script eerder lokaal is gedraait en het NWB al is gedownload n verwerekt wordt de .RDS
#' versie van het bestand geladen. Wanneer de RDS niet beschikbaar is, wordt het bestand gedownload en 
#' verwerkt.

# rds bestandsnaam op basis van jaar
maxsnelheden_rds_naam <- paste0("maxsnelheden", nwbjaar, "jan.sf.RDS")
# nwb datum op basis van jaar
maxsnelheden_datum <- paste0("01-01-", nwbjaar)
# zip bestandsnaam op basis van jaar
maxsnelheden_zip <- paste0("maxsnelheden", nwbjaar, "jan.zip")

# conditioneel laden of downloaden en verwerken van de data
if (file.exists(here("RDS", maxsnelheden_rds_naam))) {
  # if file exist load RDS
  maxsnelheden <- readRDS(here("RDS", maxsnelheden_rds_naam))
  cat(paste("Bestand geladen uit .RDS"))
  } else {

  # url for dutch open data
  maxsnelhedenjaarjan_url <- paste0("https://downloads.rijkswaterstaatdata.nl/wkd/Maximum%20Snelheden/01-01-", nwbjaar, ".zip") 

  # destination file + folder
  dest_file_maxsnelhedenjaarjan <- here("Data", maxsnelheden_zip)
  dest_folder <- here("Data", paste0("maxsnelheden", nwbjaar,"jan"))

  # download file
  curl_download(maxsnelhedenjaarjan_url, destfile = dest_file_maxsnelhedenjaarjan, mode = "wb")

  # unzip
  unzip(dest_file_maxsnelhedenjaarjan, exdir = dest_folder)

  # load the shapefile
  maxsnelheden <- st_read(here(dest_folder, maxsnelheden_datum, "Snelheden.shp"))

  # Save as RDS
  saveRDS(maxsnelheden, here("RDS", maxsnelheden_rds_naam))

  # clear zip
  file.remove(dest_file_maxsnelhedenjaarjan)
    
  # code resultaat bericht
  cat(paste("Bestand opgehaald van internet van https://downloads.rijkswaterstaatdata.nl/wkd/"))
  }
## Bestand geladen uit .RDS

4.1.3 WKD komgrenzen

De analyse maakt gebruik van het wkd product komgrenzen, gekoppeld aan het NWB, uit de WKD van januari 2024. Ook hier geldt dat door nwbjaar aan te passen in het script, de volledige analyse op een ander jaar kan worden gedraaid. De komgrenzen data is gedownload van: https://downloads.rijkswaterstaatdata.nl/wkd/Komgrenzen/

# Deze code chunk verzorgt de download en het inladen in R van de wkd komgrenzen

#' Wanneer het script eerder lokaal is gedraait en het NWB al is gedownload en verwerkt wordt de .RDS
#' versie van het bestand geladen. Wanneer de RDS niet beschikbaar is, wordt het bestand gedownload en 
#' verwerkt.

# rds bestandsnaam op basis van jaar
komgrenzen_rds_naam <- paste0("komgrenzen", nwbjaar, "jan.RDS")
# nwb datum op basis van jaar
komgrenzen_datum <- paste0("01-01-", nwbjaar)
# zip bestandsnaam op basis van jaar
komgrenzen_zip <- paste0("komgrenzen", nwbjaar, "jan.zip")

# conditioneel laden of downloaden en verwerken van de data
if (file.exists(here("RDS", komgrenzen_rds_naam))) {
  # if file exist load RDS
  komgrenzen <- readRDS(here("RDS", komgrenzen_rds_naam))
  cat(paste("Bestand geladen uit .RDS"))
  } else {

  # url for dutch open data
  komgrenzenjaarjan_url <- paste0("https://downloads.rijkswaterstaatdata.nl/wkd/Komgrenzen/01-01-", nwbjaar, ".zip") 

  # destination file + folder
  dest_file_komgrenzenjaarjan <- here("Data", komgrenzen_zip)
  dest_folder <- here("Data", paste0("komgrenzen", nwbjaar,"jan"))

  # download file
  curl_download(komgrenzenjaarjan_url, destfile = dest_file_komgrenzenjaarjan, mode = "wb")

  # unzip
  unzip(dest_file_komgrenzenjaarjan, exdir = dest_folder)

  # load the csv
  komgrenzen <- read.csv2(here(dest_folder, komgrenzen_datum, "wkd_002-KOM_BORDEN.csv"), stringsAsFactors = FALSE)

  # Save as RDS
  saveRDS(komgrenzen, here("RDS", komgrenzen_rds_naam))

  # clear zip
  file.remove(dest_file_komgrenzenjaarjan)
    
  # code resultaat bericht
  cat(paste("Bestand opgehaald van internet van https://downloads.rijkswaterstaatdata.nl/wkd/"))
  }
## Bestand geladen uit .RDS

4.1.4 WKD geleiderials

De analyse maakt gebruik van het wkd product geleiderials, gekoppeld aan het NWB, uit de WKD van januari 2024. Ook hier geldt dat door nwbjaar aan te passen in het script, de volledige analyse op een ander jaar kan worden gedraaid. De geleiderials data is gedownload van: https://downloads.rijkswaterstaatdata.nl/wkd/Geleiderails/

# Deze code chunk verzorgt de download en het inladen in R van de wkd geleiderials

#' Wanneer het script eerder lokaal is gedraait en het NWB al is gedownload en verwerkt wordt de .RDS
#' versie van het bestand geladen. Wanneer de RDS niet beschikbaar is, wordt het bestand gedownload en 
#' verwerkt.

# rds bestandsnaam op basis van jaar
Geleiderails_rds_naam <- paste0("Geleiderails", nwbjaar, "jan.RDS")

# nwb datum op basis van jaar. In 2024 is de onderliggende map gedateerd op 01-02-2024 ipv 01-01-2024
Geleiderails_datum <- 
    if (nwbjaar == 2024) {
    paste0("01-02-", nwbjaar)
  } else {
    paste0("01-01-", nwbjaar)
  }

# zip bestandsnaam op basis van jaar
Geleiderails_zip <- paste0("Geleiderails", nwbjaar, "jan.zip")

# conditioneel laden of downloaden en verwerken van de data
if (file.exists(here("RDS", Geleiderails_rds_naam))) {
  
  # if file exist load RDS
  Geleiderails <- readRDS(here("RDS", Geleiderails_rds_naam))
  cat(paste("Bestand geladen uit .RDS"))
  } else {

  # url for dutch open data
  Geleiderailsjaarjan_url <- paste0("https://downloads.rijkswaterstaatdata.nl/wkd/Geleiderails/01-01-", nwbjaar, ".zip") 

  # destination file + folder
  dest_file_Geleiderailsjaarjan <- here("Data", Geleiderails_zip)
  dest_folder <- here("Data", paste0("Geleiderails", nwbjaar,"jan"))

  # download file
  curl_download(Geleiderailsjaarjan_url, destfile = dest_file_Geleiderailsjaarjan, mode = "wb")

  # unzip
  unzip(dest_file_Geleiderailsjaarjan, exdir = dest_folder)

  # load the csv
  Geleiderails <- read.csv2(here(dest_folder, Geleiderails_datum, "wkd_017-GLDRAILS.csv"), stringsAsFactors = FALSE)

  # Save as RDS
  saveRDS(Geleiderails, here("RDS", Geleiderails_rds_naam))

  # clear zip
  file.remove(dest_file_Geleiderailsjaarjan)
  
  # code resultaat bericht
  cat(paste("Bestand opgehaald van internet van https://downloads.rijkswaterstaatdata.nl/wkd/"))
  }
## Bestand geladen uit .RDS

4.1.5 WKD middenbermbreedte

De analyse maakt gebruik van het wkd product middenbermbreedte, gekoppeld aan het NWB, uit de WKD van januari 2024. Ook hier geldt dat door nwbjaar aan te passen in het script, de volledige analyse op een ander jaar kan worden gedraaid. De komgrenzen data is gedownload van: https://downloads.rijkswaterstaatdata.nl/wkd/Middenbermbreedte/

# Deze code chunk verzorgt de download en het inladen in R van de wkd middenbermbreedte

#' Wanneer het script eerder lokaal is gedraait en het NWB al is gedownload en verwerkt wordt de .RDS
#' versie van het bestand geladen. Wanneer de RDS niet beschikbaar is, wordt het bestand gedownload en 
#' verwerkt.

# rds bestandsnaam op basis van jaar
Middenbermbreedte_rds_naam <- paste0("Middenbermbreedte", nwbjaar, "jan.RDS")

# nwb datum op basis van jaar. In 2024 is de onderliggende map gedateerd op 01-02-2024 ipv 01-01-2024
Middenbermbreedte_datum <- 
  if (nwbjaar == 2024) {
    paste0("01-02-", nwbjaar)
  } else {
    paste0("01-01-", nwbjaar)
  }

# zip bestandsnaam op basis van jaar
Middenbermbreedte_zip <- paste0("Middenbermbreedte", nwbjaar, "jan.zip")

# conditioneel laden of downloaden en verwerken van de data
if (file.exists(here("RDS", Middenbermbreedte_rds_naam))) {
  
  # if file exist load RDS
  Middenbermbreedte <- readRDS(here("RDS", Middenbermbreedte_rds_naam))
  cat(paste("Bestand geladen uit .RDS"))
  } else {

  # url for dutch open data
  Middenbermbreedtejaarjan_url <- paste0("https://downloads.rijkswaterstaatdata.nl/wkd/Middenbermbreedte/01-01-", nwbjaar, ".zip") 

  # destination file + folder
  dest_file_Middenbermbreedtejaarjan <- here("Data", Middenbermbreedte_zip)
  dest_folder <- here("Data", paste0("Middenbermbreedte", nwbjaar,"jan"))

  # download file
  curl_download(Middenbermbreedtejaarjan_url, destfile = dest_file_Middenbermbreedtejaarjan, mode = "wb")

  # unzip
  unzip(dest_file_Middenbermbreedtejaarjan, exdir = dest_folder)

  # load the csv
  Middenbermbreedte <- read.csv2(here(dest_folder, Middenbermbreedte_datum, "wkd_016-MBERMBREED.csv"), stringsAsFactors = FALSE)

  # Save as RDS
  saveRDS(Middenbermbreedte, here("RDS", Middenbermbreedte_rds_naam))

  # clear zip
  file.remove(dest_file_Middenbermbreedtejaarjan)
  
  # code resultaat bericht
  cat(paste("Bestand opgehaald van internet van https://downloads.rijkswaterstaatdata.nl/wkd/"))
  }
## Bestand geladen uit .RDS

4.2 Datavoorbereiding

De data dient te worden voorbereid voorafgaand aan de analyses en bepaling van het kenmerk “Rijbaanscheiding aanwezig” van de SPI Veilige Infrastructuur. De voorbereiding bevat onder meer de koppeling van de verschillende bestanden, selecties van wegvakken en variabelen en het aanmaken van enkele nieuwe variabelen. De data-voorbereiding wordt beschreven in de volgende subparagrafen.

4.2.1 NWB selecties

In de analyse worden wegen onder beheer van het Rijk buiten beschouwing gelaten. Daarnaast kijken we voor het kenmerk Rijbaanscheiding enkel naar rijbanen. Daarom wordt het NWB gefilterd op wegbeheerder en de zogeheten variabele Baan Subsoort Code (BST_CODE).

Afkortingen zijn te vinden in de NWB handleiding https://docs.ndw.nu/en/handleidingen/nwb/

In deze analyse laten we wegvakken met de volgende BST_CODEs buiten beschouwing: “FP”, “VP”, “CADO”, “VZ”, “VD”, “VDA”, “VDF”, “VDV”, “RP”, “VV”

## FP fietspad, VP voetpad, CADO calamiteiten doorsteed, VZ voetgangersgebied, VD veerdienst, VDA verdienst auto, VDF verdienst fiets, VDV veerdienst voetganger, RP ruiterpad, VV vliegverkeer, NRB/TRB/GRB rotondebanen

nwb_rijbaan <- NWB %>%
  filter(WEGBEHSRT != "R") %>%
  filter(BST_CODE %nin% c("FP", "VP", "CADO", "VZ", "VD", "VDA", "VDF", "VDV", "RP", "VV",
                          "NRB", "TRB", "GRB")) %>% 
  select(WVK_ID, WEGBEHSRT, WEGNUMMER, STT_NAAM, WPSNAAM, GME_NAAM, WEGBEHNAAM, BST_CODE) %>%
  # bepaal de wegvaklengte
  mutate(wegvaklengte = as.numeric(st_length(.)))

4.2.2 Verwerking snelheidslimieten

Het maximum snelheden bestand uit de WKD bevat dubbelingen van wegvakken wanneer er op een wegvak verschillende snelheidslimieten gelden. Deze ontdubbelen we op basis van een aggregatie waarbij we de limiet aan het wegvak toekennen die het meeste voorkomt (grootste aandeel van de lengte van het wegvak). Daarbij leggen we tevens de lengte vast waarover deze limiet geldt. Deze lengte is dus korter dan de volledige wegvaklengte wanneer er meerdere limieten gelden op het wegvak. In de verschillende SPI score rapportages in deze serie komt deze zelfde bewerking terug. Hieronder wordt een uitsnede getoond van de tabel waarbij één limiet per wegvak is bepaald.

# aggregatie naar limiet
aggregatie_limiet <- maxsnelheden %>%
  # drop geometry kolom
  st_drop_geometry(.) %>%
  # versnel bewerking met dtplyr
  lazy_dt() %>%
  # filter op bst codes
  filter(BST_CODE %nin% c("FP", "VP", "CADO", "VZ", "VD", "VDA", "VDF", "VDV", "RP", "VV")) %>%
  # bepaal de wegvaklengte
  mutate(lengte_limiet = NAAR-VAN) %>%
  # groepeer naar wvk id en snelheidslimiet
  group_by(WVK_ID, MAXSHD) %>%
  # bepaal per groep de totale wegvaklengte
  summarise(lengte_snelheidslimiet = sum(lengte_limiet)) %>%
  # groepeer opnieuw naar wvk id
  group_by(WVK_ID) %>%
  # sorteer op weglengte per wvk id van groot naar klein
  arrange(desc(lengte_snelheidslimiet)) %>%
  # bewaar de 1e per groep en verwijder de rest
  slice_head() %>%
  # sluit dtplyr
  as.data.frame()
# tabel uitsnede geaggregeerde limieten

tabel_preview(aggregatie_limiet, title = "Uitsnede geaggregeerde limieten data")
Uitsnede geaggregeerde limieten data
WVK_ID MAXSHD lengte_snelheidslimiet
1 313432002 100 13922
2 292388006 80 11690
3 159225004 100 11385
4 223439024 80 10305
5 231494012 100 10260
6 299445001 100 9694
7 103247004 80 9448
8..1228351
1228352 601160876 60 2

De snelheidslimiet per wegvak wordt vervolgens gekoppeld aan het NWB.

# koppel geaggregeerde limieten per wegvak aan het nwb
nwb_rijbaan_limiet <- nwb_rijbaan %>%
  # koppeling op basis van left join
  left_join(aggregatie_limiet) %>%
  # bepaal aandeel lengte limiet
  mutate(lengte_limiet_aandeel = ifelse(lengte_snelheidslimiet/wegvaklengte > 1, 1.0, # door afronding van VAN en TOT in de wkd limieten data kan de limiet lengte groter zijn dan de wegvaklengte die exact is bepaald
                                        round(lengte_snelheidslimiet/wegvaklengte, 1)), .after = lengte_snelheidslimiet) %>%
  # plaats variabele geometry achteraan
  relocate(geometry, .after = last_col())

4.2.3 Koppeling komgrenzen

De deelscore op het kenmerk Aanwezigheid Rijbaanscheiding wordt bepaald voor de wegtypen bubeko GOW en SW en bibeko SW. Om onderscheid te kunnen maken tussen bibeko en bubeko wegen worden komgrenzen gekoppeld. Enkel snelheidslimieten bieden hiervoor te weinig informatie.

De wkd komgrenzen data betreft een registratie van wegvakdelen die binnen de bebouwde kom liggen.

tabel_preview(komgrenzen, title = "WKD komgrenzen data")
WKD komgrenzen data
BEGINDAT WEGVAK_ID KOM_GMCODE KOM_GMNAAM KOM_PLAATS KOM_VAN KOM_TOT
1 01-12-2020 174260002 GM0613 Albrandswaard Poortugaal 0 252.22
2 01-10-2017 290245008 GM0297 Zaltbommel Zaltbommel 0 64.37
3 01-12-2020 325175002 GM0772 Eindhoven Eindhoven 0 254.24
4 01-12-2020 600153943 GM0840 Rucphen Rucphen 0 82.06
5 01-12-2020 183292033 GM1621 Lansingerland Berkel En Rodenrijs 0 202.72
6 01-12-2020 600390720 GM0489 Barendrecht Barendrecht 0 68.21
7 01-12-2020 320206013 GM1948 Meierijstad Schijndel 0 90.36
8..1871866
1871867 01-01-2024 601165575 344 Utrecht Utrecht 0 19.11

Een record in de tabel beschrijft een segment van een wegvak dat binnen de bebouwde kom ligt. Het segment wordt aangeduid met KOM_VAN en KOM_TOT die het begin en eindpunt van het segment beschrijven met de relatieve positie ten opzichte van het 0 punt van het wegvak. Een record kan het volledige wegvak beschrijven of dus een deel daarvan. Een wegvak kan meerdere keren in de data voorkomen wanneer deze de grens van de bebouwde kom meerdere keren kruist. We aggregeren de komgrenzen data daarom eerst naar wegvak-niveau. Daarbij leggen we het deel van de weglengte vast dat binnen de bebouwde kom ligt.

Hierbij moet er wel rekening mee worden gehouden dat segmenten kunnen overlappen (KOM_VAN | KOM_TOT). Hieronder tonen we een aantal voorbeelden van segmenten met een dergelijke overlap.

komgrenzen_overlap <- komgrenzen %>%
  filter(WEGVAK_ID %in% c(27142016, 27142039, 600437984)) %>%
  arrange(WEGVAK_ID)

scroltabel_gt(komgrenzen_overlap)
BEGINDAT WEGVAK_ID KOM_GMCODE KOM_GMNAAM KOM_PLAATS KOM_VAN KOM_TOT
01-12-2020 27142016 1714 Sluis Sint Anna ter Muiden 0 35.38
01-12-2020 27142016 GM1714 Sluis Sluis 0 35.38
01-12-2020 27142039 1714 Sluis Sint Anna ter Muiden 37.9 80.16
01-12-2020 27142039 GM1714 Sluis Sluis 18.57 80.16
01-03-2021 600437984 988 Weert Weert 562.48 580.12
01-03-2021 600437984 GM0988 Weert Weert 0 580.12

Overlappende intervallen worden daarom eerst over elkaar gelegd en geaggregeerd naar unieke intervallen op wegvakniveau, zonder overlap.

# voor het bepalen van unieke intervallen wordt gebruik gemaakt van IRanges
# wanneer IRanges niet eerst wordt geladen gaat het mis bij het aanroepen van de functie. Ook al 
# wordt IRanges::IRanges gebruikt. 

# onderstaande code wordt in een code chunk gedraaid die niet in dit notebook is gepubliceerd vanwege het aantal 
# onnodige meldingen. de code staat wel actief in het script

# laad IRanges
# library(IRanges)
# detach IRanges
# detach("package:IRanges", unload = TRUE)
# detach voorkomt problemen met aanroepen van functies van dplyr
# Create a function to merge intervals within each group
merge_intervals <- function(from, to) {
  intervals <- IRanges::IRanges(start = from, end = to)
  merged_intervals <- IRanges::reduce(intervals)
  
  # Convert IRanges object to data frame
  merged_df <- data.frame(
    FROM = start(merged_intervals),
    TO = end(merged_intervals)
  )
  
  return(merged_df)
}
# ter voorbereiding op het parallel bepalen van unieke intervals een aantal opdrachten

# sorteer komgrenzen op wegvak_id
komgrenzen <- komgrenzen %>%
  lazy_dt() %>%
  mutate(KOM_VAN = as.numeric(KOM_VAN),
         KOM_TOT = as.numeric(KOM_TOT)) %>%
  arrange(WEGVAK_ID, KOM_VAN, KOM_TOT) %>%
  as.data.frame()

# bepaal unieke wegvak ids binnen komgrenzen
komgrenzen_wvkid <- komgrenzen$WEGVAK_ID

# creeer een list object met x objecten van 1000 unieke wegvakid's 
komgrenzen_wvkid_grouped <- split(komgrenzen_wvkid, ceiling(seq_along(komgrenzen_wvkid) / 10000))

# kleine subset voor testen van de functie
#komgrenzen_wvkid_grouped <- komgrenzen_wvkid_grouped[1:5]
# parallele berekening voor het bepalen van intervallen

# Define parallel cluster for foreach
n.cores <- detectCores() - 2
my.cluster <- makeCluster(n.cores, type = "PSOCK")
registerDoParallel(my.cluster)

komgrenzen_unieke_intervals <- foreach(i = 1:length(komgrenzen_wvkid_grouped), 
              .combine=function(...) rbindlist(list(...)),
              .multicombine=TRUE,
              .packages = c("dplyr", "tidyr", "IRanges" )) %dopar% {

    # pas de functie merged_intervals toe per WEGVAK_ID 
  komgrenzen_unieke_intervals_par <- komgrenzen %>%
    # filter wegvak ids naar groep i
    dplyr::filter(WEGVAK_ID %in% komgrenzen_wvkid_grouped[[i]] ) %>%
    # groepeer de data op wegvak_id
    dplyr::group_by(WEGVAK_ID) %>%
    # bepaal de intervallen per wegvak id waarlangs wordt geparkeerd met behulp van de functie
    dplyr::summarize(merged_intervals = list(merge_intervals(from = KOM_VAN, to = KOM_TOT))) %>%
    tidyr::unnest(cols = c(merged_intervals))
    
    # ten slotte het object dat je wilt maken als laatste aanroepen (net als in een for loop)
    komgrenzen_unieke_intervals_par
}

# Beeindig parallel cluster
stopCluster(cl = my.cluster)
# exact gelijke intervallen zijn niet (allemaal) verwerkt. Die kunnen we nu dedupliceren
komgrenzen_unieke_intervals_dedup <- komgrenzen_unieke_intervals %>%
  lazy_dt() %>%
  mutate(KOM_VAN = FROM, KOM_TOT = TO) %>%
  select(-TO, -FROM) %>%
  group_by(WEGVAK_ID) %>%
  distinct(WEGVAK_ID, KOM_VAN, KOM_TOT, .keep_all = TRUE) %>%
  ungroup() %>%
  group_by(WEGVAK_ID) %>%
  mutate(aantal = n()) %>%
  ungroup() %>%
  as.data.frame()

De tabel hieronder toont een uitsnede van het resultaat.

komgrenzen_unieke_intervals_dubbel <- komgrenzen_unieke_intervals_dedup %>%
  filter(aantal >= 2) 

scroltabel_gt(rbind(filter(komgrenzen_unieke_intervals_dedup,WEGVAK_ID %in% c(27142016, 27142039, 600437984)),
                    komgrenzen_unieke_intervals_dubbel[1:20,]
                    ),
              title = "Unieke bibeko segment intervallen")
Unieke bibeko segment intervallen
WEGVAK_ID KOM_VAN KOM_TOT aantal
27142016 0 35 1
27142039 18 80 1
600437984 0 580 1
39190083 0 7 4
39190083 76 103 4
39190083 138 139 4
39190083 331 565 4
64186032 0 7 2
64186032 340 350 2
66184030 541 543 2
66184030 665 1814 2
103235024 0 433 2
103235024 1350 1355 2
113254010 0 109 2
113254010 155 169 2
131164003 0 41 2
131164003 86 246 2
131167035 0 11 2
131167035 314 325 2
131167041 0 28 2
131167041 58 87 2
132289001 61 106 2
132289001 108 204 2

Op basis van dit resultaat wordt bepaald welk deel van het wegvak (in meters) binnen de kom ligt.

komgrenzen_aggregatie <- komgrenzen_unieke_intervals_dedup %>%
  dplyr::rename(WVK_ID = WEGVAK_ID) %>%
  # bepaal de lengte per wegvak binnen de bebouwde kom
  mutate(lengte_bibeko = as.numeric(KOM_TOT) - as.numeric(KOM_VAN)) %>%
  group_by(WVK_ID) %>%
  # calculate total road section length within build-up area
  summarise(lengte_bibeko = sum(lengte_bibeko, na.rm = TRUE))

tabel_preview(komgrenzen_aggregatie, title = "Bibeko wegvaklengte per wegvak")
Bibeko wegvaklengte per wegvak
WVK_ID lengte_bibeko
1 27142010 16
2 27142014 103
3 27142015 333
4 27142016 35
5 27142019 57
6 27142039 62
7 27142041 65
8..1156926
1156927 601167640 726

Dit gegeven wordt aan het NWB gekoppeld. Daarmee kan per wegvak het aandeel worden bepaald dat binnen de bebouwde kom ligt. Een wegvak wordt bepaald als zijnde binnen de bebouwde kom als dit aandeel groter is dan 50%. Dit vereenvoudigt de score-toekenning per wegvak en de bepaling van de SPI-score per wegbeheerder.

Op basis van de gekoppelde data kunnen we de laatste selectie maken van wegvakken die voor de SPI Veilige Infrastructuur - kenmerk Aanwezigheid rijbaanscheiding beoordeeld zullen worden. Er wordt daarvoor gefilterd op:

  • wegvakken buiten de bebouwde kom met een snelheidslimiet van 70, 80 of 100 km/uur
  • wegvakken binnen de bebouwde kom met een snelheidslimiet van 70km/uur
# maximum share of the road section length within the build-up area
bubeko_minimum <- 0.5

# voeg ligging bibeko/bubeko toe aan nwb
nwb_rijbaan2 <- nwb_rijbaan_limiet %>%
  # join komgrenzen aggregatie
  left_join(komgrenzen_aggregatie) %>%
  mutate(
    # bepaal aandeel bubeko     
    lengte_bubeko = case_when(
      !is.na(lengte_bibeko) ~ wegvaklengte - lengte_bibeko, # als lengte_bibeko niet NA is, ligt deel van wegvak in bibeko
      TRUE ~ wegvaklengte                # als lengte_bibeko NA is, ligt hele wegvak in bubeko
    ),
    # in enkele gevallen is de lengte van wegvakken binnen de kom groter dan wegvaklengte. Dit komt door fouten in de data
    # in die gevallen wordt de lengte bubeko als 0 bepaald
    lengte_bubeko = ifelse(lengte_bubeko <= 0, 0, lengte_bubeko), 
    aandeel_bubeko = round(lengte_bubeko / wegvaklengte, 2),
    # bepaal binaire ligging bubeko of bibeko     
    ligging_kom = ifelse(na.as.false(aandeel_bubeko - bubeko_minimum > 0), "bubeko", "bibeko" )) %>%
  #lengte bibeko er uit
  select(-lengte_bibeko) %>%
  # plaats geometry kolom achteraan
  relocate(geometry, .after = last_col()) %>%
  # filter naar komgrens en limiet
  filter((ligging_kom == "bubeko") & (MAXSHD =="70" | MAXSHD == "80" | MAXSHD == "100") | 
          (ligging_kom == "bibeko") & (MAXSHD =="70"))
## Joining with `by = join_by(WVK_ID)`

Dit levert de volgende tabel op (dit betreft een uitsnede).

# tabel uitsnede dataset voor analyse
tabel_preview(st_drop_geometry(nwb_rijbaan2), title = "Dataset voor analyse")
Dataset voor analyse
WVK_ID WEGBEHSRT WEGNUMMER STT_NAAM WPSNAAM GME_NAAM WEGBEHNAAM BST_CODE wegvaklengte MAXSHD lengte_snelheidslimiet lengte_limiet_aandeel lengte_bubeko aandeel_bubeko ligging_kom
1 122182003 G NA Dam Yerseke Reimerswaal Reimerswaal NA 63.198101 80 42 0.7 42.198101 0.67 bubeko
2 311129004 P N69 Barrier Bergeijk Bergeijk Noord-Brabant HR 7.046706 80 7 1.0 7.046706 1.00 bubeko
3 311128001 P N69 Barrier Bergeijk Bergeijk Noord-Brabant HR 359.840539 80 360 1.0 359.840539 1.00 bubeko
4 390025014 P N278 Rijksweg Wittem Gulpen-Wittem Limburg MRB 17.908509 80 18 1.0 17.908509 1.00 bubeko
5 366391002 G NA Bremerbergdijk Biddinghuizen Dronten Dronten NA 728.233683 80 728 1.0 728.233683 1.00 bubeko
6 288344064 G NA Gooiergracht Laren Laren Laren NA 37.521689 80 38 1.0 37.521689 1.00 bubeko
7 351529014 G NA Spearsterdyk Sibrandabuorren Súdwest-Fryslân Sudwest-Fryslan NA 14.804625 80 15 1.0 14.804625 1.00 bubeko
8..46766
46767 600947010 P N620 Sint-Oedenrodeseweg Best Best Noord-Brabant HR 2.850547 80 3 1.0 2.850547 1.00 bubeko

5 Analyse geleiderails- en middenbermdata

In de analyse bekijken we twee WKD producten: Geleiderails en middenbermbreedte.Het bestand geleiderails betreft een CSV waarbij elk record een segment met een geleiderails in de middenberm representeert. Van elke meter wegvak uit het NWB met een snelheid van 70 km/u of meer is nagegaan of een geleiderails aan de linker kant van de (éénrichtings)weg aanwezig is. Opeenvolgende delen waarbij dit het geval is vormen samen een segment met een geleiderails. Wanneer een geleiderails op een wegvak aanwezig is en deze wordt onderbroken, worden van deze onderbroken delen aparte segmenten vastgelegd. WVK_ID’s kunnen daarom meerdere keren voorkomen. Onderstaand de attributentabel van dit product.

tabel_geleiderails_beschr <- rbind(  
c("Attribuut","Omschrijving"),
c("BEGINDAT" ,"De eerste datum waarop het wegkenmerk geldig is. Dit is de datum waarop het wegkenmerk voor het eerst voorkomt of voor het laatst gemuteerd is."),
c("WEGVAK_ID" ,"Het unieke nummer voor een Wegvak."),
c("WVK_BEGDAT","De eerste datum waarop deze vorm en inhoud van betreffende Wegvak geldig is."),
c("NWB_VERSIE","Dit is de datum waarop de waarde in het WKD bestand voor het laatst is geüpdatet. Het gaat hier om de brondata waarop het WKD-bestand is gebaseerd."),
c("VAN","Beginpunt van het wegvakdeel binnen het betreffende wegvak, van waar de geleiderails begint (meter)"),
c("TOT","Eindpunt van het wegvakdeel binnen het betreffende wegvak, tot waar de geleiderails eindigt ldt (meter)"),
c("KANTCODE","Dit geeft de letter aan van kant waar de geleiderails van wordt bepaald ten opzichte van de rijbaan." ),
c("POSOMSCHR","Dit geeft weer welke berm wordt beschouwd." )
) %>%
as.data.frame()

# kolomnamen op basis van eerste rij
names(tabel_geleiderails_beschr) <-tabel_geleiderails_beschr[1,]

# verwijder eerste rij
tabel_geleiderails_beschr <- tabel_geleiderails_beschr[-1,]

# df_tabel_geleiderails_beschr <- read_delim(tabel_geleiderails_beschr, delim = ";", col_names = TRUE, trim_ws = TRUE)

# Create the gt table a
gt_table_beschr_geleiderailsl <- gt(tabel_geleiderails_beschr) %>%
  tab_header(title = "Variabelen WKD geleiderails data") %>%
  tab_options(
    #table.background.color = blue_vals[6],
    column_labels.background.color = blue_vals[1],
    column_labels.font.size = px(16),
    table.font.size = px(12),
    data_row.padding = px(4),
    #table.width = px(250)
  ) %>%
  tab_style(
    style = cell_borders(sides = "bottom", color = blue_vals[1], weight = px(3)),
    locations = cells_body(rows = nrow(tabel_geleiderails_beschr))
  )


# Print the table
gt_table_beschr_geleiderailsl

Het bestand middenbermbreedte betreft een CSV waarbij elk record een aaneengesloten segment van een middenberm representeerd. Van een wegvak kunnen verschillende segmenten worden vastgelegd wanneer het type rijrichtingscheiding wisselt. Een wegvak_id komt in die gevallen meerdere keren voor. Van elke vijf (OWN) of tien meter (HWN) wegvak uit het NWB met een snelheid van 70 km/u of meer, waar geen geleiderails aanwezig is, wordt nagegaan wat de breedte van de middenberm is en wat het type middenberm is. Opeenvolgende delen van eenzelfde type middenberm vormen samen een middenberm segment waarvan de breedte is bepaald als de mediaan van de verschillende metingen. Van wegvakdelen met een geleiderails is dus geen middenbermbreedte bepaald. De geleiderail verzorgt de fysieke rijrichtingscheiding op basis waarvan de SPI Veilige Infrastructuur - kenmerk rijbaanscheiding als voldoende wordt beoordeeld. Bij de vaststelling van het WKD product middenberm is bepaald dat breedte van de middenberm in dat geval niet meegewogen hoeft te worden en is daarom ook niet bepaald voor deze delen. Ten slotte zijn er twee soorten middenbermen vastgesteld: middenberm en verkeerseiland. In deze analyse nemen we beide soorten samen. Onderstaand de attributentabel van dit product.

tabel_middenbermbreedte_beschr <- 
"Attribuut;Omschrijving
BEGINDAT;De eerste datum waarop het wegkenmerk geldig is. Dit is de datum waarop het wegkenmerk voor het eerst voorkomt of voor het laatst gemuteerd is.
WEGVAK_ID;Het unieke nummer voor een Wegvak.
WVK_BEGDAT;De eerste datum waarop deze vorm en inhoud van betreffende Wegvak geldig is
NWB_VERSIE;Dit is de datum waarop de waarde in het WKD bestand voor het laatst is geüpdatet. Het gaat hier om de brondata waarop het WKD-bestand is gebaseerd.
VAN;Beginpunt van het wegvakdeel binnen het betreffende wegvak, van waar de middenberm begint (meter)
TOT;Eindpunt van het wegvakdeel binnen het betreffende wegvak, tot waar de middenberm eindigt ldt (meter)
KANTCODE;Dit geeft de letter aan van kant waar de middenbermbreedte van wordt bepaald ten opzichte van de rijbaan. Dit is in alle gevallen de L.
POSOMSCHR;Dit geeft weer welke berm wordt beschouwd. Voor deze WKD is dat de middenberm zonder geleiderail.
SOORT;Dit geeft het object aan waarvan de breedte wordt bepaald. Mogelijke waarden zijn Verkeerseiland en Berm.
BREEDTE;Dit geeft de breedte weer van de berm of het verkeerseiland in meter met één decimaal."

# string naar tabel
df_tabel_middenbermbreedte_beschr <- read_delim(tabel_middenbermbreedte_beschr, delim = ";", col_names = TRUE, 
                                                trim_ws = TRUE, col_types = "cc")

# Create the gt table a
gt_table_beschr_middenbermbreedtel <- gt(df_tabel_middenbermbreedte_beschr) %>%
  tab_header(title = "Variabelen WKD middenbermbreedte data") %>%
  tab_options(
    #table.background.color = blue_vals[6],
    column_labels.background.color = blue_vals[1],
    column_labels.font.size = px(16),
    table.font.size = px(12),
    data_row.padding = px(4),
    #table.width = px(250)
  ) %>%
  tab_style(
    style = cell_borders(sides = "bottom", color = blue_vals[1], weight = px(3)),
    locations = cells_body(rows = nrow(df_tabel_middenbermbreedte_beschr))
  )

# Print the table
gt_table_beschr_middenbermbreedtel

De analyse is beperkt tot wegen met een snelheidlimiet van 70, 80 en 100 km/u wegen buiten de bebouwde kom en wegen binnen de kom met een snelheidslimiet van 70 km/uur. Voor deze wegen geldt dat een rijbaanscheiding wenselijk is. Per wegvak ID wordt vastgelegd:

  1. De lengte van het wegvak waarlangs een geleiderails (in de middenberm) aanwezig is
  2. De lengte van het wegvak waarlangs een voldoende brede middenberm aanwezig is
  3. De lengte van het wegvak waarlangs een onvoldoende brede middenberm aanwezig is
  4. De lengte van het wegvak waarlangs een geleiderails (in de middenberm) of een voldoende brede middenberm aanwezig is
  5. De lengte van het wegvak waarlangs een geleiderails (in de middenberm) of een middenberm (al dan niet voldoende breed) aanwezig is
  6. Het aandeel van het wegvak waarlangs een geleiderails of voldoende brede middenberm aanwezig is

Een wegvak wordt als voldoende beoordeeld wanneer het aandeel van het wegvak waarlangs een geleiderails of voldoende brede middenberm aanwezig 0,9 of hoger is. Met de huidige data kan geen rekening gehouden worden met afwijkingen rond kruispunten. Vaak wijkt de middenberm echter rond kruispunten af van de rest van het wegvak. Daarom wordt getoetst of tenminste 90% van het wegvak voldoet aan de gestelde criteria ten aanzien van de rijbaanscheiding.

  1. Het wegvak “voldoet” of “voldoet niet” aan het minimum aandeel lengte met rijbaanscheiding

Voor de benchmark wordt het aandeel segmenten bepaald waarvan de rijrichtingscheiding voldoet aan de gestelde criteria. Daarbij dient rekening te worden gehouden met de rijbaanconfiguratie. Wegen met een fysieke rijrichtingscheiding bestaan immers uit meerdere rijbanen. Dit doen we door de relatieve lengte van een wegvak te berekenen naar aanwezigheid van een rijbaanscheiding, waarbij de relatieve lengte wordt bepaald als de halve lengte van een segment wanneer een rijbaanscheiding aanwezig is.

  1. De relatieve lengte van een wegvak naar aanwezigheid van een rijbaanscheiding: de weg- of straatlengte

Het beoordelingscriterium is gesteld als de verhouding in de lengte van de aanwezige (voldoende beoordeelde) rijbaanscheiding en de totale straatlengte (op basis van de relatieve wegvaklengtes).

Let op, dit is dus niet het deel van de wegvaklengte dat voldoet aan het criterium: aandeel rijrichtingscheiding voldoende >= 0,9.

5.1 Lengte geleiderails

De WKD producten geleiderails en middenberm zijn gemaakt voor NWB-wegvakken die voldoend aan de volgende voorwaarden: * het wegvak valt niet onder beheer van het Rijk * het wegvak heeft een snelheidslimiet van 70 km/uur of hoger * de RPE_CODE (relatieve positiecode) is ongelijk ‘#’

Deze producten verwerken we in dit hoofdstuk voor het bepalen van de scores in het volgende hoofdstuk. We kijken hier eerst naar de wegvaklengtes met geleiderails.

In de onderstaande tabel wordt een uitsnede van De WKD geleiderails getoond.

# preview tabel geleiderails
tabel_preview(Geleiderails)
BEGINDAT WEGVAK_ID WVK_BEGDAT NWB_VERSIE VAN TOT KANTCODE POSOMSCHR
1 01-01-2024 53149018 01-10-2022 01-01-2024 0 1556 L Middenberm
2 01-01-2024 53149019 01-10-2022 01-01-2024 46 196 L Middenberm
3 01-01-2024 53149020 01-10-2022 01-01-2024 0 150 L Middenberm
4 01-01-2024 56147006 01-10-2021 01-01-2024 0 3436 L Middenberm
5 01-01-2024 56147010 01-10-2022 01-01-2024 0 1572 L Middenberm
6 01-01-2024 60142002 01-10-2021 01-01-2024 0 461 L Middenberm
7 01-01-2024 61142007 01-12-2021 01-01-2024 0 444 L Middenberm
8..15786
15787 01-01-2024 601167080 01-01-2024 01-01-2024 2573 2607 R Buitenberm

Wegvakken zijn opgesplitst in segmenten met geleiderails in de middenberm en de buitenberm. Segmenten zijn aangeduid met Van en TOT, die het begin en eindpunt van een segment beschrijven met de relatieve positie ten opzichte van het 0 punt van het wegvak. In deze analyse wordt enkel gekeken naar geleiderails in de middenberm. Segmenten met geleiderails in de buitenberm wordt daarom genegeerd. Tussen segmenten in de middenberm is verder geen overlap aanwezig. De lengte van geleiderail op een wegvak kan daarom eenvoudig worden bepaald als de som van de segmentlengtes. De informatie uit WKD Geleiderails aggregeren we op die manier naar wegvak id.

geleiderails_aggregatie <- Geleiderails %>%
  # selecteer enkel segmenten met geleiderails in de middenberm
  filter(POSOMSCHR == "Middenberm") %>%
  dplyr::rename(WVK_ID = WEGVAK_ID) %>%
  # groepeer naar wegvak id
  group_by(WVK_ID) %>%
  # aggregeer naar wegvak id en bepaal de geleiderails lengte
  summarize(lengte_geleiderails = sum(TOT-VAN))

tabel_preview(geleiderails_aggregatie)
WVK_ID lengte_geleiderails
1 53149018 1556
2 53149019 150
3 53149020 150
4 56147006 3436
5 56147010 1572
6 60142002 461
7 61142007 444
8..6480
6481 601167056 187

5.2 Lengte middenberm

Vervolgens kijken we naar de lengte van de middenberm die voldoet aan de minimale breedte. Deze minimale breedte verschilt per snelheidslimiet:

  • 70 km/u \(\ge\) 1,5m voldoet
  • 80 km/u \(\ge\) 3m voldoet
  • 100 km/u \(\ge\) 20m voldoet

In de onderstaande tabel wordt een uitsnede van De WKD geleiderails getoond.

# preview wkd middenbermbreedte
tabel_preview(Middenbermbreedte)
BEGINDAT WEGVAK_ID WVK_BEGDAT NWB_VERSIE VAN TOT KANTCODE POSOMSCHR SOORT BREEDTE
1 01-01-2024 50182012 01-11-2021 01-01-2024 13 157 L Middenberm verkeerseiland 2.3
2 01-01-2024 53149020 01-10-2022 01-01-2024 150 164 L Middenberm berm 6.5
3 01-01-2024 57174078 01-12-2020 01-01-2024 58 87 L Middenberm verkeerseiland 5.0
4 01-01-2024 57174086 01-12-2020 01-01-2024 6 34 L Middenberm verkeerseiland 5.0
5 01-01-2024 58174020 01-02-2019 01-01-2024 12 144 L Middenberm berm 4.0
6 01-01-2024 59172012 01-11-2021 01-01-2024 6 445 L Middenberm berm 4.6
7 01-01-2024 59172012 01-11-2021 01-01-2024 445 463 L Middenberm verkeerseiland 9.3
8..12664
12665 01-01-2024 601167080 01-01-2024 01-01-2024 2390 2616 L Middenberm verkeerseiland 3.0

Wegvakken zijn opgesplitst in segmenten met een middenberm. Segmenten worden aangeduid met Van en TOT, die het begin en eindpunt van een segment beschrijven met de relatieve positie ten opzichte van het 0 punt van het wegvak.

De informatie uit Middenbermbreedte aggregeren we naar wegvak id. Daarbij wordt onderscheid gemaakt delen waarvan de middenbermbreedte voldoet en delen waarvan de middenbermbreedte onvoldoende is. Er wordt verder geen onderscheid gemaakt naar de in de WKD middenberm onderscheidden typen middenberm: middenberm en verkeerseiland.

# set toetsingscriteria middenbermbreedte per limiet
middenbermbreedte_minimaal_70 <- 1.5
middenbermbreedte_minimaal_80 <- 3.0
middenbermbreedte_minimaal_100 <- 20
middenberm_aggregatie <- Middenbermbreedte %>%
  #slice_head(n=10) %>%
  dplyr::rename(WVK_ID = WEGVAK_ID) %>%
  # max snelheid uit nwb koppelen om middenbermbreedte te beoordelen voor verschillende snelheden
  left_join(nwb_rijbaan2 %>% select(WVK_ID, MAXSHD), by = "WVK_ID") %>%
  dplyr::rename(snelheid = MAXSHD) %>%
  # middenbermbreedte voldoet wanneer b > minimale breedte
  mutate(
    breedte_voldoet = case_when(
          snelheid == "70" & BREEDTE > middenbermbreedte_minimaal_70 ~ 1,
          snelheid == "80" & BREEDTE > middenbermbreedte_minimaal_80 ~ 1,
          snelheid == "100" & BREEDTE > middenbermbreedte_minimaal_100 ~ 1,
          TRUE ~ 0)) %>%
  # middenbermbreedte voldoet niet wanneer breedte 0 < b < minimaal
  mutate(
    breedte_voldoet_niet = case_when(
          snelheid == "70" & (BREEDTE > 0 & BREEDTE < middenbermbreedte_minimaal_70) ~ 1,
          snelheid == "80" & (BREEDTE > 0 & BREEDTE < middenbermbreedte_minimaal_80) ~ 1,
          snelheid == "100" & (BREEDTE > 0 & BREEDTE < middenbermbreedte_minimaal_100) ~ 1,
          TRUE ~ 0)) %>%
  group_by(WVK_ID) %>%
  summarize(
    lengte_middenberm_voldoende = sum(ifelse(breedte_voldoet == 1, TOT - VAN, 0)),
    lengte_middenberm_onvoldoende = sum(ifelse(breedte_voldoet_niet == 1, TOT - VAN, 0))
    )

Hieronder wordt van een aantal wegvakken als voorbeeld de uitkomst van de aggregatie getoond.

preview_middenbermbreedtes <- rbind(
  filter(middenberm_aggregatie, lengte_middenberm_onvoldoende == 0) %>% slice_head(n=5),
  filter(middenberm_aggregatie, lengte_middenberm_onvoldoende > 0) %>% slice_head(n=5)
)

scroltabel_gt(preview_middenbermbreedtes, title = "Lengtes middenbermen zonder geleiderails per wegvak in meters")
Lengtes middenbermen zonder geleiderails per wegvak in meters
WVK_ID lengte_middenberm_voldoende lengte_middenberm_onvoldoende
50182012 0 0
53149020 14 0
57174078 29 0
57174086 28 0
58174020 132 0
60173035 0 133
60174063 348 125
60175061 1256 94
61177008 0 14
66177060 0 2787

5.3 Lengte rijbaanscheiding

De geleiderails en middenberm data voegen we samen met de NWB wegvakken selectie, komende tot de lengte van de voldoende veilige rijbaanscheiding per wegvak.

aandeel_rijbaanscheiding_minimaal <- 0.9

## join geleiderails en middenberm aggregaties
geleiderails_middenberm_aggregatie <- geleiderails_aggregatie %>%
  full_join(middenberm_aggregatie, by = "WVK_ID")
  
nwb_rijbaanscheiding <- nwb_rijbaan2 %>%
  # join rpe code 
  left_join(select(st_drop_geometry(NWB), WVK_ID, RPE_CODE)) %>%
  # selecteer te gebruiken NWB variabelen 
  select(WVK_ID, RPE_CODE, BST_CODE, MAXSHD, wegvaklengte, WEGBEHSRT, WEGBEHNAAM, WEGNUMMER, STT_NAAM, WPSNAAM, GME_NAAM,
         aandeel_bubeko, lengte_limiet_aandeel) %>% 
  #  join middenberm variabelen
  left_join(geleiderails_middenberm_aggregatie) %>%
  # vul lengte 0 in voor wegvakken waarvan geen geleiderails in de wkd is vastgelegd
  mutate(lengte_geleiderails = ifelse(na.as.false(lengte_geleiderails>0), lengte_geleiderails, 0)) %>%
  # vul lengte 0 in voor wegvakken waarvan geen (voldoende breede) middenberm in de wkd is vastgelegd
  mutate(lengte_middenberm_voldoende = ifelse(na.as.false(lengte_middenberm_voldoende>0), lengte_middenberm_voldoende, 0),
         lengte_middenberm_onvoldoende = ifelse(na.as.false(lengte_middenberm_onvoldoende>0), lengte_middenberm_onvoldoende, 0)
         ) %>%
  # bereken de rijbaanscheiding lengte
  mutate(lengte_rijbaanscheiding_voldoende = lengte_geleiderails + lengte_middenberm_voldoende,
         lengte_rijbaanscheiding_fysiek = lengte_rijbaanscheiding_voldoende + lengte_middenberm_onvoldoende) %>%
  # wegvakscore rijbaanscheiding, als de som van de rijbaanscheiding > 90% van het wegvak is
  mutate(rijbaanscheiding_voldoende = 
           ifelse(lengte_rijbaanscheiding_voldoende/wegvaklengte > aandeel_rijbaanscheiding_minimaal, 1, 0)) %>%
  # oude code berekenen straatlengte, ofwel relatieve wegvaklengte naar aanwezigheid rijbaanscheiding
  # beter is dit op basis van rpe code te doen. delen waar namelijk geen fysieke scheiding aanwezig is zijn in dat geval
  # ook dubbel getekend. 
  # mutate(lengte_wegvak_straat = (wegvaklengte - lengte_rijbaanscheiding_fysiek) + (lengte_rijbaanscheiding_fysiek * 0.5)) %>%
  # bepaal straatlengte op basis van de aanwezigheid van een fysieke rijrichtingscheiding
  mutate(lengte_wegvak_straat = ifelse(RPE_CODE != "#", 0.5 * wegvaklengte, wegvaklengte)) %>%
    # verlplaansen geometry kolom naar einde
  relocate(lengte_wegvak_straat, .after = wegvaklengte) %>%
  relocate(geometry, .after = last_col()) %>%
  dplyr::rename(Snelheidslimiet = MAXSHD)

Dit levert een dataset op met per wegvak

  • de wegvaklengte waarin welke vorm rijbaanscheiding aanwezig is
  • of het wegvak voldoet aan het kenmerk Aanwezigheid rijbaanscheiding
  • de relatieve lengte, ofwel straatlengte van het wegvak
  • administratieve variabelen uit het NWB
  • verschillende andere hulpvariabelen

Hieronder wordt van wegvakken waar een fysieke rijrichtingscheiding aanwezig is een uitsnede van resultaat getoond.

tabel_preview(filter(st_drop_geometry(nwb_rijbaanscheiding), lengte_rijbaanscheiding_fysiek > 0))
WVK_ID RPE_CODE BST_CODE Snelheidslimiet wegvaklengte lengte_wegvak_straat WEGBEHSRT WEGBEHNAAM WEGNUMMER STT_NAAM WPSNAAM GME_NAAM aandeel_bubeko lengte_limiet_aandeel lengte_geleiderails lengte_middenberm_voldoende lengte_middenberm_onvoldoende lengte_rijbaanscheiding_voldoende lengte_rijbaanscheiding_fysiek rijbaanscheiding_voldoende
1 401407086 Z NA 70 104.11485 52.05743 G Zwolle NA Westenholterallee Zwolle Zwolle 0.00 1 0 90 0 90 90 0
2 600136627 O NA 70 320.97858 160.48929 G Eindhoven NA Botenlaan Eindhoven Eindhoven 0.00 1 0 0 321 0 321 0
3 371063052 O NA 70 95.94669 47.97335 G Sittard-Geleen NA Westelijke Randweg Geleen Sittard-Geleen 0.01 1 0 76 0 76 76 0
4 600169667 Z NA 70 152.35351 76.17675 G Sittard-Geleen NA Westelijke Randweg Geleen Sittard-Geleen 0.00 1 0 118 0 118 118 0
5 600145768 N NA 70 415.46259 207.73130 G Arnhem NA Batavierenweg Arnhem Arnhem 0.00 1 0 409 0 409 409 1
6 218198101 Z NA 70 232.48155 116.24077 G Breda NA Ettensebaan Breda Breda 0.00 1 0 211 0 211 211 1
7 486368012 Z NA 70 165.73713 82.86857 G Almelo NA Nijreessingel Almelo Almelo 0.00 1 0 127 0 127 127 0
8..8401
8402 341232019 L HR 80 209.35314 104.67657 P Noord-Brabant N324 Rijksweg Schaijk Maashorst 1.00 1 0 0 126 0 126 0

6 Scores en Benchmark SPI Veilige Infrastructuur - kenmerk aanwezigheid rijbaanscheiding

De SPI Veilige Infrastructuur bevat het kenmerk “Aanwezigheid rijbaanscheiding”. Op wegen van een limiet van 70 km/u en hoger is een rijbaanscheiding in de vorm van een geleiderails of een voldoende brede middenberm gewenst. Een wegvak is als voldoende beoordeeld wanneer het aandeel van (als voldoende beoordeelde) rijbaanscheiding groter of gelijk aan 0,9 is.

Voor nu beperkt de analyse zich tot wegen buiten de bebouwde kom. Verder gelden een aantal beperkingen voor de gebruikte brondata voor het bepalen van de scores, zie daarvoor de paragraaf Aandachtspunten.

6.1 Bepaling scores per wegbeheerder

In het vorige hoofdstuk zijn wegvakken beoordeeld ten aanzien van het SPI kenmerk Aanwezigheid van een rijbaanscheiding in de vorm van een geleiderails of een brede middenberm. De beoordeling op wegvakniveau wordt vertaald naar een score op netwerkniveau per wegbeheerder. Daarbij wordt gekeken naar de verhouding tussen de lengte van de aanwezige (voldoende beoordeelde) rijbaanscheiding en de totale straatlengte. Let op, de halve, en niet de hele, lengte van segmenten waarvan de rijrichtingscheiding voldoet wordt gebruikt. Immers gaat dat segment altijd gepaard met een segment in de andere richting op de zelfde weg met dezelfde middenberm.

Per wegbeheerder wordt het volgende gescoord.

  1. Score kenmerk aanwezigheid rijbaanscheiding naar wegvak: [aantal wegvakken dat voldoet] / [totaal aantal wegvakken]
  2. Score Kenmerk aanwezigheid rijbaanscheiding naar wegvaklengte: [totale lengte van de wegvakken die voldoen] * 0.5 / [totale wegvaklengte]
  3. Score kenmerk aanwezigheid rijbaanscheiding naar weg- of straatlengte: [totale wegvaklengte waarvan de rijbaanscheiding voldoet] *0.5 / [totale weg- of straatlengte]

De eerste score is de hoofdscore, omdat deze ook gebruikt kan worden bij de bepaling van een totaal score van de infrastructuur. Daarnaast kan de score worden onderscheiden op het totale areaal en per limiet.

De eerste en tweede score zijn beide gebaseerd op een beoordeling op wegvak niveau. De derde score weegt alle delen van de wegvakken die al dan niet op orde zijn afzonderlijk, ten opzichte van totale weg- of straatlengte (niet te verwarren met de wegvaklengte).

#### landelijke ####
scores_landelijk_totaal <- nwb_rijbaanscheiding %>%
  st_drop_geometry(.) %>%
  # bepaal scores
  summarise(`Wegbeheerder soort` = "Totaal" ,
            Wegbeheerder = "Totaal",
            Snelheidslimiet = "Totaal",
            `Score kenmerk Aanwezigheid rijbaanscheiding` = sum(rijbaanscheiding_voldoende) / n(),
            `Score kenmerk naar wegvaklengte` = sum(ifelse(rijbaanscheiding_voldoende == 1, wegvaklengte,0)/
                                                      sum(wegvaklengte)),
            `Score kenmerk naar weg- of straatlengte` = sum(lengte_rijbaanscheiding_voldoende * 0.5) / sum(lengte_wegvak_straat),
            `Totale wegvaklengte [km]` = round(sum(wegvaklengte) / 1000, 1),
            `Totale weglengte [km]` = round(sum(lengte_wegvak_straat) / 1000, 1)) %>%
  mutate(across(c(`Score kenmerk Aanwezigheid rijbaanscheiding`:`Score kenmerk naar weg- of straatlengte`),
                ~ set_units(. * 100, "%"))) %>%
  mutate(across(c(`Score kenmerk Aanwezigheid rijbaanscheiding`:`Score kenmerk naar weg- of straatlengte`),
                ~ round(., 1))) %>%
  ungroup()

# scores per limiet bepalen  
scores_landelijk_limiet <- nwb_rijbaanscheiding %>%
  st_drop_geometry(.) %>%
  # groepeer naar limiet
  group_by(Snelheidslimiet) %>%
  # bepaal scores
  summarise(`Wegbeheerder soort` = "Totaal" ,
            Wegbeheerder = "Totaal",
            #Snelheidslimiet = "Totaal",
            `Score kenmerk Aanwezigheid rijbaanscheiding` = sum(rijbaanscheiding_voldoende) / n(),
            `Score kenmerk naar wegvaklengte` = sum(ifelse(rijbaanscheiding_voldoende == 1, wegvaklengte,0)/
                                                      sum(wegvaklengte)),
            `Score kenmerk naar weg- of straatlengte` = sum(lengte_rijbaanscheiding_voldoende * 0.5) / sum(lengte_wegvak_straat),
            `Totale wegvaklengte [km]` = round(sum(wegvaklengte) / 1000, 1),
            `Totale weglengte [km]` = round(sum(lengte_wegvak_straat) / 1000, 1)) %>%
  mutate(across(c(`Score kenmerk Aanwezigheid rijbaanscheiding`:`Score kenmerk naar weg- of straatlengte`),
                ~ set_units(. * 100, "%"))) %>%
  mutate(across(c(`Score kenmerk Aanwezigheid rijbaanscheiding`:`Score kenmerk naar weg- of straatlengte`),
                ~ round(., 1))) %>%
  ungroup()

# scores samenvoegen en sorteren op limiet
scores_landelijk <- rbind(scores_landelijk_limiet, scores_landelijk_totaal) %>%
  arrange(Wegbeheerder, as.numeric(Snelheidslimiet))

#### provincies ####

# scores voor het totaal bepalen
scores_provincies_totaal <- nwb_rijbaanscheiding %>%
  st_drop_geometry(.) %>%
  # selecteer op basis van wegbeheersoort
  filter(WEGBEHSRT == "P") %>%
  # groepeer naar webeheerder
  group_by(WEGBEHNAAM) %>%
  # bepaal scores
  summarise(`Wegbeheerder soort` = "Provincie" ,
            Snelheidslimiet = "Totaal",
            `Score kenmerk Aanwezigheid rijbaanscheiding` = sum(rijbaanscheiding_voldoende) / n(),
            `Score kenmerk naar wegvaklengte` = sum(ifelse(rijbaanscheiding_voldoende == 1, wegvaklengte,0)/
                                                      sum(wegvaklengte)),
            `Score kenmerk naar weg- of straatlengte` = sum(lengte_rijbaanscheiding_voldoende * 0.5) / sum(lengte_wegvak_straat),
            `Totale wegvaklengte [km]` = round(sum(wegvaklengte) / 1000, 1),
            `Totale weglengte [km]` = round(sum(lengte_wegvak_straat) / 1000, 1)) %>%
  mutate(across(c(`Score kenmerk Aanwezigheid rijbaanscheiding`:`Score kenmerk naar weg- of straatlengte`),
                ~ set_units(. * 100, "%"))) %>%
  mutate(across(c(`Score kenmerk Aanwezigheid rijbaanscheiding`:`Score kenmerk naar weg- of straatlengte`),
                ~ round(., 1))) %>%
  ungroup() %>%
  dplyr::rename(Wegbeheerder = WEGBEHNAAM) %>%
  relocate(`Wegbeheerder soort`)

# head(scores_provincies_totaal)

# scores per limiet bepalen  
scores_provincies_limiet <- nwb_rijbaanscheiding %>%
  st_drop_geometry(.) %>%
  # selecteer op basis van wegbeheersoort
  filter(WEGBEHSRT == "P") %>%
  # groepeer naar webeheerder
  group_by(WEGBEHNAAM, Snelheidslimiet) %>%
  # bepaal scores
  summarise(`Wegbeheerder soort` = "Provincie" ,
            `Score kenmerk Aanwezigheid rijbaanscheiding` = sum(rijbaanscheiding_voldoende) / n(),
            `Score kenmerk naar wegvaklengte` = sum(ifelse(rijbaanscheiding_voldoende == 1, wegvaklengte,0)/
                                                      sum(wegvaklengte)),
            `Score kenmerk naar weg- of straatlengte` = sum(lengte_rijbaanscheiding_voldoende * 0.5) / sum(lengte_wegvak_straat),
            `Totale wegvaklengte [km]` = round(sum(wegvaklengte) / 1000, 1),
            `Totale weglengte [km]` = round(sum(lengte_wegvak_straat) / 1000, 1)) %>%
  mutate(across(c(`Score kenmerk Aanwezigheid rijbaanscheiding`:`Score kenmerk naar weg- of straatlengte`),
                ~ set_units(. * 100, "%"))) %>%
  mutate(across(c(`Score kenmerk Aanwezigheid rijbaanscheiding`:`Score kenmerk naar weg- of straatlengte`),
                ~ round(., 1))) %>%
  ungroup() %>%
  dplyr::rename(Wegbeheerder = WEGBEHNAAM) %>%
  relocate(`Wegbeheerder soort`)

# head(scores_provincies_limiet)

scores_provincies <- rbind(scores_provincies_limiet, scores_provincies_totaal) %>%
  arrange(Wegbeheerder, as.numeric(Snelheidslimiet))

# head(scores_provincies)

#### gemeenten ####

# scores voor het totaal bepalen
scores_gemeenten_totaal <- nwb_rijbaanscheiding %>%
  st_drop_geometry(.) %>%
  # selecteer op basis van wegbeheersoort
  filter(WEGBEHSRT == "G") %>%
  # groepeer naar gemeente
  group_by(GME_NAAM) %>%
  # bepaal scores
  summarise(`Wegbeheerder soort` = "Gemeente" ,
            Snelheidslimiet = "Totaal",
            `Score kenmerk Aanwezigheid rijbaanscheiding` = sum(rijbaanscheiding_voldoende) / n(),
            `Score kenmerk naar wegvaklengte` = sum(ifelse(rijbaanscheiding_voldoende == 1, wegvaklengte,0)/
                                                      sum(wegvaklengte)),
            `Score kenmerk naar weg- of straatlengte` = sum(lengte_rijbaanscheiding_voldoende * 0.5) / sum(lengte_wegvak_straat),
            `Totale wegvaklengte [km]` = round(sum(wegvaklengte) / 1000, 1),
            `Totale weglengte [km]` = round(sum(lengte_wegvak_straat) / 1000, 1)) %>%
  mutate(across(c(`Score kenmerk Aanwezigheid rijbaanscheiding`:`Score kenmerk naar weg- of straatlengte`),
                ~ set_units(. * 100, "%"))) %>%
  mutate(across(c(`Score kenmerk Aanwezigheid rijbaanscheiding`:`Score kenmerk naar weg- of straatlengte`),
                ~ round(., 1))) %>%
  ungroup() %>%
  dplyr::rename(Wegbeheerder = GME_NAAM) %>%
  relocate(`Wegbeheerder soort`)

# head(scores_gemeenten_totaal)

# scores per limiet bepalen  
scores_gemeenten_limiet <- nwb_rijbaanscheiding %>%
  st_drop_geometry(.) %>%
  # selecteer op basis van wegbeheersoort
  filter(WEGBEHSRT == "G") %>%
  # groepeer naar gemeente
  group_by(GME_NAAM, Snelheidslimiet) %>%
  # bepaal scores
  summarise(`Wegbeheerder soort` = "Gemeente" ,
            `Score kenmerk Aanwezigheid rijbaanscheiding` = sum(rijbaanscheiding_voldoende) / n(),
            `Score kenmerk naar wegvaklengte` = sum(ifelse(rijbaanscheiding_voldoende == 1, wegvaklengte,0)/
                                                      sum(wegvaklengte)),
            `Score kenmerk naar weg- of straatlengte` = sum(lengte_rijbaanscheiding_voldoende * 0.5) / sum(lengte_wegvak_straat),
            `Totale wegvaklengte [km]` = round(sum(wegvaklengte) / 1000, 1),
            `Totale weglengte [km]` = round(sum(lengte_wegvak_straat) / 1000, 1)) %>%
  mutate(across(c(`Score kenmerk Aanwezigheid rijbaanscheiding`:`Score kenmerk naar weg- of straatlengte`),
                ~ set_units(. * 100, "%"))) %>%
  mutate(across(c(`Score kenmerk Aanwezigheid rijbaanscheiding`:`Score kenmerk naar weg- of straatlengte`),
                ~ round(., 1))) %>%
  ungroup() %>%
  dplyr::rename(Wegbeheerder = GME_NAAM) %>%
  relocate(`Wegbeheerder soort`)

# head(scores_gemeenten_limiet)

scores_gemeenten <- rbind(scores_gemeenten_limiet, scores_gemeenten_totaal) %>%
  arrange(Wegbeheerder, as.numeric(Snelheidslimiet))

# head(scores_gemeenten)

#### waterschappen ####

# scores voor het totaal bepalen
scores_waterschappen_totaal <- nwb_rijbaanscheiding %>%
  st_drop_geometry(.) %>%
  # selecteer op basis van wegbeheersoort
  filter(WEGBEHSRT == "W") %>%
  # groepeer naar webeheerder
  group_by(WEGBEHNAAM) %>%
  # bepaal scores
  summarise(`Wegbeheerder soort` = "Waterschap" ,
            Snelheidslimiet = "Totaal",
            `Score kenmerk Aanwezigheid rijbaanscheiding` = sum(rijbaanscheiding_voldoende) / n(),
            `Score kenmerk naar wegvaklengte` = sum(ifelse(rijbaanscheiding_voldoende == 1, wegvaklengte,0)/
                                                      sum(wegvaklengte)),
            `Score kenmerk naar weg- of straatlengte` = sum(lengte_rijbaanscheiding_voldoende * 0.5) / sum(lengte_wegvak_straat),
            `Totale wegvaklengte [km]` = round(sum(wegvaklengte) / 1000, 1),
            `Totale weglengte [km]` = round(sum(lengte_wegvak_straat) / 1000, 1)) %>%
  mutate(across(c(`Score kenmerk Aanwezigheid rijbaanscheiding`:`Score kenmerk naar weg- of straatlengte`),
                ~ set_units(. * 100, "%"))) %>%
  mutate(across(c(`Score kenmerk Aanwezigheid rijbaanscheiding`:`Score kenmerk naar weg- of straatlengte`),
                ~ round(., 1))) %>%
  ungroup() %>%
  dplyr::rename(Wegbeheerder = WEGBEHNAAM) %>%
  relocate(`Wegbeheerder soort`)

# head(scores_waterschappen_totaal)

# scores per limiet bepalen  
scores_waterschappen_limiet <- nwb_rijbaanscheiding %>%
  st_drop_geometry(.) %>%
  # selecteer op basis van wegbeheersoort
  filter(WEGBEHSRT == "W") %>%
  # groepeer naar webeheerder
  group_by(WEGBEHNAAM, Snelheidslimiet) %>%
  # bepaal scores
  summarise(`Wegbeheerder soort` = "Waterschap" ,
            `Score kenmerk Aanwezigheid rijbaanscheiding` = sum(rijbaanscheiding_voldoende) / n(),
            `Score kenmerk naar wegvaklengte` = sum(ifelse(rijbaanscheiding_voldoende == 1, wegvaklengte,0)/
                                                      sum(wegvaklengte)),
            `Score kenmerk naar weg- of straatlengte` = sum(lengte_rijbaanscheiding_voldoende * 0.5) / sum(lengte_wegvak_straat),
            `Totale wegvaklengte [km]` = round(sum(wegvaklengte) / 1000, 1),
            `Totale weglengte [km]` = round(sum(lengte_wegvak_straat) / 1000, 1)) %>%
  mutate(across(c(`Score kenmerk Aanwezigheid rijbaanscheiding`:`Score kenmerk naar weg- of straatlengte`),
                ~ set_units(. * 100, "%"))) %>%
  mutate(across(c(`Score kenmerk Aanwezigheid rijbaanscheiding`:`Score kenmerk naar weg- of straatlengte`),
                ~ round(., 1))) %>%
  ungroup() %>%
  dplyr::rename(Wegbeheerder = WEGBEHNAAM) %>%
  relocate(`Wegbeheerder soort`)

# head(scores_waterschappen_limiet)

scores_waterschappen <- rbind(scores_waterschappen_limiet, scores_waterschappen_totaal) %>%
  arrange(Wegbeheerder, as.numeric(Snelheidslimiet))

# head(scores_waterschappen)

Scores zijn bepaald per wegbeheerder. Dat betekent dat een weg onder beheer van een waterschap niet is meegenomen bij de score van een gemeente, ook al ligt de weg binnen de gebiedsgrenzen van een betreffende gemeente.

6.2 Resultaten SPI Veilige Infrastructuur - Aanwezigheid van rijbaanscheiding per wegbeheerder

In deze paragraaf worden de deelscores van de SPI Veilige Infrastructuur - Aanwezigheid van rijbaanscheiding getoond. De getoonde resultaten worden apart getoond in subparagrafen op landelijk niveau, voor provinciale en gemeentelijke wegbeheerders en wegbeherende waterschappen.

6.2.1 Landelijk

Hieronder worden de scores voor heel Nederland getoond.

scroltabel_gt(scores_landelijk, title = "SPI Veilige Infrastructuur - Aanwezigheid van rijbaanscheiding, van alle wegbeheerders samen") 
SPI Veilige Infrastructuur - Aanwezigheid van rijbaanscheiding, van alle wegbeheerders samen
Snelheidslimiet Wegbeheerder soort Wegbeheerder Score kenmerk Aanwezigheid rijbaanscheiding Score kenmerk naar wegvaklengte Score kenmerk naar weg- of straatlengte Totale wegvaklengte [km] Totale weglengte [km]
70 Totaal Totaal 23.0 [%] 45.5 [%] 47.4 [%] 922.5 556.3
80 Totaal Totaal 2.8 [%] 4.0 [%] 3.7 [%] 10992.4 10048.2
100 Totaal Totaal 23.7 [%] 36.1 [%] 28.9 [%] 1157.2 796.6
Totaal Totaal Totaal 5.7 [%] 9.7 [%] 7.6 [%] 13072.1 11401.1

6.2.2 Waterschappen

Hieronder worden de scores van wegbeherende waterschappen getoond. Waterschappen die geen wegen onder beheer hebben van de beschouwde wegtypen zijn hierbij buiten beschouwing gelaten. De tabel heeft een scrolfunctie. De verschillende wegbeheerders en bijbehorende scores kunnen worden gevonden door gebruik te maken van deze scrolfunctie.

scroltabel_gt(scores_waterschappen, title = "SPI Veilige Infrastructuur - Aanwezigheid van rijbaanscheiding, van wegbeherende waterschappen")
SPI Veilige Infrastructuur - Aanwezigheid van rijbaanscheiding, van wegbeherende waterschappen
Wegbeheerder soort Wegbeheerder Snelheidslimiet Score kenmerk Aanwezigheid rijbaanscheiding Score kenmerk naar wegvaklengte Score kenmerk naar weg- of straatlengte Totale wegvaklengte [km] Totale weglengte [km]
Waterschap HHS Hollands Noorderkwartier 80 8.3 [%] 12.3 [%] 14.6 [%] 5.0 3.9
Waterschap HHS Hollands Noorderkwartier Totaal 8.3 [%] 12.3 [%] 14.6 [%] 5.0 3.9
Waterschap HHS Schieland en de Krimpenerwaard 80 0.0 [%] 0.0 [%] 0.0 [%] 2.4 2.4
Waterschap HHS Schieland en de Krimpenerwaard Totaal 0.0 [%] 0.0 [%] 0.0 [%] 2.4 2.4
Waterschap Waterschap De Hollandse Delta 70 0.0 [%] 0.0 [%] 18.2 [%] 0.4 0.2
Waterschap Waterschap De Hollandse Delta 80 1.0 [%] 3.2 [%] 3.0 [%] 104.5 94.1
Waterschap Waterschap De Hollandse Delta Totaal 1.0 [%] 3.2 [%] 3.1 [%] 105.0 94.3
Waterschap Waterschap Rivierenland 80 0.0 [%] 0.0 [%] 0.4 [%] 19.4 19.0
Waterschap Waterschap Rivierenland 100 0.0 [%] 0.0 [%] 0.0 [%] 0.2 0.2
Waterschap Waterschap Rivierenland Totaal 0.0 [%] 0.0 [%] 0.4 [%] 19.6 19.1
Waterschap Waterschap Scheldestromen 70 0.0 [%] 0.0 [%] 0.0 [%] 0.2 0.2
Waterschap Waterschap Scheldestromen 80 0.0 [%] 0.0 [%] 0.0 [%] 163.4 160.5
Waterschap Waterschap Scheldestromen 100 0.0 [%] 0.0 [%] 0.0 [%] 0.4 0.4
Waterschap Waterschap Scheldestromen Totaal 0.0 [%] 0.0 [%] 0.0 [%] 164.1 161.2

6.2.3 Provincies

Hieronder worden de scores van provincies getoond. De getoonde cijfers hebben enkel betrekking op wegen onder beheer van de betreffende wegbeheerder. De tabel heeft een scrolfunctie. De verschillende wegbeheerders en bijbehorende scores kunnen worden gevonden door gebruik te maken van deze scrolfunctie.

scroltabel_gt(scores_provincies, title = "SPI Veilige Infrastructuur - Aanwezigheid van rijbaanscheiding, van provinciale wegbeheerders")
SPI Veilige Infrastructuur - Aanwezigheid van rijbaanscheiding, van provinciale wegbeheerders
Wegbeheerder soort Wegbeheerder Snelheidslimiet Score kenmerk Aanwezigheid rijbaanscheiding Score kenmerk naar wegvaklengte Score kenmerk naar weg- of straatlengte Totale wegvaklengte [km] Totale weglengte [km]
Provincie Drenthe 70 51.5 [%] 77.2 [%] 78.0 [%] 21.6 10.9
Provincie Drenthe 80 0.3 [%] 0.6 [%] 0.6 [%] 293.0 279.6
Provincie Drenthe 100 15.8 [%] 22.6 [%] 14.6 [%] 152.0 119.5
Provincie Drenthe Totaal 5.9 [%] 11.3 [%] 6.7 [%] 466.7 409.9
Provincie Flevoland 70 17.2 [%] 26.0 [%] 25.6 [%] 5.1 2.6
Provincie Flevoland 80 7.3 [%] 7.0 [%] 5.5 [%] 425.3 379.1
Provincie Flevoland 100 27.3 [%] 34.0 [%] 32.9 [%] 137.2 92.2
Provincie Flevoland Totaal 9.3 [%] 13.7 [%] 11.0 [%] 567.6 473.9
Provincie Friesland 70 22.6 [%] 41.8 [%] 55.7 [%] 26.9 15.9
Provincie Friesland 80 0.7 [%] 0.4 [%] 0.7 [%] 312.2 305.0
Provincie Friesland 100 24.5 [%] 40.4 [%] 29.2 [%] 205.2 149.6
Provincie Friesland Totaal 8.0 [%] 17.5 [%] 11.6 [%] 544.3 470.4
Provincie Gelderland 70 9.4 [%] 25.6 [%] 35.4 [%] 12.3 7.9
Provincie Gelderland 80 2.6 [%] 4.9 [%] 4.6 [%] 1008.6 903.9
Provincie Gelderland 100 28.6 [%] 46.2 [%] 37.5 [%] 96.5 64.2
Provincie Gelderland Totaal 3.5 [%] 8.7 [%] 7.0 [%] 1117.5 976.0
Provincie Groningen 70 41.6 [%] 49.1 [%] 48.3 [%] 45.9 26.0
Provincie Groningen 80 0.0 [%] 0.0 [%] 0.9 [%] 253.2 237.0
Provincie Groningen 100 5.8 [%] 8.8 [%] 6.2 [%] 113.4 89.7
Provincie Groningen Totaal 6.5 [%] 7.9 [%] 5.7 [%] 412.5 352.7
Provincie Limburg 70 23.1 [%] 49.9 [%] 62.7 [%] 3.5 2.0
Provincie Limburg 80 7.4 [%] 13.6 [%] 11.6 [%] 390.1 318.3
Provincie Limburg 100 52.6 [%] 72.5 [%] 72.6 [%] 77.4 38.7
Provincie Limburg Totaal 11.0 [%] 23.6 [%] 18.5 [%] 470.9 359.0
Provincie Noord-Brabant 70 28.6 [%] 60.7 [%] 59.9 [%] 7.8 4.2
Provincie Noord-Brabant 80 3.8 [%] 7.3 [%] 7.5 [%] 561.2 473.4
Provincie Noord-Brabant 100 47.4 [%] 73.7 [%] 77.7 [%] 40.7 20.4
Provincie Noord-Brabant Totaal 5.6 [%] 12.5 [%] 10.8 [%] 609.7 498.0
Provincie Noord-Holland 70 27.4 [%] 59.2 [%] 72.7 [%] 53.9 28.0
Provincie Noord-Holland 80 6.8 [%] 13.5 [%] 14.7 [%] 468.5 372.6
Provincie Noord-Holland 100 37.9 [%] 51.5 [%] 51.4 [%] 78.5 46.8
Provincie Noord-Holland Totaal 11.1 [%] 22.6 [%] 22.2 [%] 601.0 447.4
Provincie Overijssel 70 23.5 [%] 42.6 [%] 44.6 [%] 10.5 6.9
Provincie Overijssel 80 2.7 [%] 3.0 [%] 3.8 [%] 563.4 513.9
Provincie Overijssel 100 0.0 [%] 0.0 [%] 1.2 [%] 35.1 32.4
Provincie Overijssel Totaal 3.4 [%] 3.5 [%] 4.1 [%] 609.0 553.1
Provincie Utrecht 70 18.8 [%] 37.4 [%] 72.0 [%] 2.5 1.3
Provincie Utrecht 80 4.4 [%] 6.5 [%] 7.8 [%] 268.4 218.0
Provincie Utrecht 100 47.1 [%] 77.9 [%] 75.6 [%] 6.7 3.4
Provincie Utrecht Totaal 5.1 [%] 8.5 [%] 9.2 [%] 277.6 222.7
Provincie Zeeland 70 23.3 [%] 47.4 [%] 51.5 [%] 6.3 3.8
Provincie Zeeland 80 2.1 [%] 3.2 [%] 2.7 [%] 313.7 289.2
Provincie Zeeland 100 23.5 [%] 30.2 [%] 22.8 [%] 129.5 89.8
Provincie Zeeland Totaal 5.7 [%] 11.6 [%] 7.9 [%] 449.5 382.9
Provincie Zuid-Holland 70 37.9 [%] 72.2 [%] 79.2 [%] 7.9 4.0
Provincie Zuid-Holland 80 6.3 [%] 10.1 [%] 13.2 [%] 474.1 358.4
Provincie Zuid-Holland 100 0.0 [%] 0.0 [%] 0.0 [%] 2.0 1.0
Provincie Zuid-Holland Totaal 6.8 [%] 11.1 [%] 13.9 [%] 484.0 363.4

6.2.4 Gemeenten

scroltabel_gt(scores_gemeenten, title = "SPI Veilige Infrastructuur - Aanwezigheid van rijbaanscheiding, van gemeentelijke wegbeheerders")
SPI Veilige Infrastructuur - Aanwezigheid van rijbaanscheiding, van gemeentelijke wegbeheerders
Wegbeheerder soort Wegbeheerder Snelheidslimiet Score kenmerk Aanwezigheid rijbaanscheiding Score kenmerk naar wegvaklengte Score kenmerk naar weg- of straatlengte Totale wegvaklengte [km] Totale weglengte [km]
Gemeente 's-Gravenhage 70 5.6 [%] 0.8 [%] 23.9 [%] 14.4 7.9
Gemeente 's-Gravenhage 80 0.0 [%] 0.0 [%] 0.0 [%] 0.0 0.0
Gemeente 's-Gravenhage 100 0.0 [%] 0.0 [%] 0.0 [%] 0.0 0.0
Gemeente 's-Gravenhage Totaal 5.3 [%] 0.8 [%] 23.9 [%] 14.4 7.9
Gemeente 's-Hertogenbosch 70 16.7 [%] 45.1 [%] 47.9 [%] 3.4 2.1
Gemeente 's-Hertogenbosch 80 6.1 [%] 9.0 [%] 22.0 [%] 18.6 13.2
Gemeente 's-Hertogenbosch Totaal 7.7 [%] 14.6 [%] 25.6 [%] 22.0 15.3
Gemeente Aa en Hunze 70 0.0 [%] 0.0 [%] 0.0 [%] 0.8 0.8
Gemeente Aa en Hunze 80 0.0 [%] 0.0 [%] 0.0 [%] 85.0 85.0
Gemeente Aa en Hunze Totaal 0.0 [%] 0.0 [%] 0.0 [%] 85.8 85.8
Gemeente Aalsmeer 80 0.0 [%] 0.0 [%] 0.0 [%] 0.6 0.6
Gemeente Aalsmeer Totaal 0.0 [%] 0.0 [%] 0.0 [%] 0.6 0.6
Gemeente Aalten 70 0.0 [%] 0.0 [%] 0.0 [%] 0.0 0.0
Gemeente Aalten 80 0.0 [%] 0.0 [%] 0.0 [%] 1.6 1.6
Gemeente Aalten Totaal 0.0 [%] 0.0 [%] 0.0 [%] 1.7 1.7
Gemeente Achtkarspelen 70 0.0 [%] 0.0 [%] 0.0 [%] 0.6 0.6
Gemeente Achtkarspelen 80 0.0 [%] 0.0 [%] 0.0 [%] 14.0 13.2
Gemeente Achtkarspelen Totaal 0.0 [%] 0.0 [%] 0.0 [%] 14.6 13.8
Gemeente Alblasserdam 80 0.0 [%] 0.0 [%] 9.7 [%] 1.3 0.9
Gemeente Alblasserdam Totaal 0.0 [%] 0.0 [%] 9.7 [%] 1.3 0.9
Gemeente Albrandswaard 80 25.0 [%] 42.7 [%] 63.1 [%] 0.7 0.4
Gemeente Albrandswaard Totaal 25.0 [%] 42.7 [%] 63.1 [%] 0.7 0.4
Gemeente Alkmaar 70 19.4 [%] 64.6 [%] 63.8 [%] 5.1 2.5
Gemeente Alkmaar 80 0.0 [%] 0.0 [%] 0.0 [%] 2.1 2.0
Gemeente Alkmaar Totaal 14.3 [%] 45.4 [%] 35.5 [%] 7.2 4.5
Gemeente Almelo 70 16.3 [%] 30.1 [%] 30.9 [%] 17.4 12.0
Gemeente Almelo 80 1.8 [%] 0.6 [%] 8.8 [%] 38.3 33.8
Gemeente Almelo 100 0.0 [%] 0.0 [%] 7.3 [%] 2.3 2.1
Gemeente Almelo Totaal 8.3 [%] 9.4 [%] 14.2 [%] 58.0 47.9
Gemeente Almere 80 0.0 [%] 0.0 [%] 1.8 [%] 7.1 6.3
Gemeente Almere Totaal 0.0 [%] 0.0 [%] 1.8 [%] 7.1 6.3
Gemeente Alphen aan den Rijn 70 11.3 [%] 24.6 [%] 43.7 [%] 7.8 5.1
Gemeente Alphen aan den Rijn 80 0.0 [%] 0.0 [%] 4.9 [%] 0.8 0.6
Gemeente Alphen aan den Rijn Totaal 10.3 [%] 22.4 [%] 39.8 [%] 8.6 5.6
Gemeente Alphen-Chaam 80 0.0 [%] 0.0 [%] 0.0 [%] 2.4 2.4
Gemeente Alphen-Chaam Totaal 0.0 [%] 0.0 [%] 0.0 [%] 2.4 2.4
Gemeente Altena 80 3.9 [%] 1.0 [%] 0.5 [%] 8.6 8.4
Gemeente Altena Totaal 3.9 [%] 1.0 [%] 0.5 [%] 8.6 8.4
Gemeente Ameland 80 0.0 [%] 0.0 [%] 0.0 [%] 10.9 10.9
Gemeente Ameland Totaal 0.0 [%] 0.0 [%] 0.0 [%] 10.9 10.9
Gemeente Amersfoort 70 22.4 [%] 60.3 [%] 74.6 [%] 16.4 8.8
Gemeente Amersfoort 80 6.3 [%] 20.1 [%] 18.3 [%] 11.0 8.2
Gemeente Amersfoort Totaal 16.1 [%] 44.2 [%] 47.5 [%] 27.4 17.0
Gemeente Amstelveen 80 0.0 [%] 0.0 [%] 0.0 [%] 3.5 3.3
Gemeente Amstelveen Totaal 0.0 [%] 0.0 [%] 0.0 [%] 3.5 3.3
Gemeente Amsterdam 70 24.0 [%] 42.7 [%] 44.8 [%] 42.1 23.4
Gemeente Amsterdam 80 0.0 [%] 0.0 [%] 0.0 [%] 2.4 2.3
Gemeente Amsterdam 100 0.0 [%] 0.0 [%] 18.0 [%] 0.5 0.3
Gemeente Amsterdam Totaal 21.0 [%] 40.0 [%] 40.5 [%] 44.9 26.0
Gemeente Apeldoorn 80 4.0 [%] 19.1 [%] 13.7 [%] 22.4 16.6
Gemeente Apeldoorn Totaal 4.0 [%] 19.1 [%] 13.7 [%] 22.4 16.6
Gemeente Arnhem 70 45.5 [%] 76.9 [%] 80.8 [%] 7.5 3.9
Gemeente Arnhem 80 1.7 [%] 1.1 [%] 3.9 [%] 5.7 4.8
Gemeente Arnhem 100 0.0 [%] 0.0 [%] 0.0 [%] 0.3 0.3
Gemeente Arnhem Totaal 13.6 [%] 43.3 [%] 37.2 [%] 13.5 9.0
Gemeente Assen 70 10.5 [%] 26.7 [%] 26.6 [%] 16.5 11.8
Gemeente Assen 80 2.1 [%] 0.3 [%] 3.9 [%] 8.1 6.4
Gemeente Assen Totaal 7.7 [%] 18.0 [%] 18.6 [%] 24.6 18.2
Gemeente Asten 80 0.0 [%] 0.0 [%] 2.4 [%] 5.8 5.3
Gemeente Asten Totaal 0.0 [%] 0.0 [%] 2.4 [%] 5.8 5.3
Gemeente Baarle-Nassau 80 0.0 [%] 0.0 [%] 0.0 [%] 0.0 0.0
Gemeente Baarle-Nassau Totaal 0.0 [%] 0.0 [%] 0.0 [%] 0.0 0.0
Gemeente Baarn 80 14.3 [%] 2.9 [%] 5.1 [%] 3.7 3.4
Gemeente Baarn Totaal 14.3 [%] 2.9 [%] 5.1 [%] 3.7 3.4
Gemeente Barendrecht 70 24.4 [%] 47.2 [%] 39.7 [%] 15.0 10.2
Gemeente Barendrecht 80 0.0 [%] 0.0 [%] 0.0 [%] 0.8 0.7
Gemeente Barendrecht Totaal 23.5 [%] 44.8 [%] 37.3 [%] 15.8 10.9
Gemeente Barneveld 80 0.0 [%] 0.0 [%] 0.3 [%] 23.4 22.9
Gemeente Barneveld Totaal 0.0 [%] 0.0 [%] 0.3 [%] 23.4 22.9
Gemeente Beek 80 0.0 [%] 0.0 [%] 2.1 [%] 7.7 7.2
Gemeente Beek Totaal 0.0 [%] 0.0 [%] 2.1 [%] 7.7 7.2
Gemeente Beekdaelen 80 1.4 [%] 0.2 [%] 0.2 [%] 33.3 33.0
Gemeente Beekdaelen 100 0.0 [%] 0.0 [%] 0.0 [%] 0.4 0.4
Gemeente Beekdaelen Totaal 1.4 [%] 0.2 [%] 0.2 [%] 33.6 33.4
Gemeente Beesel 80 1.2 [%] 0.7 [%] 0.4 [%] 38.0 37.9
Gemeente Beesel Totaal 1.2 [%] 0.7 [%] 0.4 [%] 38.0 37.9
Gemeente Berg en Dal 80 0.0 [%] 0.0 [%] 0.0 [%] 9.5 9.5
Gemeente Berg en Dal Totaal 0.0 [%] 0.0 [%] 0.0 [%] 9.5 9.5
Gemeente Bergeijk 70 0.0 [%] 0.0 [%] 0.0 [%] 0.0 0.0
Gemeente Bergeijk 80 0.0 [%] 0.0 [%] 0.0 [%] 7.5 7.5
Gemeente Bergeijk Totaal 0.0 [%] 0.0 [%] 0.0 [%] 7.6 7.6
Gemeente Bergen (L) 70 0.0 [%] 0.0 [%] 0.0 [%] 0.8 0.8
Gemeente Bergen (L) 80 0.0 [%] 0.0 [%] 0.0 [%] 46.5 46.5
Gemeente Bergen (L) Totaal 0.0 [%] 0.0 [%] 0.0 [%] 47.3 47.3
Gemeente Bergen (NH) 80 0.0 [%] 0.0 [%] 5.2 [%] 4.3 3.8
Gemeente Bergen (NH) Totaal 0.0 [%] 0.0 [%] 5.2 [%] 4.3 3.8
Gemeente Bergen op Zoom 70 33.3 [%] 79.3 [%] 78.9 [%] 4.3 2.2
Gemeente Bergen op Zoom 80 7.9 [%] 18.2 [%] 19.2 [%] 15.8 12.8
Gemeente Bergen op Zoom Totaal 14.9 [%] 31.3 [%] 27.9 [%] 20.1 14.9
Gemeente Berkelland 80 0.0 [%] 0.0 [%] 0.0 [%] 15.0 15.0
Gemeente Berkelland Totaal 0.0 [%] 0.0 [%] 0.0 [%] 15.0 15.0
Gemeente Bernheze 80 0.0 [%] 0.0 [%] 2.6 [%] 4.1 3.7
Gemeente Bernheze Totaal 0.0 [%] 0.0 [%] 2.6 [%] 4.1 3.7
Gemeente Best 70 0.0 [%] 0.0 [%] 0.0 [%] 0.0 0.0
Gemeente Best 80 5.3 [%] 23.8 [%] 15.0 [%] 9.4 7.4
Gemeente Best Totaal 5.1 [%] 23.8 [%] 15.0 [%] 9.4 7.4
Gemeente Beuningen 80 0.0 [%] 0.0 [%] 12.7 [%] 4.0 2.8
Gemeente Beuningen Totaal 0.0 [%] 0.0 [%] 12.7 [%] 4.0 2.8
Gemeente Beverwijk 80 0.0 [%] 0.0 [%] 0.0 [%] 3.7 3.7
Gemeente Beverwijk Totaal 0.0 [%] 0.0 [%] 0.0 [%] 3.7 3.7
Gemeente Bladel 80 0.0 [%] 0.0 [%] 0.0 [%] 0.3 0.2
Gemeente Bladel Totaal 0.0 [%] 0.0 [%] 0.0 [%] 0.3 0.2
Gemeente Blaricum 80 0.0 [%] 0.0 [%] 0.0 [%] 0.2 0.2
Gemeente Blaricum Totaal 0.0 [%] 0.0 [%] 0.0 [%] 0.2 0.2
Gemeente Bodegraven-Reeuwijk 80 0.0 [%] 0.0 [%] 0.5 [%] 3.4 3.3
Gemeente Bodegraven-Reeuwijk Totaal 0.0 [%] 0.0 [%] 0.5 [%] 3.4 3.3
Gemeente Boekel 80 0.0 [%] 0.0 [%] 0.0 [%] 0.3 0.3
Gemeente Boekel Totaal 0.0 [%] 0.0 [%] 0.0 [%] 0.3 0.3
Gemeente Borger-Odoorn 70 0.0 [%] 0.0 [%] 0.0 [%] 1.2 1.2
Gemeente Borger-Odoorn 80 0.0 [%] 0.0 [%] 0.0 [%] 24.0 24.0
Gemeente Borger-Odoorn Totaal 0.0 [%] 0.0 [%] 0.0 [%] 25.3 25.3
Gemeente Borne 80 3.8 [%] 10.0 [%] 10.9 [%] 6.1 4.8
Gemeente Borne Totaal 3.8 [%] 10.0 [%] 10.9 [%] 6.1 4.8
Gemeente Borsele 80 0.0 [%] 0.0 [%] 0.0 [%] 1.4 1.4
Gemeente Borsele Totaal 0.0 [%] 0.0 [%] 0.0 [%] 1.4 1.4
Gemeente Boxtel 80 3.1 [%] 5.9 [%] 12.0 [%] 6.3 4.8
Gemeente Boxtel 100 0.0 [%] 0.0 [%] 0.0 [%] 0.0 0.0
Gemeente Boxtel Totaal 3.0 [%] 5.9 [%] 12.0 [%] 6.3 4.9
Gemeente Breda 70 29.5 [%] 58.4 [%] 61.0 [%] 40.1 23.0
Gemeente Breda 80 4.8 [%] 2.3 [%] 1.2 [%] 10.7 10.2
Gemeente Breda 100 0.0 [%] 0.0 [%] 0.0 [%] 0.1 0.1
Gemeente Breda Totaal 25.6 [%] 46.5 [%] 42.4 [%] 50.9 33.3
Gemeente Bronckhorst 80 0.0 [%] 0.0 [%] 0.0 [%] 9.8 9.8
Gemeente Bronckhorst Totaal 0.0 [%] 0.0 [%] 0.0 [%] 9.8 9.8
Gemeente Brummen 80 0.0 [%] 0.0 [%] 0.6 [%] 8.2 8.0
Gemeente Brummen Totaal 0.0 [%] 0.0 [%] 0.6 [%] 8.2 8.0
Gemeente Brunssum 80 0.0 [%] 0.0 [%] 0.0 [%] 3.3 3.2
Gemeente Brunssum Totaal 0.0 [%] 0.0 [%] 0.0 [%] 3.3 3.2
Gemeente Bunnik 80 3.8 [%] 4.4 [%] 2.5 [%] 3.2 2.6
Gemeente Bunnik Totaal 3.8 [%] 4.4 [%] 2.5 [%] 3.2 2.6
Gemeente Bunschoten 80 0.0 [%] 0.0 [%] 0.0 [%] 1.5 1.5
Gemeente Bunschoten Totaal 0.0 [%] 0.0 [%] 0.0 [%] 1.5 1.5
Gemeente Buren 80 0.0 [%] 0.0 [%] 0.0 [%] 0.9 0.9
Gemeente Buren Totaal 0.0 [%] 0.0 [%] 0.0 [%] 0.9 0.9
Gemeente Capelle aan den IJssel 70 22.2 [%] 42.5 [%] 49.8 [%] 3.7 1.9
Gemeente Capelle aan den IJssel Totaal 22.2 [%] 42.5 [%] 49.8 [%] 3.7 1.9
Gemeente Castricum 80 0.0 [%] 0.0 [%] 8.9 [%] 0.3 0.2
Gemeente Castricum Totaal 0.0 [%] 0.0 [%] 8.9 [%] 0.3 0.2
Gemeente Coevorden 70 0.0 [%] 0.0 [%] 0.0 [%] 0.1 0.1
Gemeente Coevorden 80 0.0 [%] 0.0 [%] 0.0 [%] 276.2 260.9
Gemeente Coevorden Totaal 0.0 [%] 0.0 [%] 0.0 [%] 276.3 261.0
Gemeente Cranendonck 80 0.0 [%] 0.0 [%] 1.0 [%] 14.8 14.5
Gemeente Cranendonck Totaal 0.0 [%] 0.0 [%] 1.0 [%] 14.8 14.5
Gemeente Culemborg 80 0.0 [%] 0.0 [%] 7.4 [%] 1.1 0.8
Gemeente Culemborg Totaal 0.0 [%] 0.0 [%] 7.4 [%] 1.1 0.8
Gemeente Dalfsen 70 0.0 [%] 0.0 [%] 0.0 [%] 0.0 0.0
Gemeente Dalfsen 80 0.0 [%] 0.0 [%] 0.6 [%] 20.3 19.9
Gemeente Dalfsen Totaal 0.0 [%] 0.0 [%] 0.6 [%] 20.3 19.9
Gemeente Dantumadiel 80 0.0 [%] 0.0 [%] 0.0 [%] 8.3 8.3
Gemeente Dantumadiel Totaal 0.0 [%] 0.0 [%] 0.0 [%] 8.3 8.3
Gemeente De Bilt 80 20.0 [%] 30.5 [%] 27.4 [%] 4.1 3.1
Gemeente De Bilt Totaal 20.0 [%] 30.5 [%] 27.4 [%] 4.1 3.1
Gemeente De Fryske Marren 70 0.0 [%] 0.0 [%] 0.0 [%] 0.2 0.2
Gemeente De Fryske Marren 80 0.0 [%] 0.0 [%] 0.0 [%] 60.8 60.7
Gemeente De Fryske Marren 100 0.0 [%] 0.0 [%] 0.0 [%] 0.1 0.1
Gemeente De Fryske Marren Totaal 0.0 [%] 0.0 [%] 0.0 [%] 61.2 61.0
Gemeente De Ronde Venen 80 0.0 [%] 0.0 [%] 0.1 [%] 9.2 9.1
Gemeente De Ronde Venen Totaal 0.0 [%] 0.0 [%] 0.1 [%] 9.2 9.1
Gemeente De Wolden 80 0.0 [%] 0.0 [%] 0.0 [%] 26.7 26.7
Gemeente De Wolden Totaal 0.0 [%] 0.0 [%] 0.0 [%] 26.7 26.7
Gemeente Delft 70 50.0 [%] 47.9 [%] 85.3 [%] 3.9 2.0
Gemeente Delft 80 0.0 [%] 0.0 [%] 0.0 [%] 3.3 3.3
Gemeente Delft 100 0.0 [%] 0.0 [%] 0.0 [%] 0.0 0.0
Gemeente Delft Totaal 17.4 [%] 26.0 [%] 31.8 [%] 7.2 5.2
Gemeente Den Helder 70 0.0 [%] 0.0 [%] 0.0 [%] 3.1 3.1
Gemeente Den Helder 80 0.0 [%] 0.0 [%] 0.0 [%] 1.7 1.7
Gemeente Den Helder Totaal 0.0 [%] 0.0 [%] 0.0 [%] 4.8 4.8
Gemeente Deurne 80 0.0 [%] 0.0 [%] 0.3 [%] 27.5 26.9
Gemeente Deurne Totaal 0.0 [%] 0.0 [%] 0.3 [%] 27.5 26.9
Gemeente Deventer 80 2.9 [%] 0.8 [%] 0.9 [%] 5.6 5.5
Gemeente Deventer Totaal 2.9 [%] 0.8 [%] 0.9 [%] 5.6 5.5
Gemeente Diemen 70 14.0 [%] 32.0 [%] 39.1 [%] 14.7 8.9
Gemeente Diemen Totaal 14.0 [%] 32.0 [%] 39.1 [%] 14.7 8.9
Gemeente Dijk en Waard 70 0.0 [%] 0.0 [%] 0.0 [%] 1.2 1.2
Gemeente Dijk en Waard 80 2.6 [%] 1.0 [%] 7.2 [%] 4.0 3.3
Gemeente Dijk en Waard Totaal 2.3 [%] 0.7 [%] 5.3 [%] 5.2 4.5
Gemeente Dinkelland 70 19.4 [%] 59.4 [%] 84.3 [%] 7.3 3.7
Gemeente Dinkelland 80 0.0 [%] 0.0 [%] 0.0 [%] 3.6 3.6
Gemeente Dinkelland Totaal 11.9 [%] 39.9 [%] 43.0 [%] 10.8 7.3
Gemeente Doesburg 80 0.0 [%] 0.0 [%] 0.0 [%] 0.0 0.0
Gemeente Doesburg Totaal 0.0 [%] 0.0 [%] 0.0 [%] 0.0 0.0
Gemeente Doetinchem 70 11.1 [%] 21.5 [%] 26.0 [%] 1.7 1.1
Gemeente Doetinchem 80 0.0 [%] 0.0 [%] 0.0 [%] 9.7 9.6
Gemeente Doetinchem Totaal 3.7 [%] 3.2 [%] 2.7 [%] 11.4 10.7
Gemeente Dongen 80 7.3 [%] 2.7 [%] 2.0 [%] 9.4 8.9
Gemeente Dongen Totaal 7.3 [%] 2.7 [%] 2.0 [%] 9.4 8.9
Gemeente Dordrecht 80 0.0 [%] 0.0 [%] 0.0 [%] 2.0 2.0
Gemeente Dordrecht Totaal 0.0 [%] 0.0 [%] 0.0 [%] 2.0 2.0
Gemeente Drechterland 80 0.0 [%] 0.0 [%] 0.0 [%] 1.2 1.0
Gemeente Drechterland Totaal 0.0 [%] 0.0 [%] 0.0 [%] 1.2 1.0
Gemeente Drimmelen 80 1.6 [%] 1.0 [%] 3.6 [%] 9.6 9.0
Gemeente Drimmelen Totaal 1.6 [%] 1.0 [%] 3.6 [%] 9.6 9.0
Gemeente Dronten 80 0.0 [%] 0.0 [%] 0.0 [%] 231.5 231.3
Gemeente Dronten Totaal 0.0 [%] 0.0 [%] 0.0 [%] 231.5 231.3
Gemeente Druten 80 0.0 [%] 0.0 [%] 0.2 [%] 4.7 4.5
Gemeente Druten Totaal 0.0 [%] 0.0 [%] 0.2 [%] 4.7 4.5
Gemeente Duiven 80 2.2 [%] 0.9 [%] 2.9 [%] 4.5 3.6
Gemeente Duiven Totaal 2.2 [%] 0.9 [%] 2.9 [%] 4.5 3.6
Gemeente Echt-Susteren 80 0.0 [%] 0.0 [%] 0.0 [%] 7.0 7.0
Gemeente Echt-Susteren 100 0.0 [%] 0.0 [%] 0.0 [%] 0.1 0.1
Gemeente Echt-Susteren Totaal 0.0 [%] 0.0 [%] 0.0 [%] 7.1 7.1
Gemeente Ede 70 0.0 [%] 0.0 [%] 0.0 [%] 1.2 1.2
Gemeente Ede 80 0.0 [%] 0.0 [%] 0.0 [%] 19.3 19.1
Gemeente Ede Totaal 0.0 [%] 0.0 [%] 0.0 [%] 20.5 20.3
Gemeente Eemnes 80 0.0 [%] 0.0 [%] 21.6 [%] 1.1 0.6
Gemeente Eemnes 100 0.0 [%] 0.0 [%] 0.0 [%] 0.4 0.2
Gemeente Eemnes Totaal 0.0 [%] 0.0 [%] 15.4 [%] 1.6 0.8
Gemeente Eemsdelta 80 0.0 [%] 0.0 [%] 1.8 [%] 1.9 1.9
Gemeente Eemsdelta Totaal 0.0 [%] 0.0 [%] 1.8 [%] 1.9 1.9
Gemeente Eersel 80 0.0 [%] 0.0 [%] 0.0 [%] 1.0 0.7
Gemeente Eersel Totaal 0.0 [%] 0.0 [%] 0.0 [%] 1.0 0.7
Gemeente Eijsden-Margraten 80 0.0 [%] 0.0 [%] 0.0 [%] 3.8 3.8
Gemeente Eijsden-Margraten 100 0.0 [%] 0.0 [%] 0.0 [%] 0.1 0.1
Gemeente Eijsden-Margraten Totaal 0.0 [%] 0.0 [%] 0.0 [%] 3.9 3.9
Gemeente Eindhoven 70 22.4 [%] 52.7 [%] 56.3 [%] 46.4 24.1
Gemeente Eindhoven 80 11.8 [%] 26.6 [%] 19.9 [%] 15.5 11.7
Gemeente Eindhoven Totaal 19.8 [%] 46.1 [%] 44.4 [%] 61.8 35.8
Gemeente Elburg 80 0.0 [%] 0.0 [%] 0.0 [%] 0.2 0.2
Gemeente Elburg Totaal 0.0 [%] 0.0 [%] 0.0 [%] 0.2 0.2
Gemeente Emmen 70 0.0 [%] 0.0 [%] 0.0 [%] 1.0 1.0
Gemeente Emmen 80 0.0 [%] 0.0 [%] 0.1 [%] 45.1 44.5
Gemeente Emmen Totaal 0.0 [%] 0.0 [%] 0.1 [%] 46.1 45.5
Gemeente Enschede 70 21.4 [%] 60.2 [%] 78.8 [%] 3.9 2.0
Gemeente Enschede 80 2.0 [%] 0.3 [%] 0.9 [%] 18.9 18.1
Gemeente Enschede 100 28.6 [%] 34.2 [%] 25.6 [%] 3.6 2.4
Gemeente Enschede Totaal 5.9 [%] 13.8 [%] 10.4 [%] 26.4 22.4
Gemeente Epe 80 0.0 [%] 0.0 [%] 3.0 [%] 3.3 3.1
Gemeente Epe Totaal 0.0 [%] 0.0 [%] 3.0 [%] 3.3 3.1
Gemeente Ermelo 70 0.0 [%] 0.0 [%] 0.0 [%] 0.5 0.5
Gemeente Ermelo 80 7.4 [%] 1.6 [%] 2.5 [%] 7.6 7.3
Gemeente Ermelo Totaal 6.7 [%] 1.5 [%] 2.3 [%] 8.1 7.8
Gemeente Etten-Leur 80 0.0 [%] 0.0 [%] 18.8 [%] 1.3 1.0
Gemeente Etten-Leur Totaal 0.0 [%] 0.0 [%] 18.8 [%] 1.3 1.0
Gemeente Geertruidenberg 80 0.0 [%] 0.0 [%] 0.0 [%] 4.7 4.7
Gemeente Geertruidenberg Totaal 0.0 [%] 0.0 [%] 0.0 [%] 4.7 4.7
Gemeente Geldrop-Mierlo 80 0.0 [%] 0.0 [%] 0.3 [%] 3.4 3.2
Gemeente Geldrop-Mierlo Totaal 0.0 [%] 0.0 [%] 0.3 [%] 3.4 3.2
Gemeente Gemert-Bakel 80 1.4 [%] 0.8 [%] 0.4 [%] 36.8 34.8
Gemeente Gemert-Bakel Totaal 1.4 [%] 0.8 [%] 0.4 [%] 36.8 34.8
Gemeente Gennep 80 0.0 [%] 0.0 [%] 0.0 [%] 41.0 41.0
Gemeente Gennep Totaal 0.0 [%] 0.0 [%] 0.0 [%] 41.0 41.0
Gemeente Gilze en Rijen 80 0.0 [%] 0.0 [%] 10.6 [%] 0.9 0.8
Gemeente Gilze en Rijen Totaal 0.0 [%] 0.0 [%] 10.6 [%] 0.9 0.8
Gemeente Goeree-Overflakkee 70 0.0 [%] 0.0 [%] 0.0 [%] 0.0 0.0
Gemeente Goeree-Overflakkee 80 0.0 [%] 0.0 [%] 0.0 [%] 3.2 1.8
Gemeente Goeree-Overflakkee Totaal 0.0 [%] 0.0 [%] 0.0 [%] 3.2 1.8
Gemeente Goes 70 0.0 [%] 0.0 [%] 0.0 [%] 0.1 0.1
Gemeente Goes 80 0.0 [%] 0.0 [%] 6.5 [%] 2.1 1.3
Gemeente Goes Totaal 0.0 [%] 0.0 [%] 6.1 [%] 2.2 1.4
Gemeente Goirle 80 0.0 [%] 0.0 [%] 1.0 [%] 8.9 8.4
Gemeente Goirle Totaal 0.0 [%] 0.0 [%] 1.0 [%] 8.9 8.4
Gemeente Gooise Meren 80 4.2 [%] 4.4 [%] 2.4 [%] 10.9 9.4
Gemeente Gooise Meren Totaal 4.2 [%] 4.4 [%] 2.4 [%] 10.9 9.4
Gemeente Gorinchem 80 0.0 [%] 0.0 [%] 0.0 [%] 0.9 0.9
Gemeente Gorinchem Totaal 0.0 [%] 0.0 [%] 0.0 [%] 0.9 0.9
Gemeente Gouda 80 0.0 [%] 0.0 [%] 0.0 [%] 0.2 0.2
Gemeente Gouda Totaal 0.0 [%] 0.0 [%] 0.0 [%] 0.2 0.2
Gemeente Groningen 70 4.0 [%] 0.2 [%] 0.1 [%] 7.7 7.7
Gemeente Groningen 80 0.0 [%] 0.0 [%] 0.0 [%] 2.9 2.9
Gemeente Groningen Totaal 2.9 [%] 0.2 [%] 0.1 [%] 10.6 10.6
Gemeente Gulpen-Wittem 80 0.0 [%] 0.0 [%] 0.0 [%] 11.5 11.5
Gemeente Gulpen-Wittem Totaal 0.0 [%] 0.0 [%] 0.0 [%] 11.5 11.5
Gemeente Haaksbergen 70 0.0 [%] 0.0 [%] 4.2 [%] 6.3 5.6
Gemeente Haaksbergen 80 0.0 [%] 0.0 [%] 0.0 [%] 8.6 8.6
Gemeente Haaksbergen Totaal 0.0 [%] 0.0 [%] 1.6 [%] 14.9 14.2
Gemeente Haarlem 70 10.0 [%] 76.2 [%] 70.5 [%] 1.4 0.8
Gemeente Haarlem 80 0.0 [%] 0.0 [%] 0.0 [%] 0.0 0.0
Gemeente Haarlem Totaal 9.5 [%] 73.9 [%] 66.6 [%] 1.5 0.8
Gemeente Haarlemmermeer 70 17.1 [%] 28.7 [%] 37.2 [%] 8.8 5.6
Gemeente Haarlemmermeer 80 1.8 [%] 3.7 [%] 5.9 [%] 24.0 20.1
Gemeente Haarlemmermeer 100 0.0 [%] 0.0 [%] 0.0 [%] 0.2 0.2
Gemeente Haarlemmermeer Totaal 5.2 [%] 10.4 [%] 12.6 [%] 33.0 25.9
Gemeente Halderberge 70 33.3 [%] 71.3 [%] 85.8 [%] 1.8 0.9
Gemeente Halderberge 80 0.0 [%] 0.0 [%] 0.0 [%] 9.2 9.2
Gemeente Halderberge 100 0.0 [%] 0.0 [%] 0.0 [%] 2.0 2.0
Gemeente Halderberge Totaal 7.8 [%] 9.8 [%] 6.4 [%] 13.0 12.1
Gemeente Hardenberg 70 0.0 [%] 0.0 [%] 0.0 [%] 1.5 1.5
Gemeente Hardenberg 80 0.0 [%] 0.0 [%] 2.4 [%] 15.6 15.1
Gemeente Hardenberg Totaal 0.0 [%] 0.0 [%] 2.2 [%] 17.1 16.6
Gemeente Harderwijk 80 5.3 [%] 4.0 [%] 2.5 [%] 13.7 13.1
Gemeente Harderwijk Totaal 5.3 [%] 4.0 [%] 2.5 [%] 13.7 13.1
Gemeente Harlingen 80 0.0 [%] 0.0 [%] 0.0 [%] 3.4 2.3
Gemeente Harlingen Totaal 0.0 [%] 0.0 [%] 0.0 [%] 3.4 2.3
Gemeente Hattem 80 0.0 [%] 0.0 [%] 6.2 [%] 3.3 3.1
Gemeente Hattem Totaal 0.0 [%] 0.0 [%] 6.2 [%] 3.3 3.1
Gemeente Heemskerk 80 0.0 [%] 0.0 [%] 0.0 [%] 0.7 0.7
Gemeente Heemskerk Totaal 0.0 [%] 0.0 [%] 0.0 [%] 0.7 0.7
Gemeente Heemstede 80 100.0 [%] 100.0 [%] 100.2 [%] 0.2 0.1
Gemeente Heemstede Totaal 100.0 [%] 100.0 [%] 100.2 [%] 0.2 0.1
Gemeente Heerde 80 3.2 [%] 1.6 [%] 0.8 [%] 6.2 6.1
Gemeente Heerde Totaal 3.2 [%] 1.6 [%] 0.8 [%] 6.2 6.1
Gemeente Heerenveen 80 0.0 [%] 0.0 [%] 0.0 [%] 13.5 10.9
Gemeente Heerenveen Totaal 0.0 [%] 0.0 [%] 0.0 [%] 13.5 10.9
Gemeente Heerlen 70 26.3 [%] 44.3 [%] 42.0 [%] 13.6 9.0
Gemeente Heerlen 80 5.9 [%] 4.7 [%] 3.5 [%] 6.1 4.8
Gemeente Heerlen 100 0.0 [%] 0.0 [%] 0.0 [%] 0.1 0.1
Gemeente Heerlen Totaal 16.2 [%] 32.0 [%] 28.5 [%] 19.7 13.9
Gemeente Heeze-Leende 70 0.0 [%] 0.0 [%] 0.0 [%] 0.1 0.1
Gemeente Heeze-Leende 80 0.0 [%] 0.0 [%] 0.0 [%] 7.7 7.7
Gemeente Heeze-Leende Totaal 0.0 [%] 0.0 [%] 0.0 [%] 7.7 7.7
Gemeente Hellendoorn 80 0.0 [%] 0.0 [%] 0.6 [%] 21.0 20.1
Gemeente Hellendoorn Totaal 0.0 [%] 0.0 [%] 0.6 [%] 21.0 20.1
Gemeente Helmond 70 19.1 [%] 68.3 [%] 61.1 [%] 9.4 5.4
Gemeente Helmond 80 0.0 [%] 0.0 [%] 2.8 [%] 12.9 11.8
Gemeente Helmond 100 0.0 [%] 0.0 [%] 0.0 [%] 3.9 2.0
Gemeente Helmond Totaal 6.9 [%] 24.5 [%] 18.9 [%] 26.3 19.2
Gemeente Hengelo (O) 80 12.5 [%] 20.2 [%] 10.9 [%] 2.5 2.2
Gemeente Hengelo (O) Totaal 12.5 [%] 20.2 [%] 10.9 [%] 2.5 2.2
Gemeente Het Hogeland 70 0.0 [%] 0.0 [%] 0.0 [%] 0.0 0.0
Gemeente Het Hogeland 80 0.0 [%] 0.0 [%] 0.0 [%] 155.3 155.2
Gemeente Het Hogeland Totaal 0.0 [%] 0.0 [%] 0.0 [%] 155.3 155.2
Gemeente Heumen 80 0.0 [%] 0.0 [%] 0.0 [%] 1.9 1.9
Gemeente Heumen Totaal 0.0 [%] 0.0 [%] 0.0 [%] 1.9 1.9
Gemeente Heusden 70 0.0 [%] 0.0 [%] 6.2 [%] 3.9 3.6
Gemeente Heusden 80 2.7 [%] 2.9 [%] 1.5 [%] 11.0 10.6
Gemeente Heusden Totaal 2.0 [%] 2.2 [%] 2.7 [%] 14.9 14.2
Gemeente Hilvarenbeek 70 0.0 [%] 0.0 [%] 10.6 [%] 0.1 0.1
Gemeente Hilvarenbeek 80 15.6 [%] 37.4 [%] 35.9 [%] 2.9 1.8
Gemeente Hilvarenbeek 100 0.0 [%] 0.0 [%] 0.0 [%] 0.2 0.2
Gemeente Hilvarenbeek Totaal 14.3 [%] 33.2 [%] 30.8 [%] 3.2 2.2
Gemeente Hilversum 80 0.0 [%] 0.0 [%] 16.3 [%] 2.2 1.6
Gemeente Hilversum Totaal 0.0 [%] 0.0 [%] 16.3 [%] 2.2 1.6
Gemeente Hoeksche Waard 80 0.0 [%] 0.0 [%] 1.4 [%] 2.0 1.9
Gemeente Hoeksche Waard Totaal 0.0 [%] 0.0 [%] 1.4 [%] 2.0 1.9
Gemeente Hof van Twente 80 0.0 [%] 0.0 [%] 0.4 [%] 4.9 4.4
Gemeente Hof van Twente Totaal 0.0 [%] 0.0 [%] 0.4 [%] 4.9 4.4
Gemeente Hollands Kroon 80 0.0 [%] 0.0 [%] 0.1 [%] 19.0 18.9
Gemeente Hollands Kroon Totaal 0.0 [%] 0.0 [%] 0.1 [%] 19.0 18.9
Gemeente Hoogeveen 70 0.0 [%] 0.0 [%] 0.0 [%] 3.2 3.2
Gemeente Hoogeveen 80 0.0 [%] 0.0 [%] 0.0 [%] 0.9 0.9
Gemeente Hoogeveen Totaal 0.0 [%] 0.0 [%] 0.0 [%] 4.0 4.0
Gemeente Hoorn 70 22.9 [%] 54.7 [%] 58.7 [%] 9.4 5.5
Gemeente Hoorn 80 13.3 [%] 11.4 [%] 6.3 [%] 1.5 1.3
Gemeente Hoorn 100 0.0 [%] 0.0 [%] 0.0 [%] 0.1 0.1
Gemeente Hoorn Totaal 21.0 [%] 48.3 [%] 48.1 [%] 11.0 6.9
Gemeente Horst aan de Maas 80 0.0 [%] 0.0 [%] 0.0 [%] 34.5 34.3
Gemeente Horst aan de Maas Totaal 0.0 [%] 0.0 [%] 0.0 [%] 34.5 34.3
Gemeente Houten 70 11.9 [%] 29.6 [%] 39.2 [%] 27.6 17.1
Gemeente Houten 80 0.0 [%] 0.0 [%] 0.0 [%] 2.1 2.1
Gemeente Houten Totaal 11.6 [%] 27.5 [%] 34.9 [%] 29.7 19.2
Gemeente Huizen 80 0.0 [%] 0.0 [%] 0.0 [%] 1.0 1.0
Gemeente Huizen Totaal 0.0 [%] 0.0 [%] 0.0 [%] 1.0 1.0
Gemeente Hulst 80 0.0 [%] 0.0 [%] 0.0 [%] 0.2 0.2
Gemeente Hulst Totaal 0.0 [%] 0.0 [%] 0.0 [%] 0.2 0.2
Gemeente IJsselstein 70 0.0 [%] 0.0 [%] 0.0 [%] 1.1 1.1
Gemeente IJsselstein 80 0.0 [%] 0.0 [%] 0.0 [%] 2.1 1.9
Gemeente IJsselstein Totaal 0.0 [%] 0.0 [%] 0.0 [%] 3.2 3.1
Gemeente Kaag en Braassem 80 3.3 [%] 0.3 [%] 0.3 [%] 6.2 6.0
Gemeente Kaag en Braassem 100 0.0 [%] 0.0 [%] 0.0 [%] 1.5 1.5
Gemeente Kaag en Braassem Totaal 3.2 [%] 0.2 [%] 0.2 [%] 7.8 7.6
Gemeente Kampen 80 0.0 [%] 0.0 [%] 1.6 [%] 1.2 1.0
Gemeente Kampen Totaal 0.0 [%] 0.0 [%] 1.6 [%] 1.2 1.0
Gemeente Kapelle 80 0.0 [%] 0.0 [%] 0.0 [%] 0.0 0.0
Gemeente Kapelle Totaal 0.0 [%] 0.0 [%] 0.0 [%] 0.0 0.0
Gemeente Katwijk 80 0.0 [%] 0.0 [%] 0.0 [%] 0.8 0.8
Gemeente Katwijk Totaal 0.0 [%] 0.0 [%] 0.0 [%] 0.8 0.8
Gemeente Kerkrade 70 8.3 [%] 22.1 [%] 24.6 [%] 2.8 2.1
Gemeente Kerkrade 80 0.0 [%] 0.0 [%] 1.0 [%] 4.7 4.1
Gemeente Kerkrade Totaal 4.1 [%] 8.3 [%] 9.0 [%] 7.4 6.3
Gemeente Koggenland 70 33.3 [%] 9.8 [%] 77.8 [%] 0.5 0.3
Gemeente Koggenland 80 11.8 [%] 3.0 [%] 1.6 [%] 2.3 2.2
Gemeente Koggenland 100 0.0 [%] 0.0 [%] 0.0 [%] 0.1 0.1
Gemeente Koggenland Totaal 14.3 [%] 4.1 [%] 9.1 [%] 2.9 2.5
Gemeente Krimpenerwaard 80 0.0 [%] 0.0 [%] 0.0 [%] 0.2 0.2
Gemeente Krimpenerwaard Totaal 0.0 [%] 0.0 [%] 0.0 [%] 0.2 0.2
Gemeente Laarbeek 80 0.0 [%] 0.0 [%] 0.0 [%] 8.5 8.5
Gemeente Laarbeek Totaal 0.0 [%] 0.0 [%] 0.0 [%] 8.5 8.5
Gemeente Land van Cuijk 70 0.0 [%] 0.0 [%] 75.1 [%] 0.4 0.2
Gemeente Land van Cuijk 80 1.4 [%] 0.9 [%] 0.9 [%] 40.5 37.8
Gemeente Land van Cuijk Totaal 1.3 [%] 0.9 [%] 1.3 [%] 41.0 38.0
Gemeente Landgraaf 70 50.0 [%] 64.6 [%] 62.8 [%] 3.3 1.7
Gemeente Landgraaf 80 3.8 [%] 3.9 [%] 2.0 [%] 3.8 3.6
Gemeente Landgraaf Totaal 10.0 [%] 32.3 [%] 21.0 [%] 7.1 5.3
Gemeente Landsmeer 80 0.0 [%] 0.0 [%] 2.3 [%] 1.7 1.6
Gemeente Landsmeer Totaal 0.0 [%] 0.0 [%] 2.3 [%] 1.7 1.6
Gemeente Lansingerland 80 0.0 [%] 0.0 [%] 0.0 [%] 5.7 5.6
Gemeente Lansingerland Totaal 0.0 [%] 0.0 [%] 0.0 [%] 5.7 5.6
Gemeente Laren 80 0.0 [%] 0.0 [%] 0.0 [%] 2.8 2.6
Gemeente Laren Totaal 0.0 [%] 0.0 [%] 0.0 [%] 2.8 2.6
Gemeente Leeuwarden 70 38.5 [%] 35.5 [%] 64.5 [%] 10.6 5.3
Gemeente Leeuwarden 80 0.0 [%] 0.0 [%] 0.6 [%] 29.8 28.3
Gemeente Leeuwarden Totaal 10.8 [%] 9.3 [%] 10.7 [%] 40.4 33.6
Gemeente Leiderdorp 80 0.0 [%] 0.0 [%] 0.0 [%] 0.2 0.2
Gemeente Leiderdorp Totaal 0.0 [%] 0.0 [%] 0.0 [%] 0.2 0.2
Gemeente Leidschendam-Voorburg 70 0.0 [%] 0.0 [%] 0.0 [%] 0.4 0.4
Gemeente Leidschendam-Voorburg 80 0.0 [%] 0.0 [%] 0.0 [%] 0.6 0.6
Gemeente Leidschendam-Voorburg Totaal 0.0 [%] 0.0 [%] 0.0 [%] 1.0 1.0
Gemeente Lelystad 70 49.2 [%] 55.5 [%] 69.6 [%] 33.7 18.4
Gemeente Lelystad 80 0.4 [%] 0.1 [%] 0.5 [%] 131.1 129.8
Gemeente Lelystad 100 0.0 [%] 0.0 [%] 0.0 [%] 0.1 0.1
Gemeente Lelystad Totaal 16.5 [%] 11.4 [%] 9.0 [%] 164.8 148.3
Gemeente Leudal 80 0.0 [%] 0.0 [%] 0.0 [%] 27.9 27.8
Gemeente Leudal Totaal 0.0 [%] 0.0 [%] 0.0 [%] 27.9 27.8
Gemeente Leusden 80 0.0 [%] 0.0 [%] 0.8 [%] 1.8 1.7
Gemeente Leusden Totaal 0.0 [%] 0.0 [%] 0.8 [%] 1.8 1.7
Gemeente Lingewaard 80 0.0 [%] 0.0 [%] 0.0 [%] 35.2 34.8
Gemeente Lingewaard Totaal 0.0 [%] 0.0 [%] 0.0 [%] 35.2 34.8
Gemeente Lochem 80 0.0 [%] 0.0 [%] 4.3 [%] 1.2 1.0
Gemeente Lochem Totaal 0.0 [%] 0.0 [%] 4.3 [%] 1.2 1.0
Gemeente Loon op Zand 80 0.0 [%] 0.0 [%] 0.4 [%] 5.5 4.7
Gemeente Loon op Zand Totaal 0.0 [%] 0.0 [%] 0.4 [%] 5.5 4.7
Gemeente Lopik 80 0.0 [%] 0.0 [%] 0.0 [%] 0.4 0.4
Gemeente Lopik Totaal 0.0 [%] 0.0 [%] 0.0 [%] 0.4 0.4
Gemeente Losser 80 0.0 [%] 0.0 [%] 0.0 [%] 0.7 0.7
Gemeente Losser Totaal 0.0 [%] 0.0 [%] 0.0 [%] 0.7 0.7
Gemeente Maasdriel 70 0.0 [%] 0.0 [%] 0.0 [%] 0.3 0.3
Gemeente Maasdriel 80 0.0 [%] 0.0 [%] 0.0 [%] 38.6 38.3
Gemeente Maasdriel Totaal 0.0 [%] 0.0 [%] 0.0 [%] 38.9 38.6
Gemeente Maasgouw 80 0.0 [%] 0.0 [%] 0.0 [%] 33.1 33.1
Gemeente Maasgouw Totaal 0.0 [%] 0.0 [%] 0.0 [%] 33.1 33.1
Gemeente Maashorst 80 5.4 [%] 5.8 [%] 3.6 [%] 18.1 15.8
Gemeente Maashorst Totaal 5.4 [%] 5.8 [%] 3.6 [%] 18.1 15.8
Gemeente Maassluis 80 0.0 [%] 0.0 [%] 0.0 [%] 0.2 0.2
Gemeente Maassluis Totaal 0.0 [%] 0.0 [%] 0.0 [%] 0.2 0.2
Gemeente Maastricht 70 3.7 [%] 5.7 [%] 6.7 [%] 6.1 4.7
Gemeente Maastricht 80 0.0 [%] 0.0 [%] 0.0 [%] 2.5 1.9
Gemeente Maastricht Totaal 2.3 [%] 4.1 [%] 4.8 [%] 8.5 6.5
Gemeente Medemblik 80 0.0 [%] 0.0 [%] 2.0 [%] 7.1 6.7
Gemeente Medemblik Totaal 0.0 [%] 0.0 [%] 2.0 [%] 7.1 6.7
Gemeente Meerssen 80 0.0 [%] 0.0 [%] 0.0 [%] 1.5 1.4
Gemeente Meerssen Totaal 0.0 [%] 0.0 [%] 0.0 [%] 1.5 1.4
Gemeente Meierijstad 70 17.2 [%] 24.2 [%] 24.9 [%] 13.1 8.0
Gemeente Meierijstad 80 0.0 [%] 0.0 [%] 0.0 [%] 14.0 12.1
Gemeente Meierijstad Totaal 11.3 [%] 11.7 [%] 9.9 [%] 27.1 20.2
Gemeente Meppel 80 0.0 [%] 0.0 [%] 0.0 [%] 10.4 10.3
Gemeente Meppel 100 0.0 [%] 0.0 [%] 0.0 [%] 0.0 0.0
Gemeente Meppel Totaal 0.0 [%] 0.0 [%] 0.0 [%] 10.4 10.3
Gemeente Middelburg 70 14.3 [%] 53.8 [%] 54.9 [%] 3.1 1.9
Gemeente Middelburg Totaal 14.3 [%] 53.8 [%] 54.9 [%] 3.1 1.9
Gemeente Midden-Delfland 80 0.0 [%] 0.0 [%] 0.0 [%] 1.5 1.3
Gemeente Midden-Delfland Totaal 0.0 [%] 0.0 [%] 0.0 [%] 1.5 1.3
Gemeente Midden-Drenthe 80 0.0 [%] 0.0 [%] 0.0 [%] 73.8 73.4
Gemeente Midden-Drenthe Totaal 0.0 [%] 0.0 [%] 0.0 [%] 73.8 73.4
Gemeente Midden-Groningen 70 0.0 [%] 0.0 [%] 0.0 [%] 0.2 0.2
Gemeente Midden-Groningen 80 0.0 [%] 0.0 [%] 0.1 [%] 19.2 18.9
Gemeente Midden-Groningen Totaal 0.0 [%] 0.0 [%] 0.1 [%] 19.3 19.1
Gemeente Moerdijk 80 2.5 [%] 1.4 [%] 5.2 [%] 18.0 14.9
Gemeente Moerdijk 100 0.0 [%] 0.0 [%] 0.0 [%] 2.0 2.0
Gemeente Moerdijk Totaal 2.5 [%] 1.3 [%] 4.6 [%] 20.0 16.9
Gemeente Molenlanden 80 0.0 [%] 0.0 [%] 0.0 [%] 0.1 0.1
Gemeente Molenlanden Totaal 0.0 [%] 0.0 [%] 0.0 [%] 0.1 0.1
Gemeente Montferland 80 0.0 [%] 0.0 [%] 3.1 [%] 9.6 8.5
Gemeente Montferland Totaal 0.0 [%] 0.0 [%] 3.1 [%] 9.6 8.5
Gemeente Montfoort 80 0.0 [%] 0.0 [%] 0.0 [%] 0.0 0.0
Gemeente Montfoort Totaal 0.0 [%] 0.0 [%] 0.0 [%] 0.0 0.0
Gemeente Neder-Betuwe 80 0.0 [%] 0.0 [%] 1.4 [%] 13.0 12.2
Gemeente Neder-Betuwe Totaal 0.0 [%] 0.0 [%] 1.4 [%] 13.0 12.2
Gemeente Nederweert 80 0.0 [%] 0.0 [%] 0.0 [%] 197.6 197.5
Gemeente Nederweert Totaal 0.0 [%] 0.0 [%] 0.0 [%] 197.6 197.5
Gemeente Nieuwegein 70 33.3 [%] 75.2 [%] 71.2 [%] 12.2 6.7
Gemeente Nieuwegein 80 7.4 [%] 18.9 [%] 37.0 [%] 2.7 1.7
Gemeente Nieuwegein Totaal 26.7 [%] 65.0 [%] 64.2 [%] 14.9 8.4
Gemeente Nieuwkoop 80 0.0 [%] 0.0 [%] 0.0 [%] 4.5 4.5
Gemeente Nieuwkoop Totaal 0.0 [%] 0.0 [%] 0.0 [%] 4.5 4.5
Gemeente Nijkerk 80 14.3 [%] 57.0 [%] 39.7 [%] 2.6 1.8
Gemeente Nijkerk Totaal 14.3 [%] 57.0 [%] 39.7 [%] 2.6 1.8
Gemeente Nijmegen 70 17.9 [%] 34.6 [%] 36.3 [%] 5.3 3.6
Gemeente Nijmegen 80 3.4 [%] 3.4 [%] 2.4 [%] 8.9 7.6
Gemeente Nijmegen 100 25.0 [%] 64.8 [%] 68.4 [%] 1.4 0.7
Gemeente Nijmegen Totaal 7.5 [%] 19.6 [%] 16.8 [%] 15.6 11.9
Gemeente Nissewaard 70 0.0 [%] 0.0 [%] 0.0 [%] 0.1 0.1
Gemeente Nissewaard 80 25.8 [%] 50.5 [%] 41.5 [%] 3.8 2.3
Gemeente Nissewaard Totaal 23.5 [%] 49.6 [%] 40.2 [%] 3.9 2.4
Gemeente Noardeast-Fryslân 80 0.0 [%] 0.0 [%] 0.0 [%] 259.7 259.5
Gemeente Noardeast-Fryslân Totaal 0.0 [%] 0.0 [%] 0.0 [%] 259.7 259.5
Gemeente Noordenveld 80 0.0 [%] 0.0 [%] 0.0 [%] 8.1 8.0
Gemeente Noordenveld Totaal 0.0 [%] 0.0 [%] 0.0 [%] 8.1 8.0
Gemeente Noordoostpolder 70 0.0 [%] 0.0 [%] 0.0 [%] 0.6 0.6
Gemeente Noordoostpolder 80 0.0 [%] 0.0 [%] 0.1 [%] 141.6 140.6
Gemeente Noordoostpolder Totaal 0.0 [%] 0.0 [%] 0.1 [%] 142.3 141.2
Gemeente Noordwijk 80 0.0 [%] 0.0 [%] 10.9 [%] 0.3 0.2
Gemeente Noordwijk Totaal 0.0 [%] 0.0 [%] 10.9 [%] 0.3 0.2
Gemeente Nuenen, Gerwen en Nederwetten 80 12.0 [%] 18.3 [%] 16.2 [%] 10.0 7.4
Gemeente Nuenen, Gerwen en Nederwetten Totaal 12.0 [%] 18.3 [%] 16.2 [%] 10.0 7.4
Gemeente Nunspeet 80 0.0 [%] 0.0 [%] 0.0 [%] 2.1 2.1
Gemeente Nunspeet Totaal 0.0 [%] 0.0 [%] 0.0 [%] 2.1 2.1
Gemeente Oegstgeest 80 0.0 [%] 0.0 [%] 0.0 [%] 2.7 2.7
Gemeente Oegstgeest Totaal 0.0 [%] 0.0 [%] 0.0 [%] 2.7 2.7
Gemeente Oirschot 80 3.1 [%] 5.2 [%] 5.4 [%] 10.8 9.5
Gemeente Oirschot 100 0.0 [%] 0.0 [%] 0.0 [%] 0.7 0.7
Gemeente Oirschot Totaal 3.0 [%] 4.9 [%] 5.0 [%] 11.5 10.2
Gemeente Oisterwijk 80 0.0 [%] 0.0 [%] 0.0 [%] 2.4 2.4
Gemeente Oisterwijk Totaal 0.0 [%] 0.0 [%] 0.0 [%] 2.4 2.4
Gemeente Oldambt 80 0.0 [%] 0.0 [%] 0.0 [%] 74.8 65.6
Gemeente Oldambt Totaal 0.0 [%] 0.0 [%] 0.0 [%] 74.8 65.6
Gemeente Oldebroek 80 0.0 [%] 0.0 [%] 0.0 [%] 0.1 0.1
Gemeente Oldebroek Totaal 0.0 [%] 0.0 [%] 0.0 [%] 0.1 0.1
Gemeente Oldenzaal 80 0.0 [%] 0.0 [%] 0.0 [%] 0.3 0.3
Gemeente Oldenzaal Totaal 0.0 [%] 0.0 [%] 0.0 [%] 0.3 0.3
Gemeente Olst-Wijhe 80 0.0 [%] 0.0 [%] 0.0 [%] 6.6 6.5
Gemeente Olst-Wijhe Totaal 0.0 [%] 0.0 [%] 0.0 [%] 6.6 6.5
Gemeente Ommen 80 0.0 [%] 0.0 [%] 0.0 [%] 7.0 7.0
Gemeente Ommen Totaal 0.0 [%] 0.0 [%] 0.0 [%] 7.0 7.0
Gemeente Oost Gelre 80 0.0 [%] 0.0 [%] 2.4 [%] 3.2 2.5
Gemeente Oost Gelre Totaal 0.0 [%] 0.0 [%] 2.4 [%] 3.2 2.5
Gemeente Oosterhout 70 35.5 [%] 62.6 [%] 64.4 [%] 7.2 4.3
Gemeente Oosterhout 80 4.0 [%] 3.1 [%] 3.9 [%] 28.3 26.4
Gemeente Oosterhout Totaal 11.5 [%] 15.2 [%] 12.4 [%] 35.5 30.7
Gemeente Ooststellingwerf 70 0.0 [%] 0.0 [%] 0.0 [%] 0.7 0.7
Gemeente Ooststellingwerf 80 0.0 [%] 0.0 [%] 0.0 [%] 20.0 20.0
Gemeente Ooststellingwerf Totaal 0.0 [%] 0.0 [%] 0.0 [%] 20.7 20.7
Gemeente Oostzaan 70 0.0 [%] 0.0 [%] 0.0 [%] 0.1 0.0
Gemeente Oostzaan 80 50.0 [%] 88.2 [%] 86.2 [%] 0.3 0.1
Gemeente Oostzaan Totaal 40.0 [%] 73.1 [%] 71.5 [%] 0.3 0.2
Gemeente Opmeer 80 0.0 [%] 0.0 [%] 0.0 [%] 0.3 0.3
Gemeente Opmeer Totaal 0.0 [%] 0.0 [%] 0.0 [%] 0.3 0.3
Gemeente Opsterland 80 0.0 [%] 0.0 [%] 0.0 [%] 25.5 25.5
Gemeente Opsterland Totaal 0.0 [%] 0.0 [%] 0.0 [%] 25.5 25.5
Gemeente Oss 70 30.0 [%] 68.0 [%] 71.2 [%] 11.8 6.2
Gemeente Oss 80 0.0 [%] 0.0 [%] 1.3 [%] 17.6 15.9
Gemeente Oss Totaal 11.7 [%] 27.2 [%] 21.0 [%] 29.3 22.1
Gemeente Oude IJsselstreek 80 0.0 [%] 0.0 [%] 0.0 [%] 4.6 4.5
Gemeente Oude IJsselstreek Totaal 0.0 [%] 0.0 [%] 0.0 [%] 4.6 4.5
Gemeente Ouder-Amstel 70 25.0 [%] 75.5 [%] 76.0 [%] 0.8 0.4
Gemeente Ouder-Amstel 80 14.3 [%] 15.7 [%] 8.6 [%] 2.3 2.1
Gemeente Ouder-Amstel Totaal 18.2 [%] 30.5 [%] 19.5 [%] 3.1 2.5
Gemeente Oudewater 80 0.0 [%] 0.0 [%] 0.0 [%] 1.0 1.0
Gemeente Oudewater Totaal 0.0 [%] 0.0 [%] 0.0 [%] 1.0 1.0
Gemeente Overbetuwe 80 0.0 [%] 0.0 [%] 0.0 [%] 5.0 5.0
Gemeente Overbetuwe 100 0.0 [%] 0.0 [%] 0.0 [%] 0.0 0.0
Gemeente Overbetuwe Totaal 0.0 [%] 0.0 [%] 0.0 [%] 5.0 5.0
Gemeente Papendrecht 80 0.0 [%] 0.0 [%] 7.1 [%] 0.7 0.4
Gemeente Papendrecht Totaal 0.0 [%] 0.0 [%] 7.1 [%] 0.7 0.4
Gemeente Peel en Maas 80 0.0 [%] 0.0 [%] 0.0 [%] 7.5 7.5
Gemeente Peel en Maas Totaal 0.0 [%] 0.0 [%] 0.0 [%] 7.5 7.5
Gemeente Pekela 80 0.0 [%] 0.0 [%] 9.1 [%] 0.2 0.1
Gemeente Pekela Totaal 0.0 [%] 0.0 [%] 9.1 [%] 0.2 0.1
Gemeente Pijnacker-Nootdorp 80 0.0 [%] 0.0 [%] 4.6 [%] 1.5 1.3
Gemeente Pijnacker-Nootdorp Totaal 0.0 [%] 0.0 [%] 4.6 [%] 1.5 1.3
Gemeente Purmerend 80 0.0 [%] 0.0 [%] 8.5 [%] 1.9 1.4
Gemeente Purmerend Totaal 0.0 [%] 0.0 [%] 8.5 [%] 1.9 1.4
Gemeente Putten 80 0.0 [%] 0.0 [%] 0.0 [%] 1.3 1.3
Gemeente Putten Totaal 0.0 [%] 0.0 [%] 0.0 [%] 1.3 1.3
Gemeente Raalte 80 0.0 [%] 0.0 [%] 0.0 [%] 3.0 3.0
Gemeente Raalte Totaal 0.0 [%] 0.0 [%] 0.0 [%] 3.0 3.0
Gemeente Reimerswaal 70 0.0 [%] 0.0 [%] 0.0 [%] 0.0 0.0
Gemeente Reimerswaal 80 0.0 [%] 0.0 [%] 0.0 [%] 2.4 2.4
Gemeente Reimerswaal Totaal 0.0 [%] 0.0 [%] 0.0 [%] 2.4 2.4
Gemeente Renkum 80 0.0 [%] 0.0 [%] 0.0 [%] 2.1 2.0
Gemeente Renkum Totaal 0.0 [%] 0.0 [%] 0.0 [%] 2.1 2.0
Gemeente Renswoude 80 0.0 [%] 0.0 [%] 0.0 [%] 4.3 4.3
Gemeente Renswoude Totaal 0.0 [%] 0.0 [%] 0.0 [%] 4.3 4.3
Gemeente Reusel-De Mierden 80 0.0 [%] 0.0 [%] 0.0 [%] 1.3 0.8
Gemeente Reusel-De Mierden Totaal 0.0 [%] 0.0 [%] 0.0 [%] 1.3 0.8
Gemeente Rheden 80 0.0 [%] 0.0 [%] 2.5 [%] 1.9 1.7
Gemeente Rheden 100 0.0 [%] 0.0 [%] 0.0 [%] 0.1 0.1
Gemeente Rheden Totaal 0.0 [%] 0.0 [%] 2.4 [%] 2.0 1.8
Gemeente Rhenen 80 0.0 [%] 0.0 [%] 1.7 [%] 2.2 1.9
Gemeente Rhenen Totaal 0.0 [%] 0.0 [%] 1.7 [%] 2.2 1.9
Gemeente Ridderkerk 70 0.0 [%] 0.0 [%] 35.8 [%] 0.2 0.1
Gemeente Ridderkerk 80 0.0 [%] 0.0 [%] 0.0 [%] 0.2 0.2
Gemeente Ridderkerk Totaal 0.0 [%] 0.0 [%] 12.8 [%] 0.4 0.3
Gemeente Rijssen-Holten 80 0.0 [%] 0.0 [%] 0.0 [%] 0.3 0.3
Gemeente Rijssen-Holten Totaal 0.0 [%] 0.0 [%] 0.0 [%] 0.3 0.3
Gemeente Rijswijk 80 0.0 [%] 0.0 [%] 0.0 [%] 0.2 0.2
Gemeente Rijswijk Totaal 0.0 [%] 0.0 [%] 0.0 [%] 0.2 0.2
Gemeente Roerdalen 80 0.0 [%] 0.0 [%] 0.0 [%] 8.0 8.0
Gemeente Roerdalen Totaal 0.0 [%] 0.0 [%] 0.0 [%] 8.0 8.0
Gemeente Roermond 70 13.3 [%] 16.0 [%] 8.1 [%] 2.1 1.9
Gemeente Roermond 80 0.0 [%] 0.0 [%] 0.2 [%] 8.4 8.3
Gemeente Roermond Totaal 3.5 [%] 3.2 [%] 1.7 [%] 10.4 10.2
Gemeente Roosendaal 80 0.0 [%] 0.0 [%] 0.4 [%] 18.9 18.7
Gemeente Roosendaal Totaal 0.0 [%] 0.0 [%] 0.4 [%] 18.9 18.7
Gemeente Rotterdam 70 56.0 [%] 92.6 [%] 89.1 [%] 9.0 4.6
Gemeente Rotterdam 80 2.2 [%] 4.4 [%] 4.4 [%] 143.3 122.4
Gemeente Rotterdam Totaal 3.7 [%] 9.6 [%] 7.5 [%] 152.3 127.0
Gemeente Rozendaal 80 0.0 [%] 0.0 [%] 0.0 [%] 0.7 0.7
Gemeente Rozendaal Totaal 0.0 [%] 0.0 [%] 0.0 [%] 0.7 0.7
Gemeente Rucphen 70 0.0 [%] 0.0 [%] 0.0 [%] 0.1 0.1
Gemeente Rucphen 80 0.0 [%] 0.0 [%] 0.0 [%] 2.1 2.0
Gemeente Rucphen Totaal 0.0 [%] 0.0 [%] 0.0 [%] 2.2 2.0
Gemeente Schagen 80 0.0 [%] 0.0 [%] 0.4 [%] 5.9 5.9
Gemeente Schagen Totaal 0.0 [%] 0.0 [%] 0.4 [%] 5.9 5.9
Gemeente Scherpenzeel 80 0.0 [%] 0.0 [%] 0.0 [%] 0.2 0.2
Gemeente Scherpenzeel Totaal 0.0 [%] 0.0 [%] 0.0 [%] 0.2 0.2
Gemeente Schouwen-Duiveland 80 8.3 [%] 16.1 [%] 11.7 [%] 0.9 0.8
Gemeente Schouwen-Duiveland Totaal 8.3 [%] 16.1 [%] 11.7 [%] 0.9 0.8
Gemeente Simpelveld 80 0.0 [%] 0.0 [%] 0.0 [%] 23.2 23.0
Gemeente Simpelveld Totaal 0.0 [%] 0.0 [%] 0.0 [%] 23.2 23.0
Gemeente Sint-Michielsgestel 80 0.0 [%] 0.0 [%] 0.0 [%] 1.2 1.2
Gemeente Sint-Michielsgestel Totaal 0.0 [%] 0.0 [%] 0.0 [%] 1.2 1.2
Gemeente Sittard-Geleen 70 7.4 [%] 5.3 [%] 18.0 [%] 5.1 3.9
Gemeente Sittard-Geleen 80 3.6 [%] 1.4 [%] 1.3 [%] 38.5 37.7
Gemeente Sittard-Geleen 100 0.0 [%] 0.0 [%] 0.0 [%] 0.2 0.2
Gemeente Sittard-Geleen Totaal 4.1 [%] 1.8 [%] 2.9 [%] 43.8 41.8
Gemeente Sliedrecht 80 0.0 [%] 0.0 [%] 0.0 [%] 0.1 0.1
Gemeente Sliedrecht Totaal 0.0 [%] 0.0 [%] 0.0 [%] 0.1 0.1
Gemeente Sluis 70 0.0 [%] 0.0 [%] 0.0 [%] 0.0 0.0
Gemeente Sluis 80 0.0 [%] 0.0 [%] 0.0 [%] 2.9 2.9
Gemeente Sluis Totaal 0.0 [%] 0.0 [%] 0.0 [%] 3.0 3.0
Gemeente Smallingerland 80 12.5 [%] 40.6 [%] 29.0 [%] 5.1 3.3
Gemeente Smallingerland 100 0.0 [%] 0.0 [%] 0.0 [%] 0.0 0.0
Gemeente Smallingerland Totaal 11.8 [%] 40.5 [%] 28.9 [%] 5.1 3.4
Gemeente Soest 80 0.0 [%] 0.0 [%] 0.2 [%] 7.4 7.3
Gemeente Soest Totaal 0.0 [%] 0.0 [%] 0.2 [%] 7.4 7.3
Gemeente Someren 80 1.6 [%] 0.4 [%] 0.4 [%] 60.3 59.6
Gemeente Someren Totaal 1.6 [%] 0.4 [%] 0.4 [%] 60.3 59.6
Gemeente Son en Breugel 80 0.0 [%] 0.0 [%] 7.1 [%] 3.0 1.8
Gemeente Son en Breugel Totaal 0.0 [%] 0.0 [%] 7.1 [%] 3.0 1.8
Gemeente Stadskanaal 80 0.0 [%] 0.0 [%] 0.0 [%] 164.5 159.0
Gemeente Stadskanaal Totaal 0.0 [%] 0.0 [%] 0.0 [%] 164.5 159.0
Gemeente Staphorst 80 0.0 [%] 0.0 [%] 0.0 [%] 0.3 0.3
Gemeente Staphorst 100 0.0 [%] 0.0 [%] 0.0 [%] 0.0 0.0
Gemeente Staphorst Totaal 0.0 [%] 0.0 [%] 0.0 [%] 0.3 0.3
Gemeente Stede Broec 80 0.0 [%] 0.0 [%] 0.0 [%] 2.0 2.0
Gemeente Stede Broec Totaal 0.0 [%] 0.0 [%] 0.0 [%] 2.0 2.0
Gemeente Steenbergen 80 2.2 [%] 0.2 [%] 0.2 [%] 20.9 20.3
Gemeente Steenbergen Totaal 2.2 [%] 0.2 [%] 0.2 [%] 20.9 20.3
Gemeente Steenwijkerland 80 0.0 [%] 0.0 [%] 0.0 [%] 11.5 11.5
Gemeente Steenwijkerland Totaal 0.0 [%] 0.0 [%] 0.0 [%] 11.5 11.5
Gemeente Stein 80 7.9 [%] 18.0 [%] 17.3 [%] 11.2 8.3
Gemeente Stein Totaal 7.9 [%] 18.0 [%] 17.3 [%] 11.2 8.3
Gemeente Stichtse Vecht 80 0.0 [%] 0.0 [%] 0.0 [%] 7.2 7.1
Gemeente Stichtse Vecht Totaal 0.0 [%] 0.0 [%] 0.0 [%] 7.2 7.1
Gemeente Súdwest-Fryslân 70 0.0 [%] 0.0 [%] 0.6 [%] 4.0 3.9
Gemeente Súdwest-Fryslân 80 0.4 [%] 0.2 [%] 0.3 [%] 63.5 62.6
Gemeente Súdwest-Fryslân Totaal 0.4 [%] 0.2 [%] 0.3 [%] 67.5 66.5
Gemeente Terneuzen 70 16.0 [%] 71.8 [%] 60.1 [%] 3.0 1.8
Gemeente Terneuzen 80 0.0 [%] 0.0 [%] 0.0 [%] 1.5 1.4
Gemeente Terneuzen Totaal 9.1 [%] 47.8 [%] 34.2 [%] 4.5 3.1
Gemeente Terschelling 80 0.0 [%] 0.0 [%] 0.0 [%] 35.6 35.6
Gemeente Terschelling Totaal 0.0 [%] 0.0 [%] 0.0 [%] 35.6 35.6
Gemeente Texel 80 0.0 [%] 0.0 [%] 0.0 [%] 10.9 10.4
Gemeente Texel Totaal 0.0 [%] 0.0 [%] 0.0 [%] 10.9 10.4
Gemeente Teylingen 80 0.0 [%] 0.0 [%] 0.0 [%] 0.1 0.1
Gemeente Teylingen Totaal 0.0 [%] 0.0 [%] 0.0 [%] 0.1 0.1
Gemeente Tholen 80 0.0 [%] 0.0 [%] 0.0 [%] 0.1 0.1
Gemeente Tholen Totaal 0.0 [%] 0.0 [%] 0.0 [%] 0.1 0.1
Gemeente Tiel 70 0.0 [%] 0.0 [%] 0.0 [%] 0.9 0.9
Gemeente Tiel 80 0.0 [%] 0.0 [%] 0.0 [%] 3.0 2.2
Gemeente Tiel Totaal 0.0 [%] 0.0 [%] 0.0 [%] 3.9 3.1
Gemeente Tilburg 70 33.3 [%] 82.2 [%] 82.4 [%] 10.7 5.5
Gemeente Tilburg 80 20.4 [%] 53.1 [%] 55.3 [%] 56.1 33.0
Gemeente Tilburg 100 25.0 [%] 26.4 [%] 19.8 [%] 2.2 1.5
Gemeente Tilburg Totaal 24.2 [%] 56.8 [%] 57.7 [%] 69.0 40.0
Gemeente Tubbergen 80 0.0 [%] 0.0 [%] 0.0 [%] 11.7 11.7
Gemeente Tubbergen Totaal 0.0 [%] 0.0 [%] 0.0 [%] 11.7 11.7
Gemeente Twenterand 70 0.0 [%] 0.0 [%] 14.7 [%] 0.4 0.3
Gemeente Twenterand 80 3.6 [%] 1.3 [%] 0.6 [%] 9.6 9.3
Gemeente Twenterand 100 0.0 [%] 0.0 [%] 0.0 [%] 0.8 0.8
Gemeente Twenterand Totaal 3.0 [%] 1.1 [%] 0.9 [%] 10.7 10.3
Gemeente Tynaarlo 70 0.0 [%] 0.0 [%] 0.0 [%] 0.0 0.0
Gemeente Tynaarlo 80 0.0 [%] 0.0 [%] 0.0 [%] 6.6 6.6
Gemeente Tynaarlo Totaal 0.0 [%] 0.0 [%] 0.0 [%] 6.7 6.7
Gemeente Tytsjerksteradiel 80 0.0 [%] 0.0 [%] 0.1 [%] 60.2 60.0
Gemeente Tytsjerksteradiel Totaal 0.0 [%] 0.0 [%] 0.1 [%] 60.2 60.0
Gemeente Uitgeest 80 0.0 [%] 0.0 [%] 0.0 [%] 1.1 1.1
Gemeente Uitgeest Totaal 0.0 [%] 0.0 [%] 0.0 [%] 1.1 1.1
Gemeente Uithoorn 80 0.0 [%] 0.0 [%] 31.9 [%] 1.9 1.3
Gemeente Uithoorn Totaal 0.0 [%] 0.0 [%] 31.9 [%] 1.9 1.3
Gemeente Urk 70 0.0 [%] 0.0 [%] 0.0 [%] 1.2 1.2
Gemeente Urk 80 0.0 [%] 0.0 [%] 0.0 [%] 0.1 0.1
Gemeente Urk Totaal 0.0 [%] 0.0 [%] 0.0 [%] 1.3 1.3
Gemeente Utrecht 70 28.9 [%] 47.8 [%] 57.1 [%] 34.6 19.0
Gemeente Utrecht 80 5.1 [%] 10.7 [%] 7.5 [%] 3.9 2.8
Gemeente Utrecht Totaal 23.1 [%] 44.0 [%] 50.6 [%] 38.5 21.9
Gemeente Utrechtse Heuvelrug 80 3.3 [%] 2.9 [%] 2.5 [%] 18.4 17.6
Gemeente Utrechtse Heuvelrug Totaal 3.3 [%] 2.9 [%] 2.5 [%] 18.4 17.6
Gemeente Vaals 80 0.0 [%] 0.0 [%] 0.0 [%] 0.0 0.0
Gemeente Vaals Totaal 0.0 [%] 0.0 [%] 0.0 [%] 0.0 0.0
Gemeente Valkenburg aan de Geul 70 0.0 [%] 0.0 [%] 0.0 [%] 0.4 0.4
Gemeente Valkenburg aan de Geul 80 0.0 [%] 0.0 [%] 0.0 [%] 7.0 7.0
Gemeente Valkenburg aan de Geul Totaal 0.0 [%] 0.0 [%] 0.0 [%] 7.4 7.4
Gemeente Valkenswaard 80 0.0 [%] 0.0 [%] 0.0 [%] 6.8 6.8
Gemeente Valkenswaard Totaal 0.0 [%] 0.0 [%] 0.0 [%] 6.8 6.8
Gemeente Veendam 70 0.0 [%] 0.0 [%] 0.0 [%] 0.1 0.1
Gemeente Veendam 80 0.0 [%] 0.0 [%] 0.0 [%] 31.8 31.8
Gemeente Veendam Totaal 0.0 [%] 0.0 [%] 0.0 [%] 31.9 31.9
Gemeente Veenendaal 80 0.0 [%] 0.0 [%] 0.0 [%] 0.3 0.3
Gemeente Veenendaal Totaal 0.0 [%] 0.0 [%] 0.0 [%] 0.3 0.3
Gemeente Veere 80 0.0 [%] 0.0 [%] 0.0 [%] 1.6 1.6
Gemeente Veere Totaal 0.0 [%] 0.0 [%] 0.0 [%] 1.6 1.6
Gemeente Veldhoven 70 27.0 [%] 60.4 [%] 55.1 [%] 17.7 10.2
Gemeente Veldhoven 80 1.9 [%] 2.1 [%] 1.2 [%] 24.5 23.6
Gemeente Veldhoven Totaal 13.2 [%] 26.5 [%] 17.5 [%] 42.2 33.8
Gemeente Velsen 70 0.0 [%] 0.0 [%] 0.0 [%] 1.7 1.7
Gemeente Velsen 80 0.0 [%] 0.0 [%] 16.8 [%] 2.0 1.5
Gemeente Velsen Totaal 0.0 [%] 0.0 [%] 8.0 [%] 3.7 3.2
Gemeente Venlo 70 6.7 [%] 12.2 [%] 67.1 [%] 2.4 1.3
Gemeente Venlo 80 2.7 [%] 5.1 [%] 3.5 [%] 20.0 18.3
Gemeente Venlo Totaal 3.2 [%] 5.9 [%] 7.7 [%] 22.4 19.6
Gemeente Venray 80 0.0 [%] 0.0 [%] 0.5 [%] 11.5 11.4
Gemeente Venray Totaal 0.0 [%] 0.0 [%] 0.5 [%] 11.5 11.4
Gemeente Vijfheerenlanden 80 0.0 [%] 0.0 [%] 0.0 [%] 0.7 0.7
Gemeente Vijfheerenlanden Totaal 0.0 [%] 0.0 [%] 0.0 [%] 0.7 0.7
Gemeente Vlaardingen 80 0.0 [%] 0.0 [%] 0.0 [%] 2.7 2.7
Gemeente Vlaardingen Totaal 0.0 [%] 0.0 [%] 0.0 [%] 2.7 2.7
Gemeente Vlieland 80 0.0 [%] 0.0 [%] 0.0 [%] 0.3 0.3
Gemeente Vlieland Totaal 0.0 [%] 0.0 [%] 0.0 [%] 0.3 0.3
Gemeente Vlissingen 70 13.7 [%] 26.3 [%] 19.0 [%] 7.4 5.6
Gemeente Vlissingen 80 0.0 [%] 0.0 [%] 0.0 [%] 0.1 0.1
Gemeente Vlissingen Totaal 12.5 [%] 25.9 [%] 18.6 [%] 7.5 5.7
Gemeente Voerendaal 70 0.0 [%] 0.0 [%] 0.0 [%] 0.9 0.9
Gemeente Voerendaal 80 7.4 [%] 6.1 [%] 9.1 [%] 4.6 4.1
Gemeente Voerendaal 100 0.0 [%] 0.0 [%] 0.0 [%] 0.1 0.1
Gemeente Voerendaal Totaal 6.7 [%] 5.0 [%] 7.3 [%] 5.6 5.1
Gemeente Voorne aan Zee 80 0.0 [%] 0.0 [%] 5.6 [%] 4.2 3.7
Gemeente Voorne aan Zee Totaal 0.0 [%] 0.0 [%] 5.6 [%] 4.2 3.7
Gemeente Voorschoten 80 0.0 [%] 0.0 [%] 0.0 [%] 4.7 4.4
Gemeente Voorschoten Totaal 0.0 [%] 0.0 [%] 0.0 [%] 4.7 4.4
Gemeente Voorst 80 0.0 [%] 0.0 [%] 0.0 [%] 6.8 6.7
Gemeente Voorst Totaal 0.0 [%] 0.0 [%] 0.0 [%] 6.8 6.7
Gemeente Vught 70 0.0 [%] 0.0 [%] 0.0 [%] 0.0 0.0
Gemeente Vught 80 10.0 [%] 6.1 [%] 8.0 [%] 1.7 1.5
Gemeente Vught 100 0.0 [%] 0.0 [%] 0.0 [%] 0.9 0.9
Gemeente Vught Totaal 8.7 [%] 4.0 [%] 5.1 [%] 2.6 2.4
Gemeente Waadhoeke 70 37.8 [%] 92.8 [%] 89.4 [%] 5.5 2.8
Gemeente Waadhoeke 80 0.0 [%] 0.0 [%] 0.0 [%] 50.0 48.6
Gemeente Waadhoeke Totaal 7.1 [%] 9.2 [%] 5.0 [%] 55.6 51.4
Gemeente Waalre 80 0.0 [%] 0.0 [%] 0.0 [%] 0.1 0.1
Gemeente Waalre Totaal 0.0 [%] 0.0 [%] 0.0 [%] 0.1 0.1
Gemeente Waalwijk 70 0.0 [%] 0.0 [%] 0.0 [%] 0.8 0.8
Gemeente Waalwijk 80 0.0 [%] 0.0 [%] 0.0 [%] 6.2 5.7
Gemeente Waalwijk Totaal 0.0 [%] 0.0 [%] 0.0 [%] 7.0 6.6
Gemeente Waddinxveen 80 0.0 [%] 0.0 [%] 0.0 [%] 2.3 2.2
Gemeente Waddinxveen Totaal 0.0 [%] 0.0 [%] 0.0 [%] 2.3 2.2
Gemeente Wageningen 80 0.0 [%] 0.0 [%] 0.0 [%] 0.3 0.3
Gemeente Wageningen Totaal 0.0 [%] 0.0 [%] 0.0 [%] 0.3 0.3
Gemeente Wassenaar 70 0.0 [%] 0.0 [%] 1.9 [%] 1.1 1.0
Gemeente Wassenaar 80 0.0 [%] 0.0 [%] 0.0 [%] 5.3 4.8
Gemeente Wassenaar Totaal 0.0 [%] 0.0 [%] 0.3 [%] 6.4 5.9
Gemeente Waterland 80 0.0 [%] 0.0 [%] 0.0 [%] 0.3 0.3
Gemeente Waterland Totaal 0.0 [%] 0.0 [%] 0.0 [%] 0.3 0.3
Gemeente Weert 70 14.3 [%] 37.0 [%] 34.7 [%] 17.2 11.5
Gemeente Weert 80 1.4 [%] 9.2 [%] 10.7 [%] 21.1 18.8
Gemeente Weert Totaal 10.1 [%] 21.7 [%] 19.8 [%] 38.3 30.3
Gemeente West Betuwe 70 0.0 [%] 0.0 [%] 0.0 [%] 1.0 1.0
Gemeente West Betuwe 80 0.0 [%] 0.0 [%] 0.0 [%] 8.4 8.4
Gemeente West Betuwe Totaal 0.0 [%] 0.0 [%] 0.0 [%] 9.4 9.4
Gemeente West Maas en Waal 80 0.0 [%] 0.0 [%] 0.0 [%] 0.1 0.1
Gemeente West Maas en Waal Totaal 0.0 [%] 0.0 [%] 0.0 [%] 0.1 0.1
Gemeente Westerkwartier 70 0.0 [%] 0.0 [%] 0.0 [%] 2.2 1.3
Gemeente Westerkwartier 80 0.0 [%] 0.0 [%] 0.0 [%] 92.7 92.7
Gemeente Westerkwartier Totaal 0.0 [%] 0.0 [%] 0.0 [%] 95.0 94.0
Gemeente Westerveld 70 0.0 [%] 0.0 [%] 0.0 [%] 0.0 0.0
Gemeente Westerveld 80 0.0 [%] 0.0 [%] 0.0 [%] 0.9 0.9
Gemeente Westerveld Totaal 0.0 [%] 0.0 [%] 0.0 [%] 0.9 0.9
Gemeente Westervoort 80 0.0 [%] 0.0 [%] 0.0 [%] 0.7 0.7
Gemeente Westervoort Totaal 0.0 [%] 0.0 [%] 0.0 [%] 0.7 0.7
Gemeente Westerwolde 80 0.0 [%] 0.0 [%] 0.0 [%] 314.2 310.8
Gemeente Westerwolde Totaal 0.0 [%] 0.0 [%] 0.0 [%] 314.2 310.8
Gemeente Westland 80 0.0 [%] 0.0 [%] 3.7 [%] 7.1 6.6
Gemeente Westland Totaal 0.0 [%] 0.0 [%] 3.7 [%] 7.1 6.6
Gemeente Weststellingwerf 70 0.0 [%] 0.0 [%] 0.0 [%] 2.4 2.4
Gemeente Weststellingwerf 80 0.0 [%] 0.0 [%] 0.0 [%] 20.0 20.0
Gemeente Weststellingwerf Totaal 0.0 [%] 0.0 [%] 0.0 [%] 22.4 22.4
Gemeente Wierden 80 0.0 [%] 0.0 [%] 2.4 [%] 5.7 5.1
Gemeente Wierden Totaal 0.0 [%] 0.0 [%] 2.4 [%] 5.7 5.1
Gemeente Wijchen 80 0.0 [%] 0.0 [%] 0.4 [%] 21.4 21.3
Gemeente Wijchen Totaal 0.0 [%] 0.0 [%] 0.4 [%] 21.4 21.3
Gemeente Wijdemeren 80 0.0 [%] 0.0 [%] 0.0 [%] 6.4 6.4
Gemeente Wijdemeren Totaal 0.0 [%] 0.0 [%] 0.0 [%] 6.4 6.4
Gemeente Wijk bij Duurstede 70 0.0 [%] 0.0 [%] 0.0 [%] 1.5 1.5
Gemeente Wijk bij Duurstede 80 0.0 [%] 0.0 [%] 0.0 [%] 1.0 1.0
Gemeente Wijk bij Duurstede Totaal 0.0 [%] 0.0 [%] 0.0 [%] 2.5 2.5
Gemeente Winterswijk 80 0.0 [%] 0.0 [%] 0.0 [%] 0.2 0.2
Gemeente Winterswijk Totaal 0.0 [%] 0.0 [%] 0.0 [%] 0.2 0.2
Gemeente Woensdrecht 80 5.4 [%] 8.6 [%] 4.3 [%] 11.5 10.9
Gemeente Woensdrecht Totaal 5.4 [%] 8.6 [%] 4.3 [%] 11.5 10.9
Gemeente Woerden 70 50.0 [%] 58.9 [%] 68.3 [%] 2.1 1.1
Gemeente Woerden 80 20.0 [%] 9.4 [%] 6.3 [%] 3.7 3.5
Gemeente Woerden Totaal 28.6 [%] 27.5 [%] 20.8 [%] 5.9 4.6
Gemeente Woudenberg 80 0.0 [%] 0.0 [%] 0.0 [%] 2.0 2.0
Gemeente Woudenberg Totaal 0.0 [%] 0.0 [%] 0.0 [%] 2.0 2.0
Gemeente Zaanstad 70 23.4 [%] 26.3 [%] 44.3 [%] 16.6 10.2
Gemeente Zaanstad 80 0.0 [%] 0.0 [%] 0.0 [%] 4.2 4.2
Gemeente Zaanstad Totaal 19.7 [%] 21.0 [%] 31.5 [%] 20.7 14.4
Gemeente Zaltbommel 80 1.4 [%] 0.9 [%] 0.5 [%] 52.2 51.5
Gemeente Zaltbommel Totaal 1.4 [%] 0.9 [%] 0.5 [%] 52.2 51.5
Gemeente Zeewolde 70 0.0 [%] 0.0 [%] 0.0 [%] 2.6 2.6
Gemeente Zeewolde 80 0.0 [%] 0.0 [%] 0.0 [%] 116.5 116.5
Gemeente Zeewolde 100 66.7 [%] 93.4 [%] 89.4 [%] 0.1 0.1
Gemeente Zeewolde Totaal 1.4 [%] 0.1 [%] 0.0 [%] 119.3 119.2
Gemeente Zeist 80 3.0 [%] 7.1 [%] 3.8 [%] 4.2 3.8
Gemeente Zeist Totaal 3.0 [%] 7.1 [%] 3.8 [%] 4.2 3.8
Gemeente Zevenaar 80 8.8 [%] 3.1 [%] 1.5 [%] 7.0 6.9
Gemeente Zevenaar Totaal 8.8 [%] 3.1 [%] 1.5 [%] 7.0 6.9
Gemeente Zoetermeer 70 34.9 [%] 44.0 [%] 64.4 [%] 20.0 10.7
Gemeente Zoetermeer 80 0.0 [%] 0.0 [%] 7.4 [%] 0.3 0.2
Gemeente Zoetermeer Totaal 32.4 [%] 43.3 [%] 63.5 [%] 20.3 10.9
Gemeente Zuidplas 80 2.0 [%] 0.9 [%] 2.6 [%] 5.7 5.5
Gemeente Zuidplas Totaal 2.0 [%] 0.9 [%] 2.6 [%] 5.7 5.5
Gemeente Zundert 80 0.0 [%] 0.0 [%] 0.0 [%] 68.0 60.9
Gemeente Zundert Totaal 0.0 [%] 0.0 [%] 0.0 [%] 68.0 60.9
Gemeente Zutphen 80 0.0 [%] 0.0 [%] 0.0 [%] 11.1 11.0
Gemeente Zutphen Totaal 0.0 [%] 0.0 [%] 0.0 [%] 11.1 11.0
Gemeente Zwartewaterland 80 0.0 [%] 0.0 [%] 0.0 [%] 4.1 3.3
Gemeente Zwartewaterland Totaal 0.0 [%] 0.0 [%] 0.0 [%] 4.1 3.3
Gemeente Zwijndrecht 80 0.0 [%] 0.0 [%] 0.0 [%] 0.1 0.1
Gemeente Zwijndrecht Totaal 0.0 [%] 0.0 [%] 0.0 [%] 0.1 0.1
Gemeente Zwolle 70 28.2 [%] 60.4 [%] 53.5 [%] 43.7 27.0
Gemeente Zwolle 80 9.1 [%] 16.3 [%] 11.7 [%] 6.4 5.5
Gemeente Zwolle Totaal 25.1 [%] 54.8 [%] 46.5 [%] 50.1 32.5

6.3 Benchmarks provincies per limiet categorie

In deze paragraaf worden benchmarks getoond voor provinciale wegbeheerders, afgezet tegen het landelijk niveau. De benchmarks worden getoond voor het totale areaal en voor de wegen met een limiet van 70km/uur en 80 km/uur en 100 km/uur apart.

Klik met de muis op de onderstaande tabbladen om de benchmarks van de verschillende limieten of het totaal te tonen. Klik vervolgens op de knop rechts van de grafiek om de gewenste wegbeheerder te kiezen.

Let op, er worden pas scores getoond na het maken van een eerste keuze.

# functie wrapper voor het aanroepen van plot_ly
#' De functie roept plot_ly aan voor het maken van de grafiek
#' Breedte, plaatsing en margins zijn proefondervindelijk bepaald voor alle onderdelen
#' Een dropdown menu is toegevoegd om te kunnen schakelen tussen wegbeheerders
#' Een tweede dropdown om tevens te filteren op basis van limiet lijkt complex en wordt buiten de functie gelaten. 

# functie 
figuur.benchmark <- function(scores_wegbeheerder_limiet, limiet, groepskeuzen_wegbeheerder_limiet, landelijke_score_limiet) { 
  # roep plot_ly aan en initieer de grafie voor de dropdown keuze met vaste x en y waarde
  plot_ly(scores_wegbeheerder_limiet, x = "Categorieën", y = 0, type = 'bar', # data, x as waarde, y as waarde, type barplot
          # marker stelt de grafiekkleuren vast in een vector (hier 2 waarden)
          # width fixeert de breedte van de grafiek, 900 is in pixels en ongeveer markdown pagina breedte
          marker = grafiekkleuren, width = 900) %>% #list(color = c('blue', 'purple')) 
  layout(
    # titeel initiele grafiek met object limiet
    title = list(text = paste("Kenmerkscore aanwezigheid rijbaanscheiding bij limiet", limiet, "\n", "voor", 
                              "te selecteren wegbeheerder", "vs. landelijk.", "\n", "\n", 
                              "<b> Selecteer de wegbeheerder uit de uitklapbare keuzelijst rechts </b>"),
                 xanchor = 'center', yanchor =  'top'), # plaatsing van de titel
    #xanchor = 'center', x = 0.5 , yanchor =  'top', y = 1), # Dynamic title
    margin = list(l =50, t = 50), # marges
    xaxis = list(title = ""), # x as titel
    yaxis = list(title = "SPI deelscore [%]", range = c(0, 100)), # y as titel
    showlegend = FALSE # geen legenda
  ) %>%
  # dropdown menu voor selectie visualisatie data
  layout(
    updatemenus = list(
      list(
        active = 0,
        # Position dropdown box to the right of the graph
        xanchor = "left", # position to edge 
        x = 1.05, # position to edge 
        yanchor = "middle", # Center dropdown box vertically
        y = 0.5,   # Center dropdown box vertically
        # lapply functie voor de werking van de button 
        buttons = lapply(1:length(groepskeuzen_wegbeheerder_limiet), function(i) {
          list(
            method = "update",
            args = list(
              list(x = list(c(groepskeuzen_wegbeheerder_limiet[i], "landelijk")), 
                   y = list(c(scores_wegbeheerder_limiet$`Score kenmerk Aanwezigheid rijbaanscheiding`[i],
                              landelijke_score_limiet))),  # Update x and y scores_wegbeheerder_limiet
              list(title = paste("Kenmerkscore aanwezigheid rijbaanscheiding bij limiet", limiet, "\n", "voor",
                                 groepskeuzen_wegbeheerder_limiet[i], "vs. landelijk")) # Dynamic title update
            ),
            label = groepskeuzen_wegbeheerder_limiet[i]
          )
        })
      )
    )
  )
}
# Calculate the average score
landelijke_score_70 <- scores_landelijk$`Score kenmerk Aanwezigheid rijbaanscheiding`[1]
landelijke_score_80 <- scores_landelijk$`Score kenmerk Aanwezigheid rijbaanscheiding`[2]
landelijke_score_100 <- scores_landelijk$`Score kenmerk Aanwezigheid rijbaanscheiding`[3]
landelijke_score_totaal <- scores_landelijk$`Score kenmerk Aanwezigheid rijbaanscheiding`[4]

# data per provincie per limiet
scores_provincies_70 <- filter(scores_provincies, Snelheidslimiet == "70")
scores_provincies_80 <- filter(scores_provincies, Snelheidslimiet == "80")
scores_provincies_100 <- filter(scores_provincies, Snelheidslimiet == "100")
scores_provincies_totaal <- filter(scores_provincies, Snelheidslimiet == "Totaal")

# Create the dropdown menu options
groepskeuzen_provincies_70 <- scores_provincies_70$Wegbeheerder
groepskeuzen_provincies_80 <- scores_provincies_80$Wegbeheerder
groepskeuzen_provincies_100 <- scores_provincies_100$Wegbeheerder
groepskeuzen_provincies_totaal <- scores_provincies_totaal$Wegbeheerder

grafiekkleuren <- list(color = c(blue_vals[3], green_vals[3]))

Benchmark 70 km/u

# maak een benchmark grafiek voor provenciale wegbeheerders met limiet 50
fig70prov <- figuur.benchmark(scores_wegbeheerder_limiet = scores_provincies_70, 
                              limiet = 70,
                              groepskeuzen_wegbeheerder_limiet = groepskeuzen_provincies_70,
                              landelijke_score_limiet = landelijke_score_70)

# Display the plot
fig70prov

Benchmark 80 km/u

# maak een benchmark grafiek voor provenciale wegbeheerders met limiet 80
fig80prov <- figuur.benchmark(scores_wegbeheerder_limiet = scores_provincies_80, 
                              limiet = 80,
                              groepskeuzen_wegbeheerder_limiet = groepskeuzen_provincies_80,
                              landelijke_score_limiet = landelijke_score_80)

# Display the plot
fig80prov

Benchmark 100 km/u

# maak een benchmark grafiek voor provenciale wegbeheerders met limiet 100
fig100prov <- figuur.benchmark(scores_wegbeheerder_limiet = scores_provincies_100, 
                              limiet = 100,
                              groepskeuzen_wegbeheerder_limiet = groepskeuzen_provincies_100,
                              landelijke_score_limiet = landelijke_score_100)

# Display the plot
fig100prov

Benchmark Totaal

# maak een benchmark grafiek voor provenciale wegbeheerders van alle limieten
fig_totaal_prov <- figuur.benchmark(scores_wegbeheerder_limiet = scores_provincies_totaal, 
                              limiet = "totaal",
                              groepskeuzen_wegbeheerder_limiet = groepskeuzen_provincies_totaal,
                              landelijke_score_limiet = landelijke_score_totaal)
# Display the plot
fig_totaal_prov

6.4 Benchmarks gemeenten per limiet categorie

In deze paragraaf worden benchmarks getoond voor gemeentelijke wegbeheerders, afgezet tegen het landelijk niveau. De benchmarks worden getoond voor het totale areaal en voor de wegen met een limiet van 70km/uur en 80 km/uur en 100 km/uur apart.

Klik met de muis op de onderstaande tabbladen om de benchmarks van de verschillende limieten of het totaal te tonen. Klik vervolgens op de knop rechts van de grafiek om de gewenste wegbeheerder te kiezen.

Let op, er worden pas scores getoond na het maken van een eerste keuze.

# Calculate the average score
landelijke_score_70 <- scores_landelijk$`Score kenmerk Aanwezigheid rijbaanscheiding`[1]
landelijke_score_80 <- scores_landelijk$`Score kenmerk Aanwezigheid rijbaanscheiding`[2]
landelijke_score_100 <- scores_landelijk$`Score kenmerk Aanwezigheid rijbaanscheiding`[3]
landelijke_score_totaal <- scores_landelijk$`Score kenmerk Aanwezigheid rijbaanscheiding`[4]

# data per provincie per limiet
scores_gemeenten_70 <- filter(scores_gemeenten, Snelheidslimiet == "70")
scores_gemeenten_80 <- filter(scores_gemeenten, Snelheidslimiet == "80")
scores_gemeenten_100 <- filter(scores_gemeenten, Snelheidslimiet == "100")
scores_gemeenten_totaal <- filter(scores_gemeenten, Snelheidslimiet == "Totaal")

# Create the dropdown menu options
groepskeuzen_gemeenten_70 <- scores_gemeenten_70$Wegbeheerder
groepskeuzen_gemeenten_80 <- scores_gemeenten_80$Wegbeheerder
groepskeuzen_gemeenten_100 <- scores_gemeenten_100$Wegbeheerder
groepskeuzen_gemeenten_totaal <- scores_gemeenten_totaal$Wegbeheerder

grafiekkleuren <- list(color = c(blue_vals[3], green_vals[3]))

Benchmark 70 km/u

# maak een benchmark grafiek voor gemeentelijke wegbeheerders met wegen met limiet 70
fig70gem <- figuur.benchmark(scores_wegbeheerder_limiet = scores_gemeenten_70, 
                              limiet = 70,
                              groepskeuzen_wegbeheerder_limiet = groepskeuzen_gemeenten_70,
                              landelijke_score_limiet = landelijke_score_70)

# Display the plot
fig70gem

Benchmark 80 km/u

# maak een benchmark grafiek voor gemeentelijke wegbeheerders met wegen met limiet 80
fig80gem <- figuur.benchmark(scores_wegbeheerder_limiet = scores_gemeenten_80, 
                              limiet = 80,
                              groepskeuzen_wegbeheerder_limiet = groepskeuzen_gemeenten_80,
                              landelijke_score_limiet = landelijke_score_80)
# Display the plot
fig80gem

Benchmark 100 km/u

# maak een benchmark grafiek voor gemeentelijke wegbeheerders met wegen met limiet 100
fig100gem <- figuur.benchmark(scores_wegbeheerder_limiet = scores_gemeenten_100, 
                              limiet = 100,
                              groepskeuzen_wegbeheerder_limiet = groepskeuzen_gemeenten_100,
                              landelijke_score_limiet = landelijke_score_100)
# Display the plot
fig100gem

Benchmark Totaal

# maak een benchmark grafiek voor gemeentelijke wegbeheerders
fig_totaal_gem <- figuur.benchmark(scores_wegbeheerder_limiet = scores_gemeenten_totaal, 
                              limiet = "totaal",
                              groepskeuzen_wegbeheerder_limiet = groepskeuzen_gemeenten_totaal,
                              landelijke_score_limiet = landelijke_score_totaal)

# Display the plot
fig_totaal_gem

6.5 Benchmarks waterschappen per limiet categorie

In deze paragraaf worden benchmarks getoond voor wegbeherende waterschappen, afgezet tegen het landelijk niveau. De benchmarks worden getoond voor het totale areaal en voor de wegen met een limiet van 70km/uur en 80 km/uur en 100 km/uur apart.

Klik met de muis op de onderstaande tabbladen om de benchmarks van de verschillende limieten of het totaal te tonen. Klik vervolgens op de knop rechts van de grafiek om de gewenste wegbeheerder te kiezen.

Let op, er worden pas scores getoond na het maken van een eerste keuze.

# Calculate the average score
landelijke_score_70 <- scores_landelijk$`Score kenmerk Aanwezigheid rijbaanscheiding`[1]
landelijke_score_80 <- scores_landelijk$`Score kenmerk Aanwezigheid rijbaanscheiding`[2]
landelijke_score_100 <- scores_landelijk$`Score kenmerk Aanwezigheid rijbaanscheiding`[3]
landelijke_score_totaal <- scores_landelijk$`Score kenmerk Aanwezigheid rijbaanscheiding`[4]

# data per provincie per limiet
scores_waterschappen_70 <- filter(scores_waterschappen, Snelheidslimiet == "70")
scores_waterschappen_80 <- filter(scores_waterschappen, Snelheidslimiet == "80")
scores_waterschappen_100 <- filter(scores_waterschappen, Snelheidslimiet == "100")
scores_waterschappen_totaal <- filter(scores_waterschappen, Snelheidslimiet == "Totaal")

# Create the dropdown menu options
groepskeuzen_waterschappen_70 <- scores_waterschappen_70$Wegbeheerder
groepskeuzen_waterschappen_80 <- scores_waterschappen_80$Wegbeheerder
groepskeuzen_waterschappen_100 <- scores_waterschappen_100$Wegbeheerder
groepskeuzen_waterschappen_totaal <- scores_waterschappen_totaal$Wegbeheerder

grafiekkleuren <- list(color = c(blue_vals[3], green_vals[3]))

Benchmark 70 km/u

# maak een benchmark grafiek voor waterschaps-wegbeheerders met wegen met limiet 70
fig70wat <- figuur.benchmark(scores_wegbeheerder_limiet = scores_waterschappen_70, 
                              limiet = 70,
                              groepskeuzen_wegbeheerder_limiet = groepskeuzen_waterschappen_70,
                              landelijke_score_limiet = landelijke_score_70)
# Display the plot
fig70wat

Benchmark 80 km/u

# maak een benchmark grafiek voor waterschaps-wegbeheerders met wegen met limiet 80
fig80wat <- figuur.benchmark(scores_wegbeheerder_limiet = scores_waterschappen_80, 
                              limiet = 80,
                              groepskeuzen_wegbeheerder_limiet = groepskeuzen_waterschappen_80,
                              landelijke_score_limiet = landelijke_score_80)

# Display the plot
fig80wat

Benchmark 100 km/u

# maak een benchmark grafiek voor waterschaps-wegbeheerders met wegen met limiet 100
fig100wat <- figuur.benchmark(scores_wegbeheerder_limiet = scores_waterschappen_100, 
                              limiet = 100,
                              groepskeuzen_wegbeheerder_limiet = groepskeuzen_waterschappen_100,
                              landelijke_score_limiet = landelijke_score_100)

# Display the plot
fig100wat

Benchmark Totaal

# maak een benchmark grafiek voor waterschaps-wegbeheerders met wegen met limiet 60
fig_totaal_wat <- figuur.benchmark(scores_wegbeheerder_limiet = scores_waterschappen_totaal, 
                              limiet = "totaal",
                              groepskeuzen_wegbeheerder_limiet = groepskeuzen_waterschappen_totaal,
                              landelijke_score_limiet = landelijke_score_totaal)
# Display the plot
fig_totaal_wat

6.6 Aandachtspunten bij de SPI Veilige Infrastructuur - kenmerk Aanwezigheid rijbaanscheiding

Het kenmerk geeft geen volledig beeld van de situatie van rijbaanscheidingen van wegen met een snelheidslimiet van 70km/uur of hoger.

  • Geleiderails betreft geen verplicht onderdeel van de BGT. De BGT is daarom op dat vlak onvolledig, evenals de WKD rijbaanscheiding dat daarvan is afgeleid. Het is niet duidelijk wat de mate van registratie is in de BGT. Wegbeheerders die constateren dat wegvakken waar geleiderails of barriers aanwezig zijn in de middenberm onterecht worden afgekeurd, wordt aanbevolen om deze op te nemen in hun eigen BGT (IMGeo plustopografie) en deze te leveren aan de landelijke database. Ook kan dit element worden geleverd aan het NWB. Hiervoor kan met NWB contact op worden genomen.
  • Bij de bepaling van de middenbermbreedte is geen rekening gehouden met de aanwezigheid van solitaire of continue obstakels. In de toekomst is dit wel gewenst. Een middenberm is enkel duurzaam veilig is deze zelf ook vergevingsgezind is. Registratie van het type geleiderails/barrier is daarom ook wenselijk.
  • Bij de bepaling van het aandeel van de lengte van een wegvak dat voldoet aan de criteria van de rijrichtingscheiding kon nog niet goed rekening worden gehouden met de aanwezigheid van kruispunten en afwijkende vormgeving(seisen) daar. Nu is gekozen voor een pragmatische oplossing door te toetsen op de aanwezigheid van de rijbaanscheiding op 90% van het wegvak. Direct meenemen van kruispunten is echter wel wenselijk bij de doorontwikkeling van dit onderdeel. Er wordt gewerkt aan de identificatie van kruispunten. Na oplevering van dat product is een doorontwikkeling van dit onderdeel mogelijk.
  • Wegvakken uit het NWB met het BST_CODE kenmerk HR en leeg, RPE_CODE # en limiet 70/80/100 zijn geselecteerd voor het maken van de beoordeling in het WKD bestand op de aanwezigheid van een middenberm of geleiderails in de middenberm. Een ander kenmerk in het NWB welke gebruikt zou kunnen worden voor een dergelijke selectie is Rijrichting. Dit leek ongunstiger gelet op het voorkomen van missings en de waarde onbekend.
  • Het kennisnetwerk is strenger dan de richtlijn voor GOW80 wegen. In de richtlijn voor GOW80 wegen wordt ook een 1x2 (rijbaanxrijstrook) configuratie toegestaan (na afpellen) met een dubbele asmarkering en eventuele toevoeging van een moeilijk overrijdbare rijrichtingscheiding (zogenaamde flapjes / of broodjes). Vanuit een duurzaam veilig benadering is een fysieke scheiding echter gewenst bij deze snelheden. Daarom is de standaard breedte van een middenberm bij een 2x2 rijbaan profiel gehanteerd voor dit type weg. Zie ook de risico-indicator Veilige infrastructuur
  • Dimensies van de rijrichtingscheiding zijn die van de middenberm zelf. Dus niet gemeten vanaf de binnenkant kantmarkering.
  • Bij SW100 wegen wordt een middenberm zonder geleiderail afgeraden gelet op het ruimtelijk beslag van de vereiste middenbermbreedte van 20m.

7 Data export wegvakken

De in het vorige hoofdstuk behandelde scores per wegbeheerder zijn bepaald op basis van scores op netwerk niveau. Van het gehele netwerk is bepaald hoeveel % voldoet aan het kenmerk SPI Veilige Infrastructuur - Aanwezigheid rijbaanscheiding. Daarnaast is per wegvak bepaald of voor 90% van het wegvak of meer een voldoende beoordeelde rijbaanscheiding aanwezig is. Per wegvak zijn de volgende kenmerken vastgelegd:

# sf df om te exporteren
nwb_rijbaanscheiding_export <- nwb_rijbaanscheiding %>%
    mutate(rijbaanscheiding_aanwezig = ifelse(rijbaanscheiding_voldoende == 1, "rijbaanscheiding voldoende aanwezig", "rijbaanscheiding niet voldoende aanwezig")) %>%
  relocate(BST_CODE, .after = GME_NAAM) %>%
  relocate(rijbaanscheiding_voldoende, rijbaanscheiding_aanwezig, .after = Snelheidslimiet) %>%
  relocate(aandeel_bubeko, lengte_limiet_aandeel, .after = lengte_wegvak_straat)

# names(nwb_rijbaanscheiding_export)

# Attributen tabel in tekstformat
nwb_rijbaanscheiding_export_attributentabel <- rbind( 
  c("Attribuut", "Omschrijving"),
  c("WVK_ID", "NWB variabele - Wegvak-ID: De unieke identificatie van een wegvak    "), 
  c("Snelheidslimiet", "De maximum snelheid of snelheidslimiet, op basis van de WKD. Wanneer het wegvak
    meerdere limieten kent, is de limiet die toegekent die het grootste aandeel van het wegvak beslaat."),
  c("rijbaanscheiding_voldoende","Beoordeling of het wegvak voldoet, 90% of meer van het wegvak heeft een voldoende beoordeelde rijbaanscheiding: 
    1: voldoet, 0: voldoet niet"),
  c("rijbaanscheiding_aanwezig","Beoordeling of langs het wegvak, in de middenberm, voldoende rijbaanscheiding aanwezig is: 
    Rijbaanscheiding voldoende aanwezig / rijbaanscheiding niet voldoende aanwezig"),
  c("wegvaklengte","Lengte van het wegvak in meters"),
  c("lengte_wegvak_straat", "De relatieve lengte van het wegvak naar weg-/straatniveau: 0,5 x wegvaklengte
     indien RPE_CODE <> '#' (ofwel de rijrichtingen zijn apart ingetekend)"),
  c("lengte_geleiderails","De lengte [m] waar geleiderails in de middenberm aanwezig is"),
  c("lengte_middenberm_voldoende","De lengte [m] waar voldoende brede middenberm aanwezig is langs het wegvak"),
  c("lengte_middenberm_onvoldoende","De lengte [m] waar onvoldoende brede middenberm aanwezig is langs het wegvak"),
  c("lengte_rijbaanscheiding_voldoende","De lengte van voldoende beoordeelde rijbaanscheiding langs het wegvak: lengte_geleiderails + lengte_middenberm_voldoende"),
    c("lengte_rijbaanscheiding_fysiek","De lengte van aanwezige rijbaanscheiding langs het wegvak: lengte_geleiderails + lengte_middenberm_voldoende + lengte_middenberm_onvoldoende"),
  c("aandeel_bubeko","Het aandeel van het wegvak dat buiten de kom ligt"),
  c("lengte_limiet_aandeel","Het aandeel van het wegvak waarvoor de toegekende snelheidslimiet geldt"),
  c("WEGBEHSRT","NWB variabele - Wegbeheerdersoort: De categorie wegbeheerder (R, P, G, W of T)"),
  c("WEGBEHNAAM","NWB variabele - Wegbeheerdernaam: De naam van de wegbeheerder van de weg"),
  c("WEGNUMMER","NWB variabele - Wegnummer: Het wegnummer zoals deze formeel is vastgelegd"),
  c("STT_NAAM","NWB variabele - Straatnaam: De straatnaam zoals in BAG wordt gehanteerd of is vastgesteld door de wegbeheerder"),
  c("WPSNAAM","NWB variabele - Woonplaats: De naam van de woonplaats zoals in BAG gehanteerd wordt"),
  c("GME_NAAM","NWB variabele - Gemeentenaam: De naam van een gemeente zoals in BAG gehanteerd wordt"),
  c("BST_CODE","NWB variabele - Baansubsoortcode: Een subtypering van een baansoort"),
  c("RPE_CODE","NWB variabele - De relatieve positie van een wegvak ten opzicht van een parallel daaraan lopend wegvak met dezelfde naam")
  ) %>%
  as.data.frame()

# kolomnamen op basis van eerste rij
names(nwb_rijbaanscheiding_export_attributentabel) <-nwb_rijbaanscheiding_export_attributentabel[1,]

# verwijder eerste rij
nwb_rijbaanscheiding_export_attributentabel <- nwb_rijbaanscheiding_export_attributentabel[-1,]

# maak een scrol tabel van de attributen tabel
scroltabel_gt(nwb_rijbaanscheiding_export_attributentabel, title = "Attributentabel gegevensexport" )
Attributentabel gegevensexport
Attribuut Omschrijving
WVK_ID NWB variabele - Wegvak-ID: De unieke identificatie van een wegvak
Snelheidslimiet De maximum snelheid of snelheidslimiet, op basis van de WKD. Wanneer het wegvak meerdere limieten kent, is de limiet die toegekent die het grootste aandeel van het wegvak beslaat.
rijbaanscheiding_voldoende Beoordeling of het wegvak voldoet, 90% of meer van het wegvak heeft een voldoende beoordeelde rijbaanscheiding: 1: voldoet, 0: voldoet niet
rijbaanscheiding_aanwezig Beoordeling of langs het wegvak, in de middenberm, voldoende rijbaanscheiding aanwezig is: Rijbaanscheiding voldoende aanwezig / rijbaanscheiding niet voldoende aanwezig
wegvaklengte Lengte van het wegvak in meters
lengte_wegvak_straat De relatieve lengte van het wegvak naar weg-/straatniveau: 0,5 x wegvaklengte indien RPE_CODE <> '#' (ofwel de rijrichtingen zijn apart ingetekend)
lengte_geleiderails De lengte [m] waar geleiderails in de middenberm aanwezig is
lengte_middenberm_voldoende De lengte [m] waar voldoende brede middenberm aanwezig is langs het wegvak
lengte_middenberm_onvoldoende De lengte [m] waar onvoldoende brede middenberm aanwezig is langs het wegvak
lengte_rijbaanscheiding_voldoende De lengte van voldoende beoordeelde rijbaanscheiding langs het wegvak: lengte_geleiderails + lengte_middenberm_voldoende
lengte_rijbaanscheiding_fysiek De lengte van aanwezige rijbaanscheiding langs het wegvak: lengte_geleiderails + lengte_middenberm_voldoende + lengte_middenberm_onvoldoende
aandeel_bubeko Het aandeel van het wegvak dat buiten de kom ligt
lengte_limiet_aandeel Het aandeel van het wegvak waarvoor de toegekende snelheidslimiet geldt
WEGBEHSRT NWB variabele - Wegbeheerdersoort: De categorie wegbeheerder (R, P, G, W of T)
WEGBEHNAAM NWB variabele - Wegbeheerdernaam: De naam van de wegbeheerder van de weg
WEGNUMMER NWB variabele - Wegnummer: Het wegnummer zoals deze formeel is vastgelegd
STT_NAAM NWB variabele - Straatnaam: De straatnaam zoals in BAG wordt gehanteerd of is vastgesteld door de wegbeheerder
WPSNAAM NWB variabele - Woonplaats: De naam van de woonplaats zoals in BAG gehanteerd wordt
GME_NAAM NWB variabele - Gemeentenaam: De naam van een gemeente zoals in BAG gehanteerd wordt
BST_CODE NWB variabele - Baansubsoortcode: Een subtypering van een baansoort
RPE_CODE NWB variabele - De relatieve positie van een wegvak ten opzicht van een parallel daaraan lopend wegvak met dezelfde naam

Op basis hiervan is eenvoudig te visualiseren welke wegvakken van een wegbeheerder al dan niet voldoen aan dit kenmerk. Onderstaand geven we hiervan een voorbeeld voor wegen met limiet 80 van de provincie Zuid-Holland

rijbaanscheiding_ZH <- nwb_rijbaanscheiding_export %>%
  filter(WEGBEHNAAM == "Zuid-Holland" & Snelheidslimiet == "80")
mapview(rijbaanscheiding_ZH, zcol = "rijbaanscheiding_aanwezig", legend = TRUE)

Wegvakken in de kaart zijn aan te klikken. Daarmee wordt de attributen tabel van het wegvak geladen en kunnen andere scores en kenmerken van het wegvak worden bekeken.

Deze data is geëxporteerd naar een tekstbestand (csv, scheidingsteken ‘;’, decimaalscheidingsteken ‘,’) en gis bestand (geopackage, ofwel gpkg). De export bevat alle voor deze analyse geselecteerde wegvakken in Nederland. Beide datasets zijn via een aparte downloadoptie openbaar beschikbaar. Het tekstbestand is geschikt voor het openen in bijvoorbeeld Excel. Het geopackage kan gebruikt worden in een gis viewer, bijvoorbeeld QGIS. Let op dat het decimaal scheidingsteken een ‘,’ betreft conform de Nederlandse standaard. De data in het geopackage is ‘.’ decimaalgescheiden (conform internationale standaarden).

# export naar csv, verwijder daarvoor geometry
write.table(st_drop_geometry(nwb_rijbaanscheiding_export), here("Output", "SPI_kenmerkscore_rijbaanscheiding.csv"),
          row.names = FALSE, sep = ";", dec = ",", quote = TRUE)

# export naar geopackage
st_write(nwb_rijbaanscheiding_export, here("Output", "SPI_kenmerkscore_rijbaanscheiding.gpkg"), Append = FALSE, delete_dsn = TRUE)

# let op, het script overschrijft bestaande datasets met dezelfde naam. Maak een kopie van de dataset als je deze bewerkt en wilt bewaren