A collection of datasets from various Dutch institutions to demonstrate a Spatial Data Infrastructure built on Portolan.
# Portolan NL — Cloud-Native Dutch Geodata
## What This Catalog Is
A cloud-native geospatial data catalog of open Dutch government geodata, organized by
institution. Built on STAC metadata, GeoParquet for analytics, and PMTiles for visualization.
Published on Source Cooperative (https://source.coop/cholmes/portolan-nl).
Built with Portolan (https://portolan-sdi.org), a framework for cloud-native geodata
infrastructure. This catalog demonstrates how government geodata services like PDOK could
be extended with cloud-native formats — GeoParquet for scalable analytics, PMTiles for
instant map visualization from object storage, and STAC+llms.txt for AI/agent access.
## How to Navigate
The catalog follows a nested STAC structure:
- catalog.json → links to subcatalog per institution
- Each subcatalog (kadaster/, rijkswaterstaat/, etc.) → links to collections
- Each collection has collection.json (metadata), .parquet (data), .pmtiles (visualization)
- Many collections have their own llms.txt with detailed field descriptions and queries
## Institutions and Collections
### Kadaster (Cadastre, Land Registry & Mapping Agency)
- **bag_light/** — 11.4 million buildings with construction year, usage, floor area
- **bestuurlijke_gebieden/** — 342 municipalities, 12 provinces, 1 national territory (2026)
- **inspire_buildings/** — 24.2 million INSPIRE-harmonized building records
### Rijkswaterstaat (Public Works & Water Management)
- **bergingsgebieden/** — 1,545 flood retention areas
- **fme_disk_tunnels/** — 25 road tunnels
- **hectometervakken_vaargeul/** — 3,112 fairway depth sections (Rhine branches)
- **rijksviswegen_2024/** — 2,122 fish migration routes with connectivity status
- **sluizen/** — 92 navigation locks on recreational waterways
- **waterkeringen/** — 238 primary flood defense dike sections
- **zero_emissiezones/** — 42 LEZ/ZES zones in Dutch cities
### RCE (Cultural Heritage Agency)
- **rijksmonumenten/** — 63,073 nationally listed monuments with category and register links
### RVO (Netherlands Enterprise Agency)
- **nationale_parken/** — All 21 National Parks with boundaries
- **natura2000/** — 162 Natura 2000 EU-protected areas (209 features)
### CBS (Statistics Netherlands)
- **wijken_en_buurten/** — 18,752 neighborhood/district/municipality boundaries with ~40 demographic indicators
- **postcode6/** — 464,964 postcodes with 157 statistical attributes (demographics, housing, energy, income)
- **bestand_bodemgebruik_2017/** — 171,543 land use polygons (~40 types) for all of Netherlands
- **existing_landuse_inspire/** — 171,543 INSPIRE-harmonized land use polygons (HILUCS classification)
- **bevolkingsspreiding/** — 31,033 population distribution features (1km grid, provinces, municipalities)
- **gezondheid/** — 24 provincial health indicators (doctors and deaths per 100K)
## Getting Started
**Use AI to explore the data.** Point [Claude Code](https://docs.anthropic.com/en/docs/claude-code)
or [Gemini CLI](https://github.com/google-gemini/gemini-cli) at any collection's `llms.txt` and
ask it to query the data, build interactive maps, or generate charts. Every collection includes
an `llms.txt` with field descriptions, query examples, and usage context.
**Browse and download.** Navigate to any collection directory to find GeoParquet files for
analytics and PMTiles for instant map visualization. All files are on Source Cooperative and can
be accessed directly via HTTP — no account or API key required.
**Query with DuckDB.** All GeoParquet files work with remote HTTP access:
```sql
LOAD spatial;
SELECT naam, identificatie FROM read_parquet(
'https://data.source.coop/cholmes/portolan-nl/kadaster/bestuurlijke_gebieden/gemeentegebied.parquet'
) ORDER BY naam;
```
## Coordinate System
Most datasets use EPSG:28992 (Amersfoort / RD New) — the Dutch national coordinate system.
Coordinates are in METERS, not degrees. To convert to WGS84 (lon/lat):
```sql
ST_Transform(geometry, 'EPSG:28992', 'EPSG:4326')
```
CBS INSPIRE datasets (bevolkingsspreiding, existing_landuse_inspire, gezondheid) use
EPSG:3035 (ETRS89-LAEA), the pan-European standard — also in meters but on a European grid.
The one exception is **inspire_buildings**, which uses EPSG:4258 (ETRS89) — practically
identical to WGS84, so coordinates are in degrees and no transform is needed for most uses.
## Highlights for Exploration
- **Building age analysis**: BAG Light has construction years for 11.4M buildings (1600s–2030)
- **Flood protection**: Combine waterkeringen (dikes) with bergingsgebieden (retention areas)
- **Nature vs development**: Overlay Natura 2000 / National Parks with zero emission zones
- **Heritage mapping**: 63K monuments categorized by type (residences, churches, castles, farms)
- **Administrative joins**: Use bestuurlijke_gebieden as the reference for any municipality/province analysis
- **Fish connectivity tracking**: rijksviswegen shows status changes from 2009–2033
- **Neighborhood demographics**: Wijken en Buurten has population, income, and urbanity for every neighborhood
- **Postcode-level analysis**: 157 attributes per 6-digit postcode — demographics, housing, energy, income, facility access
- **Land use patterns**: BBG 2017 classifies every parcel in the Netherlands into ~40 functional types
- **Population density**: 1km grid population data for spatially uniform density analysis
## Data Access URLs
Base URL pattern: https://data.source.coop/cholmes/portolan-nl/{institution}/{collection}/{file}
S3 path: s3://us-west-2.opendata.source.coop/cholmes/portolan-nl/
## License
Most datasets: CC0-1.0 (public domain) or CC-BY-4.0. Some Rijkswaterstaat datasets list
"proprietary" but are sourced from public ArcGIS services.
## Contact
Chris Holmes — cholmes@9eo.org