# National Road Database (NWB) and road data

Rijkswaterstaat's National Road Database is the national road network as lines: every road with a street name or number, from motorway to residential street, split into road sections with road authority, municipality and hectometre markers. On 16 October 2026 that was 1,667,080 road sections and 162,114 hectometre points. Plus NWB Waterways (4,825 waterway sections) and Road Data (WEGGEG) with speed limits and lanes on national roads, linked to the road sections. Via PDOK as OGC API, WFS and WMS.

- Publisher: Rijkswaterstaat, Publieke Dienstverlening Op de Kaart
- Area: Netherlands · Finest detail: road section
- Period: actuele stand · Refreshed: monthly
- Access: Open · Licence: CC0 1.0 (volgens de landing pages van de drie OGC API's)
- Join keys: wvk_id (wegvak-id), gme_id (gemeentecode), wegnummer, hectometrering
- Status: ok (2026-10-05) · 2 collecties · wegvakken
- URL: https://www.pdok.nl/introductie/-/article/nationaal-wegen-bestand-nwb-wegen

## What can you do with it?
- **Who manages which road?.** The wegbehsrt field tells you: 92% of road sections belong to a municipality, 4.3% to a province, 1.2% to the national government and 1.2% to a water authority. Colour a map of your region by authority.
- **Where can you drive 130?.** WEGGEG has the speed limit per road section, with times: 130 from 7 pm to 6 am and lower during the day. On 16 October 2026 it held 7,176 rows with 130 and 10,999 with 100.
- **Accidents and traffic on the map.** Much traffic data (NDW, accident records) refers to an NWB road section or hectometre post. Use wvk_id to join them to the road itself.
- **How many kilometres of road per municipality?.** Sum the length of the road sections (st_lengthshape, in metres) per municipality and per authority. On dual carriageways each carriageway has its own road sections.

## How to process it
1. **Road sections in a street or municipality.** The OGC API can filter on gme_naam, stt_naam, wegbehsrt, wegnummer and wvk_id; at most 1,000 per page, follow the next link.
   `https://api.pdok.nl/rws/nationaal-wegenbestand-wegen/ogc/v1/collections/wegvakken/items?f=json&limit=100&gme_naam=Utrecht&wegbehsrt=R`
2. **Speed limits on the A2.** WEGGEG filters on omschr (the speed) and wvk_id. Join on wvk_id to the road sections for the road number. begintijd and eindtijd give the time window (19 and 6 = evening and night).
   `https://api.pdok.nl/rws/weggegevens/ogc/v1/collections/wegvak_max_snelheden/items?f=json&limit=10&omschr=130`
3. **Counting with the WFS.** The OGC API gives no total. The WFS does, also with a filter. An unfiltered count over all road sections takes about 18 seconds.
   `https://service.pdok.nl/rws/nationaal-wegenbestand-wegen/wfs/v1_0?service=WFS&version=2.0.0&request=GetFeature&resultType=hits&typeNames=wegvakken&FILTER=%3CFilter%3E%3CPropertyIsEqualTo%3E%3CPropertyName%3Ewegbehsrt%3C/PropertyName%3E%3CLiteral%3ER%3C/Literal%3E%3C/PropertyIsEqualTo%3E%3C/Filter%3E`
4. **Waterways.** NWB Waterways has waterway sections with name and number, and kilometre markers (2,886).
   `https://api.pdok.nl/rws/nationaal-wegenbestand-vaarwegen/ogc/v1/collections/vaarwegvakken/items?f=json&limit=10&vwg_naam=Veerse%20Meer`

## Interesting combinations
- Where is traffic most often at a standstill? → [ndw-verkeer](https://www.opendataindex.nl/en/bron/ndw-verkeer.md) via locatie op het wegvak (wvk_id, hectometrering). Place the NDW measuring points on the NWB road sections and count per section the minutes below 30 km/h.
- Which signs stand along which road? → [ndw-wegkenmerken](https://www.opendataindex.nl/en/bron/ndw-wegkenmerken.md) via roadSectionId = wvk_id. Every traffic sign in the NDW API has a roadSectionId and nwbVersion; that is the wvk_id of the road section in that NWB version.

## Similar sources
- [openstreetmap](https://www.opendataindex.nl/en/bron/openstreetmap.md): OSM also has cycle paths, footpaths and road types and is kept by volunteers; the NWB is the official register of road authorities, with hectometre markers.
- [ndw-verkeer](https://www.opendataindex.nl/en/bron/ndw-verkeer.md): Speeds and volumes per measuring point, minute by minute; the NWB is the road network those measurements sit on.
- [overture-maps](https://www.opendataindex.nl/en/bron/overture-maps.md): Global road network from OSM and other sources, without Dutch road authorities or hectometre markers.

## What to watch out for
- **Only roads with a name or number.** According to the description, only roads with a street name or road number are in the NWB. Unnamed paths and many cycle paths are missing.
- **Road sections, not kilometres.** A road section runs from junction to junction. Counting them mainly shows how densely the network branches; for length use st_lengthshape.
- **WEGGEG only for national roads.** Speed limits and lanes are only available for national roads. For municipal and provincial roads use the NDW traffic signs.
- **Ids change between versions.** The NWB is released in versions (collection updated on 5 October 2026). Other data sometimes name the version they were built on, such as nwbVersion in the NDW traffic signs (2026-03-01 for the first sign). Join with the same version where possible, and check for wvk_ids that no longer exist.

## API (OGC WFS 2.0.0)

- Base: https://service.pdok.nl/rws/nationaal-wegenbestand-wegen/wfs/v1_0
- Access: No key. Fees: none; access constraints: https://creativecommons.org/publicdomain/zero/1.0/deed.nl. (from the description)
- Formats: 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
- Size: 1667080 features in nwbwegen:wegvakken (tested)
- Filtering: 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`: service description
- `GET ?request=DescribeFeatureType`: fields of a layer (XSD)
- `GET ?request=GetFeature`: the features themselves, with geometry
- `GET ?request=ListStoredQueries`: stored queries
- `GET ?request=DescribeStoredQueries`: stored query details

### Parameters
- `typeNames`: which layer: nwbwegen:wegvakken, nwbwegen:hectopunten (from the description)
- `outputFormat`: e.g. application/json for GeoJSON (from the description)
- `srsName`: projection, e.g. EPSG:4326 for web maps (default EPSG:28992, RD) (from the description)
- `count / startIndex`: paging (from the description)
- `filter`: FES XML filter on fields or geometry (from the description)
- `bbox`: box in the chosen projection (platform)

### Fields (59)
`geom` geometrie, `objectid` integer, `wvkId` double, `jteIdBeg` double, `jteIdEnd` double, `wegbehsrt` string, `wegnummer` string, `wegdeelltr` string, `hectoLttr` string, `bstCode` string, `rpeCode` string, `admrichtng` string, `rijrichtng` string, `sttNaam` string, `sttBron` string, `wpsnaam` string, `gmeId` integer, `gmeNaam` string, `hnrstrlnks` string, `hnrstrrhts` string, `eHnrLnks` integer, `eHnrRhts` integer, `lHnrLnks` integer, `lHnrRhts` integer, `begafstand` integer, `endafstand` integer, `beginkm` double, `eindkm` double, `posTvWol` string, `wegbehcode` string, `wegbehnaam` string, `distrcode` integer, `distrnaam` string, `dienstcode` string, `dienstnaam` string, `wegtype` string, `wgtypeOms` string, `routeltr` string, `routenr` integer, `routeltr2` string, `routenr2` integer, `routeltr3` string, `routenr3` integer, `routeltr4` string, `routenr4` integer, `wegnrAw` string, `wegnrHmp` string, `geobronId` integer, `geobronNm` string, `bronjaar` integer, `openlr` string, `bagOrl` string, `frc` string, `fow` string, `altNaam` string, `altNr` string, `relHoogte` integer, `stLengthshape` double, `fuuid` string

### Limits and pitfalls
- At most 1,000 features per request (CountDefault). (from the description)
- Paging supported: count and startIndex (ImplementsResultPaging). (from the description)
- In the WFS fields are named differently from the OGC API: wvkId, sttNaam, gmeNaam (camelCase) versus wvk_id, stt_naam, gme_naam. Filtering on wegbehsrt works in both. (tested)
- WEGGEG has its own WFS (service.pdok.nl/rws/weggegevens/wfs/v1_0) with the layers wegvak_max_snelheden (26,441) and wegvak_rijstroken (22,910). (tested)

### Example
```
https://service.pdok.nl/rws/nationaal-wegenbestand-wegen/wfs/v1_0?request=GetFeature&service=WFS&version=2.0.0&typeNames=nwbwegen:wegvakken&outputFormat=application/json&srsName=EPSG:4326&count=1&propertyName=wvkId,sttNaam,gmeNaam,wegbehsrt,wegnummer
```

## How to fetch it

### curl
```bash
curl "https://api.pdok.nl/rws/nationaal-wegenbestand-wegen/ogc/v1/collections/wegvakken/items?f=json&limit=5&wegnummer=002"
```

### python
```python
import requests

url = "https://api.pdok.nl/rws/weggegevens/ogc/v1/collections/wegvak_max_snelheden/items"
r = requests.get(url, params={"f": "json", "limit": 1000, "omschr": 130}).json()
for f in r["features"][:10]:
    p = f["properties"]
    print(p["wvk_id"], p["omschr"], p["begintijd"], p["eindtijd"])
```


## Examples with real figures (1)

For each example the finding, the reference date and the call that fetches exactly these figures.

- **Road sections in the National Road Database by road authority: municipality is the largest part, 92% in October 2026** (oktober 2026). Table nwbwegen:wegvakken. [Example](https://www.opendataindex.nl/en/voorbeeld/rws-nwb-wegvakken-beheerder)
  - `https://service.pdok.nl/rws/nationaal-wegenbestand-wegen/wfs/v1_0?service=WFS&version=2.0.0&request=GetFeature&resultType=hits&typeNames=wegvakken&FILTER=%3CFilter%3E%3CPropertyIsEqualTo%3E%3CPropertyName%3Ewegbehsrt%3C%2FPropertyName%3E%3CLiteral%3EG%3C%2FLiteral%3E%3C%2FPropertyIsEqualTo%3E%3C%2FFilter%3E`
  - `https://service.pdok.nl/rws/nationaal-wegenbestand-wegen/wfs/v1_0?service=WFS&version=2.0.0&request=GetFeature&resultType=hits&typeNames=wegvakken&FILTER=%3CFilter%3E%3CPropertyIsEqualTo%3E%3CPropertyName%3Ewegbehsrt%3C%2FPropertyName%3E%3CLiteral%3ER%3C%2FLiteral%3E%3C%2FPropertyIsEqualTo%3E%3C%2FFilter%3E`
