pdokr: Nederlandse geodata rechtstreeks in R

Gemeentegrenzen, buurten, gebouwen en andere open geodata van PDOK direct in R laden en analyseren. Mijn tweede CRAN-package!

Data & R
Auteur

Coen Eisma

Publicatiedatum

5 augustus 2026

Illustratie van de pdokr-hexsticker op een uitgevouwen kaart van Nederland, met kaartlagen en locatiepins

Na kvkapiR staat er sinds 22 juli een tweede package van mij op CRAN: pdokr. pdokr maakt het supermakkelijk om officiële Nederlandse geodata rechtstreeks in R te laden.

Geodata voor iedereen

PDOK (Publieke Dienstverlening Op de Kaart) is hét platform voor open geodata van de Nederlandse overheid: denk aan gemeente-, wijk- en buurtgrenzen van het CBS, gebouwen uit de BAG, topografie, luchtfoto’s en nog veel meer. Allemaal gratis en zonder API-key.

Toch blijft deze waardevolle databron voor veel data-analisten en -scientists vaak onaangeboord: wie niet dagelijks met geodata werkt, haakt af op termen als OGC-services, WFS-URL’s en coördinaatstelsels. Dat is precies wat pdokr grotendeels wegneemt. Je zoekt een dataset (pdok_search_datasets(), pdok_list_layers()), leest een laag in met pdok_read(), en filtert ondertussen makkelijk op specifiek gebied of jaar. En adressen omzetten naar coördinaten, gemeente en terug kan met pdok_geocode() en pdok_reverse_geocode().

Wanneer je met pdokr en dataset inlaadt krijg je een zogenoemd sf-object: gewoon een dataframe met een geometriekolom en een sf-class. Je kunt er dus gewoon mee werken zoals je gewend bent — zoals filteren, joinen en samenvatten met dplyr — én er ruimtelijke analyses op doen met de functies uit de sf-package zoals oppervlaktes of afstanden berekenen. Of je eigen data koppelen aan officiële geodata.

Van niks naar data (en een kaart)

Een voorbeeld. Alle buurten van de gemeente Súdwest-Fryslân. De gemeentegrens komt van pdok_geocode() en dient als ruimtelijk voorfilter; omdat de (gegeneraliseerde) buurtgrenzen op de rand nét over de gemeentegrens heen kunnen vallen, filter ik daarna exact op de gemeentecode — gewoon met dplyr, want het is immers gewoon een dataframe:

library(pdokr)
library(dplyr)
library(tmap)

grens <- pdok_geocode("Súdwest-Fryslân", "gemeente")

buurten <- pdok_read(
  "cbs/gebiedsindelingen", "buurt_gegeneraliseerd",
  datetime = 2025, filter_by = grens
) |>
  filter(gm_code == paste0("GM", grens$gemeentecode))

En met bijvoorbeeld het tmap-package kun je hier nu heel makkelijk een kaart van maken:

tmap_mode("view")
tm_basemap(pdok_basemap("pastel")) +
  tm_shape(buurten) +
  tm_polygons(
    fill = "MAP_COLORS",
    fill.scale = tm_scale_categorical(
      values = c("#0E6465", "#58BDBB", "#B65A38", "#E08A63")
    ),
    fill_alpha = 0.5, col = "darkgreen", id = "statnaam"
  )

Ook de ondergrond komt van PDOK: pdok_basemap() geeft de officiële BRT Achtergrondkaart (kaartdata © Kadaster/PDOK).

Het object buurten is nu een dataset als elke andere: koppel er je eigen cijfers aan en je hebt binnen een paar minuten een analyse op buurtniveau. Geen shapefiles downloaden, geen WFS-URL’s opzoeken; gewoon direct officiële geodata live van PDOK direct in je environment.

Meer weten?

Alle documentatie staat op de packagewebsite, met vignettes over onder meer filteren en geocoderen. Suggesties of problemen? Meld het via GitHub — feedback is meer dan welkom!