# Nationaal Wegenbestand (NWB) en weggegevens

Het Nationaal Wegenbestand van Rijkswaterstaat is het landelijke wegennet als lijnen: elke weg met een straatnaam of nummer, van snelweg tot woonerf, opgeknipt in wegvakken met beheerder, gemeente en hectometrering. Op 16 oktober 2026 waren dat 1.667.080 wegvakken en 162.114 hectometerpunten. Daarnaast NWB Vaarwegen (4.825 vaarwegvakken) en Weggegevens (WEGGEG) met maximumsnelheden en rijstroken op de rijkswegen, gekoppeld aan de wegvakken. Via PDOK als OGC API, WFS en WMS.

- Uitgever: Rijkswaterstaat, Publieke Dienstverlening Op de Kaart
- Gebied: Nederland · Laagste detail: wegvak
- Periode: actuele stand · Ververst: maandelijks
- Toegang: Open · Licentie: CC0 1.0 (volgens de landing pages van de drie OGC API's)
- Koppelsleutels: 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

## Wat kun je ermee?
- **Wie beheert welke weg?.** Het veld wegbehsrt zegt het: 92% van de wegvakken is van een gemeente, 4,3% van een provincie, 1,2% van het Rijk en 1,2% van een waterschap. Kleur een kaart van je regio op beheerder.
- **Waar mag je 130?.** WEGGEG heeft per wegvak de maximumsnelheid, met tijden: 130 van 19 tot 6 uur en overdag lager. Op 16 oktober 2026 stonden er 7.176 regels met 130 en 10.999 met 100 in.
- **Ongevallen en verkeer op de kaart.** Veel verkeersdata (NDW, ongevallenregistratie) verwijst naar een NWB-wegvak of hectometerpaal. Met wvk_id koppel je ze aan de weg zelf.
- **Hoeveel kilometer weg per gemeente?.** Tel de lengte van de wegvakken (st_lengthshape, in meters) per gemeente en per beheerder. Bij gescheiden rijbanen heeft elke rijbaan eigen wegvakken.

## Zo verwerk je het
1. **Wegvakken in een straat of gemeente.** De OGC API kan filteren op gme_naam, stt_naam, wegbehsrt, wegnummer en wvk_id; maximaal 1.000 per pagina, volg de link next.
   `https://api.pdok.nl/rws/nationaal-wegenbestand-wegen/ogc/v1/collections/wegvakken/items?f=json&limit=100&gme_naam=Utrecht&wegbehsrt=R`
2. **Maximumsnelheden op de A2.** WEGGEG filtert op omschr (de snelheid) en wvk_id. Koppel via wvk_id aan de wegvakken voor het wegnummer. begintijd en eindtijd geven het tijdvak (19 en 6 = 's avonds en 's nachts).
   `https://api.pdok.nl/rws/weggegevens/ogc/v1/collections/wegvak_max_snelheden/items?f=json&limit=10&omschr=130`
3. **Tellen met de WFS.** De OGC API geeft geen totaal. De WFS wel, ook met een filter. Een telling zonder filter over alle wegvakken duurt ongeveer 18 seconden.
   `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. **Vaarwegen.** NWB Vaarwegen heeft vaarwegvakken met naam en vaarwegnummer, en kilometermarkeringen (2.886).
   `https://api.pdok.nl/rws/nationaal-wegenbestand-vaarwegen/ogc/v1/collections/vaarwegvakken/items?f=json&limit=10&vwg_naam=Veerse%20Meer`

## Interessante koppelingen
- Waar staat het verkeer het vaakst stil? → [ndw-verkeer](https://www.opendataindex.nl/bron/ndw-verkeer.md) via locatie op het wegvak (wvk_id, hectometrering). Leg de meetpunten van NDW op de wegvakken van het NWB en tel per wegvak het aantal minuten onder 30 km/u.
- Welke borden staan langs welke weg? → [ndw-wegkenmerken](https://www.opendataindex.nl/bron/ndw-wegkenmerken.md) via roadSectionId = wvk_id. Elk verkeersbord in de NDW-API heeft een roadSectionId en nwbVersion; dat is het wvk_id van het wegvak in het NWB van die versie.

## Vergelijkbare bronnen
- [openstreetmap](https://www.opendataindex.nl/bron/openstreetmap.md): OSM heeft ook fietspaden, paden en wegtypes, en wordt door vrijwilligers bijgehouden; het NWB is de officiële registratie van wegbeheerders, met hectometrering.
- [ndw-verkeer](https://www.opendataindex.nl/bron/ndw-verkeer.md): Snelheden en intensiteiten per meetpunt, minuut voor minuut; het NWB is het wegennet waarop die metingen liggen.
- [overture-maps](https://www.opendataindex.nl/bron/overture-maps.md): Wereldwijd wegennet uit OSM en andere bronnen, zonder Nederlandse beheerders of hectometrering.

## Waar je op moet letten
- **Alleen wegen met een naam of nummer.** Volgens de beschrijving staan alleen wegen in het NWB die een straatnaam of wegnummer hebben. Naamloze paden en veel fietspaden ontbreken.
- **Wegvakken, geen kilometers.** Een wegvak loopt van kruising tot kruising. Tellen geeft dus vooral hoe druk het netwerk vertakt is; voor lengte gebruik je st_lengthshape.
- **WEGGEG alleen voor rijkswegen.** Maximumsnelheden en rijstroken staan er alleen voor wegen van het Rijk. Snelheden op gemeentelijke en provinciale wegen vind je via de verkeersborden van NDW.
- **Ids veranderen met de versie.** Het NWB verschijnt in versies (collectie bijgewerkt op 5 oktober 2026). Andere data noemen soms de versie waarop ze zijn gebouwd, zoals nwbVersion bij de NDW-verkeersborden (2026-03-01 bij het eerste bord). Koppel met dezelfde versie als het kan, en controleer wvk_id's die niet meer bestaan.

## API (OGC WFS 2.0.0)

- Basis: https://service.pdok.nl/rws/nationaal-wegenbestand-wegen/wfs/v1_0
- Toegang: Geen sleutel. Kosten: none; gebruiksvoorwaarden: https://creativecommons.org/publicdomain/zero/1.0/deed.nl. (uit de beschrijving)
- Formaten: 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
- Omvang: 1667080 objecten in nwbwegen:wegvakken (getest)
- Filteren: 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`: beschrijving van de dienst
- `GET ?request=DescribeFeatureType`: velden van een laag (XSD)
- `GET ?request=GetFeature`: de objecten zelf, met geometrie
- `GET ?request=ListStoredQueries`: opgeslagen zoekvragen
- `GET ?request=DescribeStoredQueries`: uitleg bij opgeslagen zoekvragen

### Parameters
- `typeNames`: welke laag: nwbwegen:wegvakken, nwbwegen:hectopunten (uit de beschrijving)
- `outputFormat`: bv. application/json voor GeoJSON (uit de beschrijving)
- `srsName`: projectie, bv. EPSG:4326 voor webkaarten (standaard EPSG:28992, RD) (uit de beschrijving)
- `count / startIndex`: pagineren (uit de beschrijving)
- `filter`: FES-XML-filter op velden of geometrie (uit de beschrijving)
- `bbox`: rechthoek in de gekozen projectie (platform)

### Velden (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

### Limieten en valkuilen
- Maximaal 1.000 objecten per verzoek (CountDefault). (uit de beschrijving)
- Pagineren kan: count en startIndex (ImplementsResultPaging). (uit de beschrijving)
- In de WFS heten de velden anders dan in de OGC API: wvkId, sttNaam, gmeNaam (camelCase) tegenover wvk_id, stt_naam, gme_naam. Filteren op wegbehsrt werkt in allebei. (getest)
- WEGGEG heeft een eigen WFS (service.pdok.nl/rws/weggegevens/wfs/v1_0) met de lagen wegvak_max_snelheden (26.441) en wegvak_rijstroken (22.910). (getest)

### Voorbeeld
```
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
```

## Zo haal je het op

### 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"])
```


## Voorbeelden met echte cijfers (1)

Per voorbeeld de bevinding, de peildatum en de aanroep die precies deze cijfers ophaalt.

- **Wegvakken in het Nationaal Wegenbestand naar wegbeheerder: gemeente is het grootste deel, 92% in oktober 2026** (oktober 2026). Tabel nwbwegen:wegvakken. [Voorbeeld](https://www.opendataindex.nl/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`
