# 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 – 2025 · 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.

## Interessante koppelingen
- Een kaart van inkomen per buurt → [cbs-kwb](https://www.opendataindex.nl/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.

## 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
```
