A collection of datasets from various Dutch institutions to demonstrate a Spatial Data Infrastructure built on Portolan.
Open geodata from Statistics Netherlands (CBS), the Dutch national statistics agency. CBS publishes geographic statistical data covering population, land use, neighborhoods, postcode-level demographics, and health indicators at various administrative levels.
All collections are available as GeoParquet for analytics and PMTiles for instant map
visualization from Source Cooperative. Every collection has its own AGENTS.md with
detailed field descriptions and query examples.
Base URL: https://data.source.coop/cholmes/portolan-nl/cbs/
Built with Portolan, a framework for cloud-native geodata infrastructure. This catalog demonstrates how PDOK's existing CBS services could be extended with cloud-native formats — GeoParquet for scalable analytics, PMTiles for map visualization from object storage, and STAC+AGENTS.md for AI/agent access.
CBS data uses two coordinate systems depending on the dataset:
Annual boundaries and statistics for all Dutch neighborhoods (buurten), districts (wijken), and municipalities (gemeenten). Includes ~40 demographic, socioeconomic, and urbanity indicators per area: population, age distribution, household composition, marital status, heritage origin, address density, and land/water area. Updated annually (2021–2025). The most widely used CBS geodataset for spatial analysis.
Complete land use classification of the Netherlands for 2017. Covers ~40 functional land use types organized hierarchically: transportation, residential, commercial, recreation, agriculture, forest, water, and nature. Based on Top10NL/BRT topography and summer 2017 aerial photography. Minimum mapping unit ~1 hectare. Note: this uses the pre-2020 BBG methodology; from 2020 onwards CBS produces NBBG with renewed semi-automated methods.
Statistical data for individual 6-digit postcodes (e.g., "1011AB") from 2015 onwards. Contains 157 attributes across six domains: demographics, housing, energy consumption, income, social security, and proximity to facilities. Privacy protected — postcodes with fewer than 5 residents or 5 dwellings are suppressed (value -99997). Licensed CC BY 4.0 (unlike the other CBS datasets which are CC0).
INSPIRE-harmonized population distribution at three levels: 1km² grid cells, NUTS2 (provinces), and LAU (municipalities). Uses EPSG:3035 (European LAEA grid). The grid layer provides spatially uniform population density — useful for analysis that shouldn't be biased by administrative boundary shapes. Reference years: grid 2012, NUTS2/LAU 2018.
INSPIRE version of the CBS Bestand Bodemgebruik, using the European HILUCS classification instead of the Dutch BBG categories. Based on BRT and summer 2015 aerial photography. Uses EPSG:3035. Each polygon carries a HILUCS code linking to the European land use codelist. Useful for cross-border European land use comparison.
INSPIRE-harmonized health indicators at provincial (NUTS2) level: doctor counts and mortality rates per 100,000 inhabitants. Small dataset (~24 features: 12 provinces × 2 indicators). Reference years: doctors 2017, deaths 2016. Uses EPSG:3035.
CBS municipality codes (gemeentecodes) are the universal join key across Dutch government
data. The gemeentecode field in Wijken en Buurten (e.g., "GM0363" for Amsterdam) links
to the identificatie field in kadaster/bestuurlijke_gebieden/. The first 4 digits of
BAG building IDs (kadaster/bag_light/) also encode the gemeentecode.
Postcode6 data can be spatially joined with Wijken en Buurten to combine postcode-level statistics with neighborhood-level statistics.
The two land use datasets (Bodemgebruik 2017 and Existing Land Use INSPIRE) cover the same underlying data but in different classifications and coordinate systems.
Hand-maintained agent guide (ported from this collection's llms.txt in August 2026). Update it alongside collection.json.