# Wijk- en buurtkaart

De officiële grenzen van alle gemeenten, wijken en buurten, als kaartlaag (WFS) en als download. De geometrie die je nodig hebt om buurtcijfers op een kaart te zetten.

- Uitgever: Publieke Dienstverlening Op de Kaart, Centraal Bureau voor de Statistiek, Kadaster
- Gebied: Nederland · Laagste detail: buurt
- Periode: 2003 – 2026 (2026 als OGC API, versie 0) · Ververst: jaarlijks
- Toegang: Open · Licentie: CC BY 4.0
- Koppelsleutels: buurtcode (BU), wijkcode (WK), gemeentecode (GM)
- Status: grijs
- URL: https://www.pdok.nl

## Wat kun je ermee?
- **Van tabel naar kaart.** Elke CBS-tabel met buurtcodes wordt een kaart zodra je de grenzen erbij haalt.
- **Buren vinden.** Bereken welke buurten aan elkaar grenzen. Handig voor vergelijkingen met de directe omgeving.

## Zo verwerk je het
1. **De nieuwste grenzen via de OGC API.** De wijk- en buurtkaart 2026 (versie 0, bijgewerkt 16 juni 2026) staat alleen als OGC API Features, met de collecties gemeenten, wijken en buurten. Filter op wk_code of bu_code. De jaargangen 2022 tot en met 2025 en een historische reeks hebben elk een eigen OGC API (…/cbs/wijken-en-buurten-2025/ogc/v1 enzovoort).
   `https://api.pdok.nl/cbs/wijken-en-buurten-2026/ogc/v1/collections/buurten/items?f=json&wk_code=WK034401`
2. **Andere regio-indelingen.** CBS Gebiedsindelingen (2016 tot heden) heeft 63 collecties: per indeling een gegeneraliseerde vorm en een labelpunt, bij gemeente, wijk en buurt ook de precieze grens. Onder meer GGD-regio, veiligheidsregio, arbeidsmarktregio, COROP, NUTS, RES-regio, jeugdregio en zorgkantoorregio. Filteren kan alleen op jaarcode; de code staat in statcode.
   `https://api.pdok.nl/cbs/gebiedsindelingen/ogc/v1/collections/ggdregio_gegeneraliseerd/items?f=json&jaarcode=2025&limit=30`
3. **Officiële gemeentegrens van het Kadaster.** De wijk- en buurtkaart neemt de gemeentegrens over uit de Basisregistratie Kadaster. Die grens zelf, met provincie- en landsgrens, staat in de OGC API Bestuurlijke Gebieden (CC BY 4.0, bijgewerkt 28 januari 2026). Filter op naam of identificatie (GM-code).
   `https://api.pdok.nl/kadaster/brk-bestuurlijke-gebieden/ogc/v1/collections/gemeentegebied/items?f=json&naam=Utrecht`

## Interessante koppelingen
- Een kaart van inkomen per buurt → [cbs-kwb](https://www.opendataindex.nl/bron/cbs-kwb.md) via buurtcode (BU). Koppel op code en kies dezelfde jaargang voor grenzen en cijfers.

## Vergelijkbare bronnen
- [Gebiedsindelingen (CBS)](https://www.cbs.nl/nl-nl/dossier/nederland-regionaal/geografische-data): Ook COROP, GGD-regio's, veiligheidsregio's en meer.

## Waar je op moet letten
- **2026 is nog voorlopig en alleen als OGC API.** De kaart 2026 heet 'versie 0'. Op 16 oktober 2026 bestond er geen WFS voor 2026 (…/wijkenbuurten/2026/wfs/v1_0 gaf 404); de WFS gaat tot en met 2025.
- **Niet elke indeling heeft al 2026.** In Gebiedsindelingen stonden op 16 oktober 2026 de gemeenten van 2026 er wel in, maar buurten en GGD-regio's nog alleen tot en met 2025. Controleer de jaarcode voor je koppelt.

## API (OGC WFS 2.0.0)

- Basis: https://service.pdok.nl/cbs/wijkenbuurten/2024/wfs/v1_0
- Toegang: Geen sleutel. Kosten: none; gebruiksvoorwaarden: https://creativecommons.org/publicdomain/zero/1.0/deed.nl. (uit de beschrijving)
- Formaten: application/gml+xml; version=3.2, text/xml; subtype=gml/3.2.1, text/xml; subtype=gml/3.1.1, application/json; subtype=geojson, application/json
- Omvang: 14668 objecten in wijkenbuurten:buurten (getest)
- Filteren: OGC Filter Encoding (FES 2.0); PropertyIsEqualTo, PropertyIsNotEqualTo, PropertyIsLessThan, PropertyIsGreaterThan, PropertyIsLessThanOrEqualTo, PropertyIsGreaterThanOrEqualTo, PropertyIsLike, PropertyIsBetween, PropertyIsNull, Equals, Disjoint, Touches, Within, Overlaps, Crosses, Intersects, Contains, DWithin, Beyond, BBOX, During

### Endpoints
- `GET ?request=GetCapabilities`: beschrijving van de dienst
- `GET ?request=DescribeFeatureType`: velden van een laag (XSD)
- `GET ?request=GetFeature`: de objecten zelf, met geometrie
- `GET ?request=ListStoredQueries`: opgeslagen zoekvragen
- `GET ?request=DescribeStoredQueries`: uitleg bij opgeslagen zoekvragen

### Parameters
- `typeNames`: welke laag: wijkenbuurten:buurten, wijkenbuurten:wijken, wijkenbuurten:gemeenten (uit de beschrijving)
- `outputFormat`: bv. application/json voor GeoJSON (uit de beschrijving)
- `srsName`: projectie, bv. EPSG:4326 voor webkaarten (standaard EPSG:28992, RD) (uit de beschrijving)
- `count / startIndex`: pagineren (uit de beschrijving)
- `filter`: FES-XML-filter op velden of geometrie (uit de beschrijving)
- `bbox`: rechthoek in de gekozen projectie (platform)

### Velden (246)
`geom` geometrie, `buurtcode` string, `buurtnaam` string, `wijkcode` string, `gemeentecode` string, `gemeentenaam` string, `indelingswijzigingWijkenEnBuurten` integer, `water` string, `meestVoorkomendePostcode` string, `dekkingspercentage` integer, `omgevingsadressendichtheid` integer, `stedelijkheidAdressenPerKm2` integer, `bevolkingsdichtheidInwonersPerKm2` integer, `aantalInwoners` integer, `mannen` integer, `vrouwen` integer, `percentagePersonen0Tot15Jaar` integer, `percentagePersonen15Tot25Jaar` integer, `percentagePersonen25Tot45Jaar` integer, `percentagePersonen45Tot65Jaar` integer, `percentagePersonen65JaarEnOuder` integer, `percentageOngehuwd` integer, `percentageGehuwd` integer, `percentageGescheid` integer, `percentageVerweduwd` integer, `geboorteTotaal` integer, `geboortesPer1000Inwoners` integer, `sterfteTotaal` integer, `sterfteRelatief` integer, `aantalHuishoudens` integer, `percentageEenpersoonshuishoudens` integer, `percentageHuishoudensZonderKinderen` integer, `percentageHuishoudensMetKinderen` integer, `gemiddeldeHuishoudsgrootte` double, `percentageMetHerkomstlandNederland` integer, `percentageMetHerkomstlandUitEuropaExclNl` integer, `percentageMetHerkomstlandBuitenEuropa` integer, `percentageGebInNlMetHerkomstlandNederland` integer, `percGebInNlMetHerkomstlandInEuropaExNl` integer, `percGebInNlMetHerkomstlandBuitenEuropa` integer, `percGebBuitenNlMetHerkomstlndInEuropaExNl` integer, `percGebBuitenNlMetHerkomstlndBuitenEuropa` integer, `aantalBedrijvenLandbouwBosbouwVisserij` integer, `aantalBedrijvenNijverheidEnergie` integer, `aantalBedrijvenHandelEnHoreca` integer, `aantalBedrijvenVervoerInformatieCommunicatie` integer, `aantalBedrijvenFinancieelOnroerendGoed` integer, `aantalBedrijvenZakelijkeDienstverlening` integer, `aantalBedrijvenOverheidOnderwijsEnZorg` integer, `aantalBedrijvenCultuurRecreatieOverige` integer, `aantalBedrijfsvestigingen` integer, `woningvoorraad` integer, `gemiddeldeWoningwaarde` integer, `percentageEengezinswoning` integer, `percentageMeergezinswoning` integer, `percentageBewoond` integer, `percentageKoopwoningen` integer, `percentageHuurwoningen` integer, `percHuurwoningenInBezitWoningcorporaties` integer, `percHuurwoningenInBezitOverigeVerhuurders` integer, `percentageWoningenMetEigendomOnbekend` integer, `percentageBouwjaarklasseTot2000` integer, `percentageBouwjaarklasseVanaf2000` integer, `percentageLeegstandWoningen` integer, `gemiddeldGasverbruikTotaal` integer, `gemiddeldGasverbruikAppartement` integer, `gemiddeldGasverbruikTussenwoning` integer, `gemiddeldGasverbruikHoekwoning` integer, `gemiddeldGasverbruik2Onder1KapWoning` integer, `gemiddeldGasverbruikVrijstaandeWoning` integer, `gemiddeldGasverbruikHuurwoning` integer, `gemiddeldGasverbruikkoopwoning` integer, `gemiddeldElektriciteitsverbruikTotaal` integer, `gemiddeldElektriciteitsverbruikAppartement` integer, `gemiddeldElektriciteitsverbruikTussenwoning` integer, `gemiddeldElektriciteitsverbruikHoekwoning` integer, `gemElektriciteitsverbruik2Onder1KapWoning` integer, `gemElektriciteitsverbruikVrijstaandeWoning` integer, `gemiddeldElektriciteitsverbruikHuurwoning` integer, `gemiddeldElektriciteitsverbruikkoopwoning` integer, `percentageWoningenMetStadsverwarming` integer, `opleidingsniveauLaag` integer, `opleidingsniveauMiddelbaar` integer, `opleidingsniveauHoog` integer, `nettoArbeidsparticipatie` integer, `percentageWerknemers` integer, `percentageZelfstandigen` integer, `aantalInkomensontvangers` integer, `gemiddeldInkomenPerInkomensontvanger` integer, `gemiddeldInkomenPerInwoner` integer, `percentagePersonenMetHoogInkomen` integer, `percentagePersonenMetLaagInkomen` integer, `percentageHuishoudensMetHoogInkomen` integer, `percentageHuishoudensMetLaagInkomen` integer, `percentageHuishoudensMetLaagsteInkomen` integer, `percentageHuishoudensOnderOfRondSociaalMinimum` integer, `aantalPersonenMetEenAoUitkeringTotaal` integer, `aantalPersonenMetEenWwUitkeringTotaal` integer, `aantalPersonenMetEenAlgBijstandsuitkeringTot` integer, `aantalPersonenMetEenAowUitkeringTotaal` integer, `gemiddeldGestandaardiseerdInkomenVanHuishoudens` double, `huishoudensTot110PercentVanSociaalMinimum` double, `huishoudensTot120PercentVanSociaalMinimum` double, `mediaanVermogenVanParticuliereHuish` double, `aantalJongerenMetJeugdzorgInNatura` integer, `percentageJongerenMetJeugdzorgInNatura` double, `aantalWmoClienten` integer, `aantalWmoClientenPer1000Inwoners` integer, `personenautosTotaal` integer, `personenautosPerHuishouden` double, `personenautosPerKm2` integer, `motortweewielersTotaal` integer, `aantalPersonenautosMetBrandstofBenzine` integer, `aantalPersonenautosMetOverigeBrandstof` integer, `oppervlakteTotaalInHa` integer, `oppervlakteLandInHa` integer, `oppervlakteWaterInHa` integer, `huisartsenpraktijkGemiddeldeAfstandInKm` double, `huisartsenpraktijkGemiddeldAantalBinnen1Km` double, `huisartsenpraktijkGemiddeldAantalBinnen3Km` double, `huisartsenpraktijkGemiddeldAantalBinnen5Km` double, `huisartsenpostGemiddeldeAfstandInKm` double, `apotheekGemiddeldeAfstandInKm` double, `ziekenhuisInclBuitenpolikliniekGemAfstInKm` double, `ziekenhuisInclBuitenpoliGemAantalBinnen5Km` double, `ziekenhuisInclBuitenpoliGemAantalBinnen10Km` double, `ziekenhuisInclBuitenpoliGemAantalBinnen20Km` double, `ziekenhuisExclBuitenpolikliniekGemAfstInKm` double, `ziekenhuisExclBuitenpoliGemAantalBinnen5Km` double, `ziekenhuisExclBuitenpoliGemAantalBinnen10Km` double, `ziekenhuisExclBuitenpoliGemAantalBinnen20Km` double, `groteSupermarktGemiddeldeAfstandInKm` double, `groteSupermarktGemiddeldAantalBinnen1Km` double, `groteSupermarktGemiddeldAantalBinnen3Km` double, `groteSupermarktGemiddeldAantalBinnen5Km` double, `winkelsOvDagelijkseLevensmGemAfstInKm` double, `winkelsOvDagelLevensmGemAantalBinnen1Km` double, `winkelsOvDagelLevensmGemAantalBinnen3Km` double, `winkelsOvDagelLevensmGemAantalBinnen5Km` double, `warenhuisGemiddeldeAfstandInKm` double, `warenhuisGemiddeldAantalBinnen5Km` double, `warenhuisGemiddeldAantalBinnen10Km` double, `warenhuisGemiddeldAantalBinnen20Km` double, `cafeGemiddeldeAfstandInKm` double, `cafeGemiddeldAantalBinnen1Km` double, `cafeGemiddeldAantalBinnen3Km` double, `cafeGemiddeldAantalBinnen5Km` double, `cafetariaGemiddeldeAfstandInKm` double, `cafetariaGemiddeldAantalBinnen1Km` double, `cafetariaGemiddeldAantalBinnen3Km` double, `cafetariaGemiddeldAantalBinnen5Km` double, `restaurantGemiddeldeAfstandInKm` double, `restaurantGemiddeldAantalBinnen1Km` double, `restaurantGemiddeldAantalBinnen3Km` double, `restaurantGemiddeldAantalBinnen5Km` double, `hotelGemiddeldeAfstandInKm` double, `hotelGemiddeldAantalBinnen5Km` double, `hotelGemiddeldAantalBinnen10Km` double, `hotelGemiddeldAantalBinnen20Km` double, `kinderdagverblijfGemiddeldeAfstandInKm` double, `kinderdagverblijfGemiddeldAantalBinnen1Km` double, `kinderdagverblijfGemiddeldAantalBinnen3Km` double, `kinderdagverblijfGemiddeldAantalBinnen5Km` double, `buitenschoolseOpvangGemAfstandInKm` double, `buitenschoolseOpvangGemiddeldAantalBinnen1Km` double, `buitenschoolseOpvangGemiddeldAantalBinnen3Km` double, `buitenschoolseOpvangGemiddeldAantalBinnen5Km` double, `basisonderwijsGemiddeldeAfstandInKm` double, `basisonderwijsGemiddeldAantalBinnen1Km` double, `basisonderwijsGemiddeldAantalBinnen3Km` double, `basisonderwijsGemiddeldAantalBinnen5Km` double, `voortgezetOnderwijsGemAfstandInKm` double, `voortgezetOnderwijsGemiddeldAantalBinnen3Km` double, `voortgezetOnderwijsGemiddeldAantalBinnen5Km` double, `voortgezetOnderwijsGemiddeldAantalBinnen10Km` double, `vmboGemiddeldeAfstandInKm` double, `vmboGemiddeldAantalBinnen3Km` double, `vmboGemiddeldAantalBinnen5Km` double, `vmboGemiddeldAantalBinnen10Km` double, `havoVwoGemiddeldeAfstandInKm` double, `havoVwoGemiddeldAantalBinnen3Km` double, `havoVwoGemiddeldAantalBinnen5Km` double, `havoVwoGemiddeldAantalBinnen10Km` double, `brandweerkazerneGemiddeldeAfstandInKm` double, `opritHoofdverkeerswegGemiddeldeAfstandInKm` double, `treinstationGemiddeldeAfstandInKm` double, `overstapstationGemiddeldeAfstandInKm` double, `zwembadGemiddeldeAfstandInKm` double, `kunstijsbaanGemiddeldeAfstandInKm` double, `bibliotheekGemiddeldeAfstandInKm` double, `poppodiumGemiddeldeAfstandInKm` double, `bioscoopGemiddeldeAfstandInKm` double, `bioscoopGemiddeldAantalBinnen5Km` double, `bioscoopGemiddeldAantalBinnen10Km` double, `bioscoopGemiddeldAantalBinnen20Km` double, `saunaGemiddeldeAfstandInKm` double, `zonnebankGemiddeldeAfstandInKm` double, `attractieparkGemiddeldeAfstandInKm` double, `attractieparkGemiddeldAantalBinnen10Km` double, `attractieparkGemiddeldAantalBinnen20Km` double, `attractieparkGemiddeldAantalBinnen50Km` double, `theaterGemiddeldeAfstandInKm` double, `theaterGemiddeldAantalBinnen5Km` double, `theaterGemiddeldAantalBinnen10Km` double, `theaterGemiddeldAantalBinnen20Km` double, `gemiddeldeAfstandTotMuseum` double, `gemiddeldAantalMuseaBinnen5Km` double, `gemiddeldAantalMuseaBinnen10Km` double, `gemiddeldAantalMuseaBinnen20Km` double, `afstandTotOpenbaarGroenTotaal` double, `afstandTotParkOfPlantsoen` double, `afstandTotDagrcreatiefTerrein` double, `afstandTotBos` double, `afstandTotOpenNatuurTerreinTotaal` double, `afstandTotOpenDroogNatuurTerrein` double, `afstandTotOpenNatNatuurlijkTerrein` double, `afstandTotSemiopenbaarGroenTotaal` double, `afstandTotSportterrein` double, `afstandTotVolkstuin` double, `afstandTotVerblijfsrecreatiefTerrein` double, `afstandTotRecreatiefBinnenwater` double, `afstandTotBegraafplaats` double, `jrstatcode` string, `jaar` integer, `aantalNieuwbouwWoningen` double, `aantalNietWoningvoorraad` integer, `aantalNieuwbouwNietWoningen` integer, `percEengezinswoningTussenwoning` double, `percEengezinswoningHoekwoning` double, `percEengezinswoning2Onder1Kap` double, `percEengezinswoningVrijstaand` double, `percBouwjaarMeerDan10JaarGeleden` double, `percBouwjaarAfgelopen10Jaar` double, `percentageOnbewoond` integer, `gemiddeldAardgasverbruik` integer, `percentageAardgaswoningen` double, `percentageAardgasvrijeWoningen` double, `gemiddeldeElektriciteitslevering` double, `gemiddeldeElektriciteitsteruglevering` double, `percentageWoningenMetZonnestroom` double, `aantalLeerlingenPrimairOnderwijs` integer, `aantalLeerlingenVoortgezetOnderwijs` integer, `aantalStudentenMbo` integer, `aantalStudentenHbo` integer, `aantalStudentenWo` integer, `fuuid` string

### Limieten en valkuilen
- Maximaal 1.000 objecten per verzoek (CountDefault). (uit de beschrijving)
- Pagineren kan: count en startIndex (ImplementsResultPaging). (uit de beschrijving)
- Elk jaar is een aparte dienst (…/wijkenbuurten/2024/…). Neem de grenzen van hetzelfde jaar als je cijfers. (ervaring)
- Standaard komt alles in RD (EPSG:28992). Voor een webkaart vraag je srsName=EPSG:4326 of EPSG:3857. (ervaring)
- Negatieve waarden zoals -99997 zijn codes (geheim of onbekend), geen getallen. Filter ze weg voor je rekent. De eerste buurt in de dienst is 'Buitenland' met aantalInwoners -99997. (getest)

### Voorbeeld
```
https://service.pdok.nl/cbs/wijkenbuurten/2024/wfs/v1_0?request=GetFeature&service=WFS&version=2.0.0&typeNames=wijkenbuurten:buurten&outputFormat=application/json&srsName=EPSG:4326&count=1&propertyName=buurtcode,buurtnaam,gemeentenaam,aantalInwoners
```

## Wat je ermee kunt bouwen
- [Aardbevingentracker: elke beving op de kaart, met gemeente en woningen](https://www.opendataindex.nl/bouwen/aardbevingentracker.md): Een kaart en tijdlijn van alle bevingen in Nederland sinds 1986, met kracht, soort, gemeente en buurt, en het aantal adressen binnen twee kilometer van het epicentrum.
- [Buurtmonitor veiligheid: overlast en misdrijven per buurt](https://www.opendataindex.nl/bouwen/buurtmonitor-veiligheid.md): Een dashboard dat voor elke buurt in je gemeente laat zien hoeveel overlast en misdrijven de politie registreert, per 1.000 inwoners en door de jaren heen, met een kaart en een vergelijking met heel Nederland.
- [Laadpunten per buurt en per elektrische auto](https://www.opendataindex.nl/bouwen/laadpalen-per-buurt.md): Een kaart van je gemeente die per buurt laat zien hoeveel publieke laadpunten er zijn, per 1.000 inwoners en per 100 auto's, en hoeveel elektrische auto's er op één laadpunt aangewezen zijn.
- [Verkiezingskaart: uitslag, verschuiving en opkomst per gemeente](https://www.opendataindex.nl/bouwen/verkiezingskaart.md): Een kaart van alle 342 gemeenten met de grootste partij, de winst of het verlies sinds de vorige verkiezing en de opkomst, naast het inkomen per inwoner.


## Voorbeelden met echte cijfers (1)

Per voorbeeld de bevinding, de peildatum en de aanroep die precies deze cijfers ophaalt.

- **Water als deel van het gemeentegebied: het hoogst in Harlingen (93,6%), het laagst in Simpelveld en 4 andere gemeenten (0,0%)** (2025). Tabel wijkenbuurten:gemeenten. [Voorbeeld](https://www.opendataindex.nl/voorbeeld/pdok-wijkenbuurten-water)
  - `https://service.pdok.nl/cbs/wijkenbuurten/2025/wfs/v1_0?service=WFS&version=2.0.0&request=GetPropertyValue&typeNames=wijkenbuurten:gemeenten&valueReference=oppervlakteWaterInHa&sortBy=gemeentecode&FILTER=%3CFilter%3E%3CPropertyIsEqualTo%3E%3CValueReference%3Ewater%3C%2FValueReference%3E%3CLiteral%3ENEE%3C%2FLiteral%3E%3C%2FPropertyIsEqualTo%3E%3C%2FFilter%3E`
  - `https://service.pdok.nl/cbs/wijkenbuurten/2025/wfs/v1_0?service=WFS&version=2.0.0&request=GetPropertyValue&typeNames=wijkenbuurten:gemeenten&valueReference=oppervlakteTotaalInHa&sortBy=gemeentecode&FILTER=%3CFilter%3E%3CPropertyIsEqualTo%3E%3CValueReference%3Ewater%3C%2FValueReference%3E%3CLiteral%3ENEE%3C%2FLiteral%3E%3C%2FPropertyIsEqualTo%3E%3C%2FFilter%3E`
