# Nationaal Georegister

Het register waarin Nederlandse overheden hun geodata beschrijven: datasets, de WMS-, WFS- en OGC API-diensten die ze leveren, en featurecatalogi met de betekenis van elk veld. Ruim 9.800 records, van provincies, waterschappen, gemeenten en rijksdiensten. Beheerd door PDOK.

- Uitgever: Publieke Dienstverlening Op de Kaart
- Gebied: Nederland · Laagste detail: verschilt
- Periode: doorlopend · Ververst: dagelijks
- Toegang: Open · Licentie: verschilt per record
- Koppelsleutels: uuid
- Status: ok (2026-10-16) · 9.823 records met een datum tot vandaag
- URL: https://www.nationaalgeoregister.nl

## Wat kun je ermee?
- **Welke kaartdienst hoort bij een dataset?.** Een dienstrecord verwijst naar de datasets die het serveert. Op de datasetpagina's bij ons staan die WMS-, WFS- en OGC API-adressen er direct bij.
- **Wat betekent dit veld?.** Featurecatalogi geven per kaartlaag de velden met type en betekenis. Handig als een WFS alleen afgekorte veldnamen heeft.

## Zo verwerk je het
1. **Zoeken via de API.** GeoNetwork 4 met een Elasticsearch-zoekvraag als POST. Stuur altijd Accept-Language mee: Node fetch stuurt standaard '*' en dan geeft GeoNetwork een 400. Pagineer op uuid met search_after.
   `curl -X POST "https://www.nationaalgeoregister.nl/geonetwork/srv/api/search/records/_search" \
  -A "mijn-script/1.0 (mail@voorbeeld.nl)" -H "Accept-Language: nl" -H "Content-Type: application/json" \
  -d '{"size": 5, "query": {"match": {"resourceTitleObject.default": "natura 2000"}}, "_source": ["uuid", "resourceTitleObject.default"]}'
`
2. **Eén record.** GET /geonetwork/srv/api/records/<uuid> met Accept: application/json geeft het volledige ISO-record.

## Vergelijkbare bronnen
- [data-overheid](https://www.opendataindex.nl/bron/data-overheid.md): Alle soorten overheidsdata, met een groot deel van het NGR erin; minder detail over kaartlagen en diensten.
- [data-europa](https://www.opendataindex.nl/bron/data-europa.md): De Europese catalogus, die ook het NGR oogst.

## Waar je op moet letten
- **Datums in de metadata zijn niet altijd echt.** Sommige records hebben een revisiedatum in de toekomst (2028, zelfs 2098) of alleen een jaar en maand. Op onze site tellen alleen volledige datums tot vandaag.
- **Dubbel met data.overheid.nl.** data.overheid.nl oogst het NGR: ruim 7.700 records staan in beide. Het NGR-uuid staat in CKAN in het veld identifier.
- **Oude diensten bestaan niet meer.** Adressen op geodata.nationaalgeoregister.nl bestaan niet meer (DNS). Een dienst in een oud record kan dus dood zijn.

## API (GeoNetwork 4 (Elasticsearch-zoek-API, JSON) en OGC CSW 2.0.2)

- Basis: https://www.nationaalgeoregister.nl/geonetwork/srv
- Toegang: Geen sleutel of account nodig (getest)
- Formaten: json, xml
- Omvang: 9831 records zonder sjablonen (8.115 datasets, 1.074 diensten, 553 featurecatalogi, 80 'GIS dataset', 19 series; 16 okt 2026) (getest)
- Filteren: Elasticsearch Query DSL (match, term, bool, range, aggs) in de zoek-API; CQL_TEXT of OGC Filter in CSW.; match, term, terms, bool, range, exists, LIKE

### Endpoints
- `POST /api/search/records/_search`: Zoeken met een Elasticsearch-query (JSON): query, size, sort, search_after, _source, aggs. Snel (~1 ms 'took').
- `GET /api/records/{uuid}`: Eén volledig ISO-record; met Accept application/json als JSON (~30 kB), anders XML.
- `GET /api/records/{uuid}/formatters/xml`: Het record als ISO 19139-XML.
- `GET /api/records/{uuid}/related`: Gekoppelde onderdelen: online bronnen (links met protocol), diensten, datasets, featurecatalogi, thumbnails; filter met type=…
- `GET /dut/csw?service=CSW&request=GetRecords`: OGC CSW 2.0.2 zoeken, met CQL_TEXT of FILTER; resultType hits of results; elementSetName brief/summary/full.
- `GET /dut/csw?service=CSW&request=GetRecordById&id={uuid}`: Eén record via CSW, in het gekozen outputSchema (gmd, mdb, dcat, DCAT-AP-NL 3.0 …).
- `GET /dut/catalog.search#/metadata/{uuid}`: De recordpagina voor mensen (geen API).

### Parameters
- `query`: Elasticsearch-query, bv. {match: {resourceTitleObject.default: 'natura 2000'}} of {term: {resourceType: 'service'}}; isTemplate 'n' sluit sjablonen uit. (getest)
- `_source`: Alleen deze velden terug (uuid, resourceTitleObject.default, OrgForResourceObject.default, link, recordLink, featureTypes …). (getest)
- `size / sort / search_after`: Pagineren: size 1000, sort [{uuid: 'asc'}] en de sort-waarde van de laatste hit als search_after. (ervaring)
- `track_total_hits`: true voor het exacte totaal in hits.total.value. (getest)
- `aggs`: Tellen per veld (terms op resourceType, format …) in dezelfde aanroep; size 0 voor alleen de tellingen. (getest)
- `constraint (CSW)`: Bv. AnyText LIKE '%natura%', met constraintLanguage=CQL_TEXT&constraint_language_version=1.1.0. (getest)
- `outputSchema (CSW)`: http://www.isotc211.org/2005/gmd (ISO), http://www.w3.org/ns/dcat#, https://docs.geostandaarden.nl/dcat/dcat-ap-nl30 en meer. (uit de beschrijving)
- `maxRecords / startPosition (CSW)`: Pagineren in CSW; nextRecord in het antwoord. (platform)

### Velden in de zoekindex (_source) (11)
`uuid` tekst, `resourceType` lijst, `resourceTitleObject.default` tekst, `resourceAbstractObject.default` tekst, `OrgForResourceObject.default` tekst, `link` lijst, `recordLink` lijst, `featureTypes` lijst, `licenseObject` lijst, `dateStamp` datetime, `format` lijst

### Limieten en valkuilen
- Geen sleutel en geen gedocumenteerde limiet. Pagineer met search_after (size 1000); de hele catalogus is ~10 pagina's en ~15 s. (ervaring)
- De zoek-API eist de koppen Accept: application/json én een echte taal in Accept-Language (nl). Zonder Accept of met 'Accept-Language: *' (de standaard van Node fetch) volgt HTTP 400; GET /api/records/{uuid} geeft dan zelfs 500. curl heeft dit probleem niet. (getest)
- Onze voorbeeldaanroep hieronder is daarom de CSW (GET, XML), die deze koppen niet nodig heeft. Voor de JSON-zoek-API zie het curl-voorbeeld onder 'Zoeken via de API'. (getest)
- Formaatwaarden zijn niet schoon: 'NetCDF' komt ook voor met regeleinden en spaties eromheen. Eerst trimmen en witruimte samenvoegen voor je telt. (getest)
- Datums in records zijn niet altijd echt: revisiedatums in de toekomst (2028, 2098) of alleen jaar en maand. Diensten op geodata.nationaalgeoregister.nl bestaan niet meer (DNS). (ervaring)
- data.overheid.nl oogst het NGR (~7.750 records): het NGR-uuid staat daar in identifier (…geonetwork?uuid=…). Gebruik dat om dubbelingen te koppelen. (ervaring)
- Geen robots.txt (404). /api/site, /api/sources en /api/doc gaven 500; /v2/api-docs stuurt door naar de inlogpagina. (getest)

### Voorbeeld
```
https://www.nationaalgeoregister.nl/geonetwork/srv/dut/csw?service=CSW&version=2.0.2&request=GetRecords&typeNames=csw:Record&resultType=results&elementSetName=brief&maxRecords=3&constraintLanguage=CQL_TEXT&constraint_language_version=1.1.0&constraint=AnyText%20LIKE%20%27%25natura%25%27
```


## Wat er allemaal in zit: 9.768 records

Alle metadatarecords in het Nationaal Georegister, per organisatie, elke nacht opgehaald: datasets, diensten en featurecatalogi. Elke pagina noemt de WMS, WFS of OGC API erbij.

- Soorten: dataset 8.078, service 1.040, featureCatalog 553, GIS dataset 80, series 16, onbekend 1
- Laatst gewijzigd: 2026-11-01 (474 in de afgelopen 30 dagen)
- Met een API-aanroep op de datasetpagina: 8.273
- Zoeken: https://www.opendataindex.nl/api/catalogus/ngr?q=… of de MCP-functie zoek_datasets met herkomst=ngr
- Elke rij heeft een eigen pagina: https://www.opendataindex.nl/dataset/ngr/<sleutel>

### Mappen
- Rijkswaterstaat (2.307): datasets (2253), featurecatalogi (44), diensten (8), series (2)
- Provincie Drenthe (1.245): datasets (1244), overig (1)
- Provincie Zuid-Holland (1.091): datasets (615), featurecatalogi (476)
- Onbekende uitgever (936): datasets (928), series (6), diensten (2)
- Beheer PDOK (791): diensten (790), datasets (1)
- Provincie Utrecht (495): datasets (425), diensten (70)
- Provincie Zeeland (471): datasets (471)
- Rijksinstituut voor Volksgezondheid en Milieu (320): datasets (258), diensten (62)
- Koninklijk Nederlands Meteorologisch Instituut (KNMI) (310): datasets (310)
- Provincie Groningen (266): datasets (266)
- Provincie Overijssel (246): datasets (242), series (4)
- Rijksdienst voor het Cultureel Erfgoed (107)
- provincie Fryslân (88)
- Kadaster (83)
- Het Waterschapshuis (72)
- Provincie Noord-Holland (61)
- Provincie Noord-Brabant (56)
- Ministerie van Defensie, Koninklijke Marine, Dienst der Hydrografie (55)
- TNO Geologische Dienst Nederland (52)
- Wageningen Environmental Research (39)
- Centraal Bureau voor de Statistiek (35)
- Waterschap Aa en Maas (35)
- Waterschap Hunze en Aa's (30)
- Atlas Leefomgeving (27)
- BIJ12 (27)
- Rijksdienst voor Ondernemend Nederland (RvO) (26)
- Gemeente Koggenland (24)
- Kadaster Geo-Informatie (22)
- Gemeente Bloemendaal en Gemeente Heemstede (16)
- Interprovinciaal Overleg (16)
- Zeeuws Archief (16)
- INFRAM (15)
- Ministerie van Landbouw, Natuur en Voedselkwaliteit (15)
- RIVM (15)
- Atlas Natuurlijk Kapitaal (14)
- Wageningen Environmental Research (WENR) (14)
- Informatiehuis Water (13)
- BAR-Organisatie (12)
- Gemeente Heemstede (11)
- Hoogheemraadschap De Stichtse Rijnlanden (11)
- … en nog 100 mappen

## Voorbeelden met echte cijfers (2)

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

- **Datasets in het Nationaal Georegister per organisatie: het meest Rijkswaterstaat (2.254 datasets), dan Provincie Drenthe en Provincie Zuid-Holland** (november 2026). Tabel records/_search. [Voorbeeld](https://www.opendataindex.nl/voorbeeld/ngr-datasets-per-organisatie)
  - `https://www.nationaalgeoregister.nl/geonetwork/srv/api/search/records/_search`
- **Records in het Nationaal Georegister per soort: het meest datasets (8.079 records), dan diensten (WMS, WFS …) en featurecatalogi** (november 2026). Tabel records/_search. [Voorbeeld](https://www.opendataindex.nl/voorbeeld/ngr-records-per-soort)
  - `https://www.nationaalgeoregister.nl/geonetwork/srv/api/search/records/_search`
