# Geoportaal Provincie Gelderland (ArcGIS REST)

De ArcGIS Enterprise-server van de provincie Gelderland, met 23 open mappen per thema (Infra, Natuur, Milieu_Stikstof, Omgevingsverordening …). Op 16 oktober 2026 telden we 1.027 kaartlagen in onze index, van bomen langs provinciale wegen en verkeersongevallen (BRON, 2017 tot en met 2024) tot de stikstofdepositie per hexagon. Het bijbehorende Portal (geoportaal.gelderland.nl/portaal) zoekt in 1.011 publieke diensten met leesbare titels en een wijzigingsdatum; het nieuwste item was van 13 oktober 2026.

- Uitgever: Provincie Gelderland
- Gebied: Nederland · Laagste detail: object (provincie Gelderland)
- Periode: actuele stand; Portal-items gewijzigd tot 13 okt 2026 · Ververst: maandelijks
- Toegang: Open · Licentie: niet vastgesteld
- Koppelsleutels: map/dienst + laagnaam, objectid, wegnummer en kilometrering (wegenlagen), RD-coördinaten (EPSG:28992)
- Status: ok (2026-10-13) · 261 diensten in 24 mappen (4 mappen dicht) · ArcGIS 11.3
- URL: https://geoportaal.gelderland.nl/portaal/home/

## Wat kun je ermee?
- **Ongevallen op jouw weg.** De laag Ongevallen registratie (map Infra) heeft 119.275 ongevallen uit BRON, 2017 tot en met 2024, met straatnaam, woonplaats en wegbeheerder. Filter op een straat of wegnummer en zet ze op de kaart.
- **Zoek in het Portal, haal op bij de server.** De laagnamen op de server zijn technisch; het Portal heeft titels als 'Recreatie- Fietspad langs provinciale wegen' met een link naar de laag. Zoek daar, en vraag de gegevens op bij de REST-server.
- **Eikenprocessierups langs de weg.** Bestrijding eikenprocessierups nesten 2020 - 2024 (map Infra) volgt per eik langs provinciale wegen of er nesten waren. In 2020 stond bij 10.648 eiken 'EPR aanwezig', in 2023 bij 2.204. Let op: in 2024 staat er alleen nog 'inspectie uitgevoerd'.
- **Stikstof per hexagon.** De map Milieu_Stikstof heeft depositie, kritische depositiewaarde en overschrijding per hexagon (100.771 vakjes). Combineer met de Natura 2000-gebieden om te zien waar de overschrijding het grootst is.

## Zo verwerk je het
1. **Zoek een laag in het Portal.** De zoek-API van het Portal geeft titel, tags, wijzigingsdatum (modified, in milliseconden) en de url van de laag.
   `https://geoportaal.gelderland.nl/portaal/sharing/rest/search?q=ongevallen&f=json`
2. **Haal GeoJSON op.** Met f=geojson en outSR=4326 krijg je een bestand dat direct op een webkaart past. maxRecordCount is per laag verschillend (meestal 2.000, bij deze laag 20.000).
   `https://geoportaal.gelderland.nl/gisserver/rest/services/Infra/Infra/MapServer/229/query?where=jaar%3D%272024%27&outFields=jaar,ong_tot,ong_let,stt_naam,wpsnaamnen&outSR=4326&resultOffset=0&resultRecordCount=5&f=geojson`
3. **Laat de server tellen.** outStatistics met groupByFieldsForStatistics telt of somt per categorie in één aanroep. Hier: het aantal ongevallen per jaar.
   `https://geoportaal.gelderland.nl/gisserver/rest/services/Infra/Infra/MapServer/229/query?where=1%3D1&outStatistics=%5B%7B%22statisticType%22%3A%22sum%22%2C%22onStatisticField%22%3A%22ong_tot%22%2C%22outStatisticFieldName%22%3A%22n%22%7D%5D&groupByFieldsForStatistics=jaar&f=json`
4. **Sla de tegeldiensten over.** In de map Hosted staan naast bevraagbare lagen ook tegeldiensten (capabilities TilesOnly): daar kun je niets opvragen, alleen kaartbeelden tonen.
   `https://geoportaal.gelderland.nl/gisserver/rest/services/Hosted?f=json`

## Interessante koppelingen
- Zijn drukke provinciale wegen ook de onveilige? → [ndw-verkeer](https://www.opendataindex.nl/bron/ndw-verkeer.md) via wegnummer en kilometrering. Tel ongevallen per wegnummer en zet ze naast de intensiteiten van NDW op dezelfde wegvakken.
- Waar wordt de kritische depositiewaarde het meest overschreden? → [natura2000](https://www.opendataindex.nl/bron/natura2000.md) via geometrie (overlap). Leg de hexagonen met KDW-overschrijding over de Natura 2000-gebieden en sommeer per gebied.

## Vergelijkbare bronnen
- [data-overheid](https://www.opendataindex.nl/bron/data-overheid.md): Gelderland zet 201 datasets in data.overheid.nl, de meeste met licentie publiek domein, met titels in hetzelfde 'Thema- Naam'-patroon als het Portal.
- [geoportaal-overijssel](https://www.opendataindex.nl/bron/geoportaal-overijssel.md): Ook een provinciale ArcGIS-server, maar zonder Portal, zonder datums en met een proxy die geen statistieken toelaat.

## Waar je op moet letten
- **Licentie niet vastgesteld.** Server en Portal zeggen niets over hergebruik (licenseInfo leeg bij 100 bekeken items). Gelderland zelf publiceert in data.overheid.nl vooral als publiek domein.
- **Mappen met een token.** IMGEO, Intern, Klimaat en Test vragen een token (499). Die slaan we over; de rest is open.
- **Datums alleen in het Portal.** De REST-server geeft geen wijzigingsdatum per laag. Het Portal wel (modified per item), maar niet elke laag heeft een item.
- **Ongevallen worden onvollediger.** Volgens de beschrijving van de ongevallenlaag zijn er 'de laatste jaren door de AVG steeds minder gegevens beschikbaar'. Vergelijk jaren dus voorzichtig.
- **Zwakke beschrijvingen.** Veel diensten zeggen alleen 'Geen metadata'. copyrightText is een code van 32 tekens, geen naam of licentie.

## API (ArcGIS REST)

- Basis: https://geoportaal.gelderland.nl/gisserver/rest/services
- Toegang: Geen sleutel voor de openbare mappen. Vijf mappen (IMGEO, Intern, Klimaat, Test, Utilities) geven 'Token Required' (code 499). (getest)
- Formaten: json, geojson, pbf, png (export)
- Omvang: 779 bladlagen in 100 bevraagbare diensten (605 unieke namen), plus 161 tegeldiensten in de map Hosted (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'.

### 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 (14)
`objectid` OID, `jaar` String, `ong_tot` Integer, `ong_ums` Integer, `ong_let` Integer, `ong_dod` Integer, `sla` Integer, `dod` Integer, `wegbehsrt` String, `wegbehnaam` String, `stt_naam` String, `wpsnaamnen` String, `latitude` Double, `longitude` Double

### Limieten en valkuilen
- Hoogstens 20.000 (deze laag; elders meestal 2.000, soms 1.000 of meer) 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)
- 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 MapServers hebben hier geen WMS-extensie (supportedExtensions leeg; /WMSServer geeft HTTP 400). Kaartbeelden alleen via export. (getest)
- 161 diensten in de map Hosted zijn tegeldiensten (TilesOnly): geen velden en geen query. (ervaring)
- De REST-server geeft geen datums. Het Gelderse Portal wel: /portaal/sharing/rest/search geeft per item titel ('Infra- Ongevallen registratie'), beschrijving, modified (nieuwste 13 okt 2026) en de url van de laag. (getest)
- Veldnamen zijn kort (ong_let, wpsnaamnen), maar de aliassen in /{laag}?f=json zijn leesbaar ('Aantal ongevallen met letsel'). (getest)
- Verbindingen naar deze server faalden bij eerdere oogsten soms met een time-out of SSL-fout; probeer opnieuw. (ervaring)
- Groeplagen (met subLayerIds) hebben geen query; vraag de bladlagen eronder op. Rasterlagen hebben geen velden en geen telling. (platform)

### Voorbeeld
```
https://geoportaal.gelderland.nl/gisserver/rest/services/Infra/Infra/MapServer/229/query?where=1%3D1&outStatistics=%5B%7B%22statisticType%22%3A%22sum%22%2C%22onStatisticField%22%3A%22ong_tot%22%2C%22outStatisticFieldName%22%3A%22n%22%7D%5D&groupByFieldsForStatistics=jaar&orderByFields=jaar&f=json
```

## Zo haal je het op

### curl
```bash
curl "https://geoportaal.gelderland.nl/gisserver/rest/services/Infra/Infra/MapServer/229/query?where=wpsnaamnen%3D%27Arnhem%27&outFields=jaar,ong_tot,stt_naam&outSR=4326&resultRecordCount=100&f=geojson"
```

### python
```python
import requests

laag = "https://geoportaal.gelderland.nl/gisserver/rest/services/Infra/Infra/MapServer/229/query"
stat = '[{"statisticType":"sum","onStatisticField":"ong_tot","outStatisticFieldName":"n"}]'
r = requests.get(laag, params={"where": "1=1", "outStatistics": stat,
                               "groupByFieldsForStatistics": "jaar", "f": "json"})
for f in sorted(r.json()["features"], key=lambda f: f["attributes"]["jaar"]):
    print(f["attributes"]["jaar"], f["attributes"]["n"])
```

## Wie gebruikt het
- [Geoportaal Gelderland](https://geoportaal.gelderland.nl/portaal/home/): Het eigen Portal van de provincie, met kaartviewers en apps op deze diensten


## Wat er allemaal in zit: 1.041 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 1.029, tabel 7, raster 5
- Met een API-aanroep op de datasetpagina: 1.041
- Zoeken: https://www.opendataindex.nl/api/catalogus/arcgis-gelderland?q=… of de MCP-functie zoek_datasets met herkomst=arcgis-gelderland
- Elke rij heeft een eigen pagina: https://www.opendataindex.nl/dataset/arcgis-gelderland/<sleutel>

### Mappen
- AardkundeBodem (4): Map (4)
- Cultuurhistorie (26): Map (26)
- Economie (3): map (3)
- Grenzen (18): Map (18)
- Hosted (330): Aanvullend beoordeelde zoekgebieden (1), Alle ruimte grote turbine (1), Alle ruimte kleine turbine (1), Aquathermie WFL1 (17), Basisscholen met leerlingprognoses (1), Beschikbaarheid van algemeen hitte protocol (1), Bufferzone windturbines (1), Eerbeek Loenen 2030 projectlocaties (1) …
- Infra (126): Infra (122), Infra FCDtelvakken ochtend avond (4)
- Landbouw (6): Map2 (6)
- Landschap (6): Thema Landschap (6)
- Milieu (26): Map (26)
- Milieu Stikstof (4): Map (4)
- Natura2000 Leefgebieden (72): Map (72)
- Natuur (40): Map (40)
- Natuurbeheerplan (101): Map (8), Map (9), Map (9), Map (75)
- Omgevingsverordening (42): Map (42)
- Omgevingsvisie (80): Map (1), Map (7), Map (40), Map (1), Map (3), Map (9), Map (19)
- Ontgronding (2): Ontgronding (2)
- Overig (103): Asbestdaken (1), imgeo wfs (10), Map (2), Map (1), P8 viewer lagen (72), Wegen_verkeer_vlakken (16), zoeken hectometrering (1)
- Projecten (17): Map (4), P2104 1813 Meetnet grondwaterkwantiteit (13)
- Recreatie (5): Map (5)
- Topografie (2): Map (2)
- Water (7): Water (7)
- Waterprogramma (20): Map (20)
- Welzijn (1): Map (1)

## Voorbeelden met echte cijfers (2)

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

- **Geregistreerde verkeersongevallen in Gelderland (BRON, laag van de provincie): 15.728 ongevallen in 2025, 1% minder dan in 2017** (2025). Tabel https://geoportaal.gelderland.nl/gisserver/rest/services/Infra/Infra/MapServer/229. [Voorbeeld](https://www.opendataindex.nl/voorbeeld/geoportaal-gelderland-ongevallen)
  - `https://geoportaal.gelderland.nl/gisserver/rest/services/Infra/Infra/MapServer/229/query?where=1%3D1&outStatistics=%5B%7B%22statisticType%22%3A%22sum%22%2C%22onStatisticField%22%3A%22ong_tot%22%2C%22outStatisticFieldName%22%3A%22n%22%7D%5D&groupByFieldsForStatistics=jaar&orderByFields=n%20DESC&f=json`
  - `https://geoportaal.gelderland.nl/gisserver/rest/services/Infra/Infra/MapServer/229/query?where=1%3D1&returnCountOnly=true&f=json`
- **Kaartlagen op de ArcGIS-server van Gelderland per map: het meest Hosted (324 lagen), dan Infra en Overig** (november 2026). Tabel https://geoportaal.gelderland.nl/gisserver/rest/services. [Voorbeeld](https://www.opendataindex.nl/voorbeeld/geoportaal-gelderland-lagen)
  - `https://geoportaal.gelderland.nl/gisserver/rest/services?f=json`
  - `https://geoportaal.gelderland.nl/gisserver/rest/services/AardkundeBodem/AardkundenBodem/MapServer?f=json`
