# Geoservices Hoogheemraadschap van Rijnland (ArcGIS REST)

De ArcGIS-server van het Hoogheemraadschap van Rijnland, gehost bij een leverancier (enl-mcs.nl). Bijna elke dienst is één soort beheerobject: afsluiters, duikers, gemalen, stuwen, watergangen, keringen. Op 16 oktober 2026 telden we 230 lagen in onze index; de vigerende legger kunstwerken alleen al heeft 57.032 objecten en de watergangen 187.861 lijnstukken. Rijnland staat niet als uitgever in data.overheid.nl of het Nationaal Georegister, dus dit is de enige openbare ingang. Over hergebruik zegt Rijnland zelf dat het zonder toestemming niet mag; wij tonen alleen de beschrijving en tellingen.

- Uitgever: Hoogheemraadschap van Rijnland
- Gebied: Nederland · Laagste detail: object (beheergebied Rijnland)
- Periode: actuele stand, plus oude momentopnamen (EFM2020, EFM2021, KPI2020) · Ververst: jaarlijks
- Toegang: Open · Licentie: niet open (volgens Rijnland zelf; alleen metadata in de index)
- Koppelsleutels: dienst + laagnaam, CODE (objectcode van Rijnland), OBJECTID, RD-coördinaten (EPSG:28992)
- Status: grijs · 128 diensten in 10 mappen · ArcGIS 12.1
- URL: https://rijnland.enl-mcs.nl/arcgis/rest/services

## Wat kun je ermee?
- **Wat beheert een waterschap eigenlijk?.** De legger kunstwerken telt 34.159 duikers, 15.337 bruggen, 2.602 stuwen en 468 gemalen. Eén statistiekaanroep laat zien hoeveel objecten er achter het waterbeheer van een regio zitten.
- **Lees de definities.** De meeste diensten hebben een beschrijving met de definitie van het object (wat is een duiker, een afsluiter). Handig als woordenlijst bij een verhaal over water.
- **Vigerend tegen inspraak.** De map Leggers heeft de vigerende legger en de inspraakversie naast elkaar (oppervlaktewater, kunstwerken, regionale keringen). Vergelijk de twee en zie wat het waterschap wil veranderen.

## Zo verwerk je het
1. **Blader per map.** De hoofdmap heeft de actuele objecten (meestal één laag per dienst); Leggers de juridische leggers; mappen met een jaartal zijn oude momentopnamen.
   `https://rijnland.enl-mcs.nl/arcgis/rest/services/Leggers?f=json`
2. **Tel per soort.** Statistieken werken: één aanroep geeft het aantal per soort kunstwerk.
   `https://rijnland.enl-mcs.nl/arcgis/rest/services/Leggers/Legger_kunstwerkenVigerend/MapServer/0/query?where=1%3D1&outStatistics=%5B%7B%22statisticType%22%3A%22count%22%2C%22onStatisticField%22%3A%22OBJECTID%22%2C%22outStatisticFieldName%22%3A%22n%22%7D%5D&groupByFieldsForStatistics=KUNSTWERKTYPE&orderByFields=n%20DESC&f=json`
3. **Bekijk een paar objecten.** Met outSR=4326 en f=geojson. maxRecordCount is meestal 1.000; houd het bij een paar objecten zolang de licentie niet open is.
   `https://rijnland.enl-mcs.nl/arcgis/rest/services/Leggers/Legger_kunstwerkenVigerend/MapServer/0/query?where=KUNSTWERKTYPE%3D%27Gemaal%27&outFields=CODE,NAAM,KUNSTWERKTYPE&outSR=4326&resultRecordCount=5&f=geojson`
4. **Alleen het aantal.** returnCountOnly geeft het aantal objecten in een laag zonder iets te downloaden.
   `https://rijnland.enl-mcs.nl/arcgis/rest/services/Watergang_as/MapServer/0/query?where=1%3D1&returnCountOnly=true&f=json`

## Interessante koppelingen
- Hoe hoog liggen de keringen? → [ahn](https://www.opendataindex.nl/bron/ahn.md) via coördinaten. Leg de regionale keringen over het hoogtebestand AHN en lees de kruinhoogte af.
- Waar wateroverlast en gemalen samenkomen → [klimaateffectatlas](https://www.opendataindex.nl/bron/klimaateffectatlas.md) via geometrie. Zet de gemalen en watergangen naast de kaarten van wateroverlast uit de Klimaateffectatlas.

## Vergelijkbare bronnen
- [Andere waterschappen in het Nationaal Georegister](https://www.nationaalgeoregister.nl/geonetwork/srv/dut/catalog.search#/search?any=legger): Veel waterschappen publiceren hun legger als WMS/WFS met metadata en licentie in het NGR; Rijnland niet.
- [rws-waterinfo](https://www.opendataindex.nl/bron/rws-waterinfo.md): Metingen van waterstand en afvoer in de rijkswateren; geen beheerobjecten van een waterschap.

## Waar je op moet letten
- **Niet open volgens Rijnland.** Twee van deze diensten staan ook als item in Rijnlands ArcGIS Online. Daar staat: zonder voorafgaande toestemming is het niet toegestaan materialen te kopiëren of te delen. Het is de enige uitspraak over hergebruik; vraag toestemming voor je publiceert.
- **Oude momentopnamen naast actuele lagen.** Mappen als EFM2020, EFM2021, KPI2020 en WBP6 bevatten oude versies (bv. Regionale kering en zone 2018). Kies bewust; er staan geen datums op de lagen.
- **Testdiensten.** Pilot_data_portaal_afvalwaterketen heet in de server zelf 'Data portaal - test' (afvalwaterketen van Alphen aan den Rijn, Bodegraven-Reeuwijk en Waddinxveen). Niet als officiële bron gebruiken.
- **Server bij een leverancier.** Het adres (rijnland.enl-mcs.nl) is van een leverancier, niet van Rijnland zelf, en kan veranderen bij een nieuw contract.

## API (ArcGIS REST)

- Basis: https://rijnland.enl-mcs.nl/arcgis/rest/services
- Toegang: Geen sleutel of token: de directory en alle aanroepen hieronder werkten anoniem. (getest)
- Formaten: json, geojson, pbf, png (export, WMS)
- Omvang: 234 bladlagen in 128 bevraagbare diensten (206 unieke namen) (getest)
- Filteren: SQL-achtige where-voorwaarde op de velden van de laag, plus een optioneel ruimtelijk filter (geometry). Groeperen en tellen met outStatistics.; =, <>, >, >=, <, <=, LIKE, IN, IS NULL, BETWEEN, AND, OR, NOT

### Endpoints
- `GET ?f=json`: Directory: versie, mappen en diensten (naam + type).
- `GET /{map}?f=json`: Diensten in één map.
- `GET /{dienst}/MapServer?f=json`: Dienst: lagen en tabellen (id, naam, groeplaag of niet), maxRecordCount, capabilities, projectie, beschrijving.
- `GET /{dienst}/MapServer/{laag}?f=json`: Laag: velden (naam, type, alias, lengte), geometrietype, maxRecordCount, supportedQueryFormats en advancedQueryCapabilities (paginering, statistiek, orderBy, distinct).
- `GET /{dienst}/MapServer/{laag}/query`: Objecten opvragen met een where-voorwaarde of ruimtelijk filter; ook tellen (returnCountOnly) en groeperen (outStatistics). Antwoord in JSON, GeoJSON of PBF.
- `GET /{dienst}/MapServer/legend?f=json`: Legenda per laag: labels en symbolen (PNG als base64).
- `GET /{dienst}/MapServer/export?bbox=…&bboxSR=4326&size=600,400&format=png&f=image`: Kaartbeeld als PNG voor een rechthoek; met f=json krijg je een link naar het beeld. Zonder bbox: fout 'bbox must be specified'.
- `GET https://rijnland.enl-mcs.nl/arcgis/services/{map}/{dienst}/MapServer/WMSServer?request=GetCapabilities&service=WMS`: WMS 1.3.0 van dezelfde MapServer: pad zonder /rest/ en met /WMSServer. Alleen bij diensten waar supportedExtensions WMSServer noemt.

### Parameters
- `where`: Voorwaarde in SQL-92-stijl: 1=1 voor alles, tekst tussen enkele aanhalingstekens (GEMEENTE='Zwolle'), LIKE met %, AND/OR, datums als DATE 'JJJJ-MM-DD'. Verplicht als er geen ander filter is. (getest)
- `outFields`: Velden in het antwoord, gescheiden door komma's, of * voor alle velden. (getest)
- `returnGeometry`: false = alleen attributen (veel kleiner antwoord). (getest)
- `outSR`: Projectie van de geometrie in het antwoord; 4326 = graden (WGS84). Standaard de projectie van de laag, hier RD (28992). (getest)
- `f`: Formaat: json (Esri-JSON), geojson, pbf (protobuf), pjson (ingesprongen) of html (bladeren in de browser). (getest)
- `resultOffset`: Paginering: aantal objecten overslaan (vanaf 0). Gebruik samen met orderByFields voor een vaste volgorde. (getest)
- `resultRecordCount`: Maximaal aantal objecten in dit antwoord (afgekapt op maxRecordCount van de laag). (getest)
- `orderByFields`: Sorteren, bv. 'OBJECTID' of 'n DESC' (ook op een statistiekveld). (getest)
- `returnCountOnly`: true = alleen het aantal objecten dat aan where voldoet: {"count": …}. (getest)
- `outStatistics`: Statistiek op de server: lijst van {statisticType, onStatisticField, outStatisticFieldName}; statisticType count, sum, min, max, avg, stddev of var. URL-coderen. (getest)
- `groupByFieldsForStatistics`: Velden om op te groeperen bij outStatistics (zoals GROUP BY). (getest)
- `returnDistinctValues`: true met outFields en returnGeometry=false: de unieke waarden van die velden. (getest)
- `geometry`: Ruimtelijk filter: een punt 'x,y' of rechthoek 'xmin,ymin,xmax,ymax', met geometryType (esriGeometryPoint, esriGeometryEnvelope), inSR (projectie van de invoer), spatialRel (esriSpatialRelIntersects) en eventueel distance + units (esriSRUnit_Meter) voor een straal. (platform)

### Velden van de voorbeeldlaag (10)
`OBJECTID` OID, `CODE` String, `NAAM` String, `KUNSTWERKTYPE` String, `STATUSOBJECT` String, `HOOFDFUNCTIE` String, `BEDIENING` String, `GEWOONONDERHOUD` String, `STATUSLEGGER` String, `OBJECTBEGINTIJD` Date

### Limieten en valkuilen
- Hoogstens 1.000 (meestal; 29 diensten 2.000) objecten per antwoord (maxRecordCount van de laag; verschilt per laag, staat in /{laag}?f=json). Is er meer, dan staat exceededTransferLimit: true in het antwoord: haal de rest op met resultOffset en resultRecordCount. (getest)
- Geen sleutel en geen gedocumenteerde rate limit. Doe rustig aan (een paar verzoeken per seconde) en vraag liever statistieken of tellingen op dan alle objecten. (ervaring)
- Over hergebruik zegt Rijnland in zijn ArcGIS Online-items dat kopiëren of delen zonder voorafgaande toestemming niet mag. De API werkt anoniem, maar vraag toestemming voor je data publiceert; tellingen en beschrijvingen zijn veilig. (ervaring)
- ArcGIS Server 12.1, de nieuwste van de servers in onze index. Bijna elke dienst is één soort beheerobject (afsluiters, duikers, gemalen, watergangen) met een inhoudelijke dienstbeschrijving. (getest)
- Mappen met een jaartal (EFM2020, EFM2021, KPI2020, WBP6) zijn oude momentopnamen; Leggers/…Vigerend is de geldende stand. (ervaring)
- Fouten komen terug met HTTP 200 en een JSON-object {"error": {"code": 400, …}} ('Failed to execute query.' bij een onbekend veld in where). Controleer altijd op een veld error, niet alleen op de statuscode. (getest)
- De server geeft geen wijzigingsdatum per dienst of laag (geen editingInfo). Hoe vers een laag is, staat er niet bij. (getest)
- Groeplagen (met subLayerIds) hebben geen query; vraag de bladlagen eronder op. Rasterlagen hebben geen velden en geen telling. (platform)

### Voorbeeld
```
https://rijnland.enl-mcs.nl/arcgis/rest/services/Leggers/Legger_kunstwerkenVigerend/MapServer/0/query?where=1%3D1&outStatistics=%5B%7B%22statisticType%22%3A%22count%22%2C%22onStatisticField%22%3A%22OBJECTID%22%2C%22outStatisticFieldName%22%3A%22n%22%7D%5D&groupByFieldsForStatistics=KUNSTWERKTYPE&orderByFields=n%20DESC&f=json
```

## Zo haal je het op

### curl
```bash
curl "https://rijnland.enl-mcs.nl/arcgis/rest/services/Leggers/Legger_kunstwerkenVigerend/MapServer/0/query?where=1%3D1&returnCountOnly=true&f=json"
```

### python
```python
import requests

laag = "https://rijnland.enl-mcs.nl/arcgis/rest/services/Leggers/Legger_kunstwerkenVigerend/MapServer/0/query"
stat = '[{"statisticType":"count","onStatisticField":"OBJECTID","outStatisticFieldName":"n"}]'
r = requests.get(laag, params={"where": "1=1", "outStatistics": stat,
                               "groupByFieldsForStatistics": "KUNSTWERKTYPE", "f": "json"})
for f in r.json()["features"]:
    a = f["attributes"]
    print(a["KUNSTWERKTYPE"], a.get("n", a.get("N")))  # de naam van het telveld verschilt per server
```

## Wie gebruikt het
- [Hoogheemraadschap van Rijnland](https://www.rijnland.net): Kaarten en leggers op de eigen website van het waterschap


## Wat er allemaal in zit: 230 kaartlagen

Alle diensten en lagen op deze ArcGIS-server, elke nacht opgehaald. Elke laag heeft een eigen pagina met velden, geometrie en een query-aanroep.

- Soorten: kaartlaag 224, raster 6
- Met een API-aanroep op de datasetpagina: 230
- Zoeken: https://www.opendataindex.nl/api/catalogus/arcgis-rijnland?q=… of de MCP-functie zoek_datasets met herkomst=arcgis-rijnland
- Elke rij heeft een eigen pagina: https://www.opendataindex.nl/dataset/arcgis-rijnland/<sleutel>

### Mappen
- Afrastering (1)
- Afrastering (1)
- Afwateringseenheid (1)
- Aquaduct (1)
- Bebouwde kom (1)
- Boezemgebied (1)
- Bouwwerk (1)
- Bruggen in HHR (1)
- Collectie Waterstaatswerken archief (1)
- Contour (1)
- Coupure (1)
- Data portaal - test (42)
- Dijkverbetering (1)
- Duiker punt (1)
- Duingebied (1)
- Effluent gemaal (1)
- EFM2020 (2): Regionale kering en zone 2018 (2)
- EFM2021 (5): AWZIs binnen het gebied van HHR (1), Map (1), Map (1), Rioolgemaal (influent) (1), Transportleidingsegment (1)
- Gebied (5): Grens Rijnland formeel (1), Grens Rijnland formeel mask (1), Grens Rijnland Inspire (1), Map (2)
- Gemaal (1)
- Gemaal (1)
- Gemeente (1)
- Indeling watergebiedsplannen (1)
- Individuele Behandeling Afvalwater (1)
- Individuele Behandeling Afvalwater (1)
- Inlaat (1)
- InlaatRijnland (1)
- Inspectieput (1)
- Installatie (1)
- Kadastraal perceel Rijnland Kadaster (1)
- Kader Richtlijn Water gebieden (4)
- KPI2020 (47): 14 Biodiversiteit (3), Aanpak wateroverlast (1), Dijkverbetering (1), Peilbesluitgebied overzicht (1), Peilgebied vigerend besluit (1), Verbeterinstallatie (1), WBP6FABRICationsVisiekaart (39)
- Kunstwerk dam (1)
- Kunstwerk Duiker (1)
- Legger regionale kering vigerend (1)
- Leggers (28): Legger kunstwerken Inspraak (3), Legger kunstwerkenVigerend (3), Legger Oppervlaktewater inspraak (5), Legger Oppervlaktewater Vigerend (5), Legger Primaire Kering Vigerend (4), Legger regionale kering inspraak (2), Legger regionale kering vigerend (5), Map (1)
- Lozingspunt (1)
- Map (1)
- Map (1)
- Map (1)
- … en nog 59 mappen

## Voorbeelden met echte cijfers (1)

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

- **Kunstwerken in de vigerende legger van Rijnland naar soort: het meest duikers (34.159 kunstwerken), dan bruggen en stuwen** (oktober 2026). Tabel https://rijnland.enl-mcs.nl/arcgis/rest/services/Leggers/Legger_kunstwerkenVigerend/MapServer/0. [Voorbeeld](https://www.opendataindex.nl/voorbeeld/geoservices-rijnland-kunstwerken)
  - `https://rijnland.enl-mcs.nl/arcgis/rest/services/Leggers/Legger_kunstwerkenVigerend/MapServer/0/query?where=1%3D1&outStatistics=%5B%7B%22statisticType%22%3A%22count%22%2C%22onStatisticField%22%3A%22OBJECTID%22%2C%22outStatisticFieldName%22%3A%22n%22%7D%5D&groupByFieldsForStatistics=KUNSTWERKTYPE&orderByFields=n%20DESC&f=json`
  - `https://rijnland.enl-mcs.nl/arcgis/rest/services/Leggers/Legger_kunstwerkenVigerend/MapServer/0/query?where=1%3D1&returnCountOnly=true&f=json`
