A collection of datasets from various Dutch institutions to demonstrate a Spatial Data Infrastructure built on Portolan.
Every agricultural parcel in the Netherlands with its registered crop type, from the Basisregistratie Gewaspercelen (BRP) — the national crop parcel registration. Published as a multi-year partitioned collection: one GeoParquet + PMTiles partition per BRP definitive edition. Covers 2009–2025 — 17 years, 18.3 M parcels total. Published by RVO (Netherlands Enterprise Agency) via PDOK.
The BRP is an annual snapshot reflecting what farmers register each May 15 for Common Agricultural Policy (CAP) subsidy applications; each 'definitief' edition is finalized after verification.
AI/Agent users: See llms.txt for field descriptions, query examples, and usage tips.
The big jump from 2022→2023 is the addition of Landschapselementen (landscape elements — ditches, hedgerows, tree rows, ponds) to the BRP scope. 2009–2019 partitions were derived from upstream Esri File Geodatabases with a different column schema; see Processing Notes for what was renamed/cast/dropped.
Each year is self-contained in its own subfolder — download only what you need, or use the parent-level glob for cross-year analysis.
The collection-level data asset uses the portolan:glob syntax (per portolan-spec / formats/vector.md) — href: "./*/brp_gewaspercelen_*.parquet" — so DuckDB, GDAL, and PyArrow can read every year as a single dataset from one URL.
Four pre-built MapLibre GL styles, all driven from a single canonical base in styles/. Per-year copies are auto-generated into each year's YYYY/styles/ directory so the year folder is self-contained; edit the base, then run python scripts/regen_year_styles.py.
DuckDB streams via HTTP range requests — no full download needed.
Parcel id is not stable across years, so identify parcels by geometry. Use the 2025 parcels as the universe and check 2023–2025 for any potato crops.
For production cross-year tracking, write a one-time parcel-identity table by spatial-joining all 17 years' centroids:
Then rotation/diversity/trajectory queries are just SQL on parcel_history:
See llms.txt for more cross-year examples (crop rotation, land-use trajectories, year-over-year volatility, Grasland → Bouwland conversions).
Each year keeps its original source file alongside the derived GeoParquet + PMTiles, exposed as the source asset on each STAC item:
brpgewaspercelen_definitief_YYYY.gpkg — PDOK GeoPackages. Schemas exactly match the derived GeoParquet — no field renames or value transformations performed.brpgewaspercelen_definitief_YYYY.zip — PDOK Esri File Geodatabases inside zip archives. Upstream schema differs (OGC_FID, CAT_GEWASCATEGORIE, GWS_GEWAS, GWS_GEWASCODE as varchar, plus Shape_Length/Shape_Area or GEOMETRIE_Length/GEOMETRIE_Area). The derived GeoParquets are normalized: columns renamed (OGC_FID→id, CAT_GEWASCATEGORIE→category, GWS_GEWAS→gewas, GWS_GEWASCODE→gewascode), gewascode cast varchar→int32, jaar synthesized from the filename, status set to 'Definitief', and the source-side length/area columns dropped (they are recomputable with ST_Length/ST_Area). Geometry stays in EPSG:28992. This normalization is documented on each historical item's source asset.../../catalog.json (Portolan NL)../catalog.json (RVO)brp_gewaspercelen_2020.json … brp_gewaspercelen_2025.jsonportolan:glob (./*/brp_gewaspercelen_*.parquet) — primary entry point for cross-year analysis.https://service.pdok.nl/rvo/gewaspercelen/atom/downloads/brpgewaspercelen_definitief_YYYY.gpkghttps://service.pdok.nl/rvo/gewaspercelen/atom/downloads/brpgewaspercelen_definitief_YYYY.zip (Esri FGDB)Per-year GeoPackages from PDOK were converted to GeoParquet with ogr2ogr -f Parquet using COMPRESSION=ZSTD, SORT_BY_BBOX=YES, WRITE_COVERING_BBOX=YES (default), GEOMETRY_NAME=geom, and ROW_GROUP_SIZE=100000, preserving the native EPSG:28992 CRS — per OGC Best Practices for Distributing GeoParquet. The 2025 GeoPackage had a few mixed-dimension geometries that required -dim XY to flatten to 2D before conversion. PMTiles built via ogr2ogr -f GeoJSONSeq … -t_srs EPSG:4326 | tippecanoe -Z 0 -z 15 --drop-densest-as-needed --detect-shared-borders.
CC0-1.0 (public domain)
Chris Holmes cholmes@9eo.org
Part of Portolan NL — Cloud-Native Dutch Geodata