# Geoportaal Provincie Overijssel (ArcGIS REST)

De ArcGIS REST-server van de provincie Overijssel: 45 diensten, elk een thema met een B-code (B22 wegen, B42 energie, B46 natuur en landschap, B73 cultuur …). Op 16 oktober 2026 telden we 436 kaartlagen in onze index, samen ruim 20 miljoen objecten (dubbele lagen meegeteld), van energielabels van 503.016 woningen tot 4.040 rijksmonumenten. Ongeveer 60 procent van de lagen staat ook in het Nationaal Georegister, als WMS/WFS op de GeoServer van de provincie; deze server voegt vooral bevraging per object en tellingen toe.

- Uitgever: Provincie Overijssel
- Gebied: Nederland · Laagste detail: object (provincie Overijssel)
- Periode: actuele stand (geen datums op de server) · Ververst: jaarlijks
- Toegang: Open · Licentie: niet vastgesteld
- Koppelsleutels: dienst + laagnaam, OBJECTID, gemeentenaam (in veel lagen), RD-coördinaten (EPSG:28992)
- Status: grijs · 45 diensten · ArcGIS 10.51
- URL: https://arcgisrest.geodataoverijssel.nl/arcgis/rest/services

## Wat kun je ermee?
- **Energielabels per gemeente.** De laag B42_Energielabel_woningen heeft 503.016 woningen met label, bouwjaar, woningtype en gemeente. Haal één gemeente op en maak een staafje per label.
- **Blader per thema.** Elke dienst is een thema met een B-code. Wegen (B22) heeft de meeste lagen (62), daarna natuur en landschap (B46). In de mappenboom hieronder zie je per dienst alle lagen.
- **Asbestdaken naast energielabels.** B41_bodem bevat een asbestinventarisatie van daken (798.807 vlakken). Leg die over de energielabels en zoek buurten waar verduurzaming en asbestsanering samen kunnen.
- **Koppel aan het Nationaal Georegister.** Haal de prefix B42_ weg en vervang _ door een spatie: dan komen de laagnamen vrijwel 1-op-1 overeen met de titels in het NGR, met metadata en licentie.

## Zo verwerk je het
1. **Lees de directory.** Alle diensten staan in de hoofdmap, zonder submappen. Per dienst geeft ?f=json de lagen met hun nummer.
   `https://arcgisrest.geodataoverijssel.nl/arcgis/rest/services/B42_energie/FeatureServer?f=json`
2. **Vraag objecten op, in graden.** Filter met where, kies velden met outFields en vraag met outSR=4326 lengte- en breedtegraden. Gebruik f=json: f=geojson geeft hier 400, ook al noemt de laag geoJSON.
   `https://arcgisrest.geodataoverijssel.nl/arcgis/rest/services/B42_energie/FeatureServer/926/query?where=GEMEENTE%3D%27Zwolle%27%20AND%20ENERGIELAB%3D%27A%27&outFields=ENERGIELAB,BOUWJAAR,WONINGTYPE&outSR=4326&resultRecordCount=5&f=json`
3. **Pagineer per 10.000.** maxRecordCount is 10.000. Loop met resultOffset en resultRecordCount en sorteer op OBJECTID, dan mis je niets. Zet returnGeometry=false als je alleen de kenmerken nodig hebt.
   `https://arcgisrest.geodataoverijssel.nl/arcgis/rest/services/B42_energie/FeatureServer/926/query?where=1%3D1&outFields=OBJECTID,ENERGIELAB&returnGeometry=false&orderByFields=OBJECTID&resultOffset=10000&resultRecordCount=10000&f=json`
4. **Tel zelf.** returnCountOnly geeft altijd het totaal van de laag, ook met een filter, en statistieken (outStatistics) geven een fout. Tel dus door te pagineren met alleen de velden die je nodig hebt.
   `https://arcgisrest.geodataoverijssel.nl/arcgis/rest/services/B42_energie/FeatureServer/926/query?where=1%3D1&returnCountOnly=true&f=json`

## Interessante koppelingen
- Welke woningen hebben nog geen energielabel? → [pdok-bag](https://www.opendataindex.nl/bron/pdok-bag.md) via adres of RD-coördinaten. Zet de woningen met label naast alle verblijfsobjecten met woonfunctie in de BAG; het verschil zijn de woningen zonder geregistreerd label.
- Energielabels per inwoner of per woning → [cbs-kwb](https://www.opendataindex.nl/bron/cbs-kwb.md) via gemeentenaam (en coördinaten voor buurten). Tel labels per gemeente of buurt en deel door het aantal woningen uit de CBS-kerncijfers.

## Vergelijkbare bronnen
- [data-overheid](https://www.opendataindex.nl/bron/data-overheid.md): Overijssel zet 337 datasets in data.overheid.nl, met licentie (vooral CC0 en publiek domein) maar zonder bevraging per object.
- [geoportaal-gelderland](https://www.opendataindex.nl/bron/geoportaal-gelderland.md): Dezelfde soort server bij de buurprovincie, met een Portal dat datums en leesbare titels geeft.
- [GeoServer Overijssel (WMS/WFS)](https://services.geodataoverijssel.nl/geoserver/B42_energie/wfs?service=WFS&request=GetCapabilities&version=2.0.0): Dezelfde thema's als WMS/WFS, zoals het NGR ernaar verwijst. De robots.txt van die host verbiedt alle geautomatiseerde toegang (16 okt 2026).

## Waar je op moet letten
- **Licentie niet vastgesteld.** De server zegt niets over hergebruik. Dezelfde lagen in het NGR staan meestal als CC0 of publiek domein, maar dat staat er hier niet bij.
- **Geen echte ArcGIS-server.** Er staat een proxy voor (versie 10.51): f=geojson geeft 400, outStatistics 500, returnCountOnly negeert het filter en getallen komen als tekst ('1989'). Gewone JSON-query's met where, outSR en paginering werken wel.
- **Laagnummers verschuiven.** De nummers zijn globaal (B42_energie loopt van 172 tot 2494) en veranderen bij herpublicatie: Watergebonden bedrijventerreinen verhuisde van /2579 naar /2588. Zoek een laag op naam, niet op nummer.
- **Geen datums.** Lagen en diensten hebben geen wijzigingsdatum. Hoe actueel een laag is, staat hooguit in het bijbehorende NGR-record.
- **Dubbele lagen.** Dezelfde laag staat soms in meer diensten (BAG-adressen in B02, B08 BGT punten en B08 BGT vlakken). Ontdubbel op laagnaam.

## API (ArcGIS REST (nagebootst, beperkt))

- Basis: https://arcgisrest.geodataoverijssel.nl/arcgis/rest/services
- Toegang: Geen sleutel of token: de directory en alle aanroepen hieronder werkten anoniem. (getest)
- Formaten: json
- Omvang: 439 lagen in 45 FeatureServers (388 unieke namen) (getest)
- Filteren: where werkt bij gewone objectvragen (GEMEENTE='Zwolle' AND ENERGIELAB='A'), maar níet bij returnCountOnly en returnIdsOnly: die geven altijd de hele laag. Statistiek en ruimtelijk filteren op de server werken niet.; =, <>, >, <, LIKE, AND, OR

### Endpoints
- `GET ?f=json`: Directory: 45 diensten (B42_energie, B61_economie …), versie 10.51, geen mappen.
- `GET /{dienst}/FeatureServer?f=json`: Dienst: lagen, maxRecordCount (10.000), serviceDescription met het thema.
- `GET /{dienst}/FeatureServer/{laag}?f=json`: Laag: velden en geometrietype. Laag-id's zijn globale nummers (926, 2588 …).
- `GET /{dienst}/FeatureServer/{laag}/query?where=…&outFields=…&f=json`: Objecten opvragen: where, outFields, outSR, orderByFields, resultOffset/resultRecordCount en returnDistinctValues werken. Alleen Esri-JSON.

### 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: alleen json (Esri-JSON) werkt; geojson en pbf geven HTTP 400. (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`: Geeft altijd het totaal van de hele laag: where wordt genegeerd. (getest)
- `outStatistics`: Werkt hier niet: HTTP 500. Tel zelf na het ophalen. (getest)
- `returnDistinctValues`: true met outFields en returnGeometry=false: de unieke waarden van die velden. (getest)
- `geometry`: Ruimtelijk filter werkt hier niet: een rechthoek met geometryType=esriGeometryEnvelope gaf HTTP 500. Filter op een veld (GEMEENTE) of zelf op de coördinaten. (getest)

### Velden van de voorbeeldlaag (10)
`OBJECTID` OID, `ENERGIELAB` String, `BOUWJAAR` Integer, `BOUWJAARKL` String, `WONINGTYPE` String, `GEMEENTE` String, `NAAM_CORPO` String, `TYPE_EIGEN` String, `REG_DATUM_` String, `VBO_ID` String

### Limieten en valkuilen
- maxRecordCount 10.000 per antwoord. Er komt geen exceededTransferLimit mee: blader zelf met resultOffset tot een pagina minder dan resultRecordCount objecten heeft. (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)
- Dit is geen echte ArcGIS Server maar een Spring-proxy die het ArcGIS-formaat nabootst (foutmeldingen in Spring-JSON met timestamp en path). Wat de laag-JSON belooft (supportedQueryFormats JSON, geoJSON; supportsStatistics true) klopt niet allemaal. (getest)
- Gemeten: f=geojson en f=pbf geven HTTP 400, outStatistics en een ruimtelijk filter HTTP 500, /MapServer en /WMSServer 404. returnCountOnly en returnIdsOnly negeren where (Zwolle-filter gaf toch 503.016). (getest)
- Getallen komen als tekst terug ('BOUWJAAR': '1989', 'OBJECTID': '6'), en het antwoord noemt altijd alle velden in fields, ook als je outFields beperkt. (getest)
- Laag-id's verschuiven bij herpublicatie (B61_economie/2579 werd /2588). Zoek een laag op naam via /{dienst}/FeatureServer?f=json. (ervaring)
- Dezelfde thema's staan ook als echte OGC-diensten op GeoServer (services.geodataoverijssel.nl/geoserver/<thema>/wfs), maar daar verbiedt robots.txt alles; wij roepen die niet aan. (ervaring)
- De server geeft geen wijzigingsdatum per dienst of laag (geen editingInfo). Hoe vers een laag is, staat er niet bij. (getest)

### Voorbeeld
```
https://arcgisrest.geodataoverijssel.nl/arcgis/rest/services/B42_energie/FeatureServer/926/query?where=GEMEENTE%3D%27Zwolle%27%20AND%20ENERGIELAB%3D%27A%27&outFields=ENERGIELAB,BOUWJAAR,WONINGTYPE,GEMEENTE&returnGeometry=false&resultRecordCount=5&f=json
```

## Zo haal je het op

### curl
```bash
curl "https://arcgisrest.geodataoverijssel.nl/arcgis/rest/services/B42_energie/FeatureServer/926/query?where=GEMEENTE%3D%27Zwolle%27&outFields=ENERGIELAB,BOUWJAAR&returnGeometry=false&resultRecordCount=100&f=json"
```

### python
```python
import requests

url = "https://arcgisrest.geodataoverijssel.nl/arcgis/rest/services/B42_energie/FeatureServer/926/query"
labels, offset = {}, 0
while True:
    r = requests.get(url, params={"where": "GEMEENTE='Zwolle'", "outFields": "ENERGIELAB",
                                  "returnGeometry": "false", "orderByFields": "OBJECTID",
                                  "resultOffset": offset, "resultRecordCount": 10000, "f": "json"})
    rijen = r.json()["features"]
    for f in rijen:
        lab = f["attributes"]["ENERGIELAB"].strip() or "geen"
        labels[lab] = labels.get(lab, 0) + 1
    if len(rijen) < 10000:
        break
    offset += 10000
print(labels)
```

## Wie gebruikt het
- [Nationaal Georegister](https://www.nationaalgeoregister.nl): Metadata van dezelfde thema's (via de GeoServer van de provincie)


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

### Mappen
- Achtergrondkaarten (4)
- B02 topografie (3)
- B03 projectgrenzen (2)
- B04 stedelijk gebied (3)
- B05 postcodegebieden (1)
- B06 bladindelingen (6)
- B08 BGT (21)
- B08 BGT BRMO (37)
- B08 BGT lijnen (7)
- B08 BGT punten (6)
- B08 BGT vlakken (10)
- B14 bestuurlijke grenzen (6)
- B22 wegen (64)
- B23 waterwegen (9)
- B24 spoorwegen (3)
- B27 vliegverkeer (9)
- B32 waterkeringen (3)
- B33 beheer oppervlaktewater (8)
- B34 beheer grondwater (23)
- B35 waterlopen (4)
- B41 bodem (9)
- B42 energie (21)
- B43 luchtverontreiniging (1)
- B44 geluidshinder (2)
- B45 ontgrondingen (3)
- B46 natuur en landschap (55)
- B47 flora en fauna (7)
- B51 recreatie (8)
- B61 economie (8)
- B63 landbouw (2)
- B64 nutsvoorzieningen (4)
- B73 Cultuur (37)
- B82 volkshuisvesting (3)
- B83 stads en dorpsvernieuwing (1)
- B92 veiligheid (1)
- Informatiekaart Natuur (8)
- INSPIRE AM (3)
- INSPIRE PS (2)
- LIP (32)
- WKO-tool (3)

## Voorbeelden met echte cijfers (1)

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

- **Kaartlagen op de ArcGIS-server van Overijssel per dienst: het meest wegen (B22) (64 lagen), dan natuur en landschap (B46) en BGT BRMO (B08)** (oktober 2026). Tabel https://arcgisrest.geodataoverijssel.nl/arcgis/rest/services. [Voorbeeld](https://www.opendataindex.nl/voorbeeld/geoportaal-overijssel-lagen)
  - `https://arcgisrest.geodataoverijssel.nl/arcgis/rest/services?f=json`
  - `https://arcgisrest.geodataoverijssel.nl/arcgis/rest/services/Achtergrondkaarten/FeatureServer?f=json`
