A collection of datasets from various Dutch institutions to demonstrate a Spatial Data Infrastructure built on Portolan.
Statistical data for all 6-digit postcodes (e.g. "1011AB") in the Netherlands, published by CBS (Centraal Bureau voor de Statistiek / Statistics Netherlands) via PDOK. Contains 157 attributes covering six domains: demographics, housing, energy consumption, income, social security, and proximity to facilities. Data is available from 2015 onwards, with each year measured as of January 1st. Some variables (energy, income) reflect full-year figures rather than point-in-time snapshots.
Source: https://www.pdok.nl/introductie/-/article/cbspostcode6 CBS documentation: https://www.cbs.nl/nl-nl/longread/diversen/2025/statistische-gegevens-per-vierkant-en-postcode-2022-2023-2024 OGC API Features: https://api.pdok.nl/cbs/postcode6/ogc/v1_0/ Provider: CBS (Statistics Netherlands) License: CC BY 4.0 Available years: 2015 to 2024 Geometry type: MultiPolygon
GeoParquet and PMTiles files are available from Source Cooperative. Native CRS is EPSG:28992 (RD New / Amersfoort) — coordinates are in meters, not degrees.
Base URL: https://data.source.coop/cholmes/portolan-nl/cbs/postcode6/
Also available via OGC API Features from PDOK:
https://api.pdok.nl/cbs/postcode6/ogc/v1_0/The 157 fields are organized into six statistical domains. The value -99997 means data is suppressed for privacy protection.
Distance to nearest facility and count within radius. There are 40+ facility types with metrics at 1km, 3km, 5km, 10km, and 20km radii.
Values of -99997 indicate the data is suppressed for privacy. CBS applies suppression when a postcode has fewer than 5 residents or 5 housing units. This is important: always filter out -99997 before computing averages or aggregations.
Data covers years 2015 to 2024. Each row has a jaarcode indicating the reference
year. The dataset contains multiple years stacked — filter by jaarcode to get a single
year's snapshot. Most demographic and housing data reflects the situation on January 1st
of that year. Energy and income data reflect the full preceding year.
mediaan_inkomen_huishouden) are
stored as strings due to the -99997 suppression marker. Cast to numeric after filtering.jaarcode
unless you specifically want time-series analysis.Three Mapbox GL v8 styles are available for interactive map visualization via the PMTiles file. Privacy-suppressed values (-99997) are filtered out.
Style files are Mapbox GL v8 JSON with relative PMTiles source paths. They can be used with MapLibre GL JS, OpenLayers (via ol-mapbox-style), or any Mapbox GL v8-compatible renderer.
styles/default.json — Population density. Red sequential ramp on aantal_inwoners. White (few) to dark red (500+). Shows population concentration patterns at the 6-digit postcode level.styles/by-homeownership.json — Housing tenure analysis. Diverging purple-to-green ramp on percentage_koopwoningen (homeownership rate, 0-100%). Purple = mostly rental, green = mostly owner-occupied. Reveals the stark urban/suburban divide in Dutch housing markets — city centers are predominantly rental while suburbs and rural areas are owner-occupied.styles/by-housing-age.json — Historic housing stock. Brown ramp on aantal_woningen_bouwjaar_voor_1945 (pre-1945 housing count). Dark brown = many pre-war buildings, cream = modern neighborhoods. Highlights historic city centers and early 20th-century expansion areas.Style files are at: https://data.source.coop/cholmes/portolan-nl/cbs/postcode6/styles/
postcode6.parquet (134 MB, 464,964 features, EPSG:28992)postcode6.pmtiles (77 MB, for web map visualization)Hand-maintained agent guide (ported from this collection's llms.txt in August 2026). Update it alongside collection.json.
| % owner-occupied |
percentage_huurwoning | % rental |
gemiddelde_woningwaarde | Average property value (WOZ) |