# Geoservices Provincie Utrecht (ArcGIS REST)

De ArcGIS-server van de provincie Utrecht. Op 16 oktober 2026 telden we 115 lagen in 11 bevraagbare diensten; de mappen medewerkers, review en review_medewerkers geven 502. De grootste dienst is Tygron_Basisdata (60 lagen), invoer voor het rekenmodel Tygron, met onder meer een zonnekaart van 681.784 panden. Daarnaast de Cultuurhistorische Atlas (CHAT: militair erfgoed, buitenplaatsen, agrarisch cultuurlandschap), het Natuurnetwerk en de Groene contour voor de Informatiekaart Nederland, en geosleutels zoals 33.162 zescijferige postcodegebieden. De provincie publiceert veel meer via het Nationaal Georegister (495 records).

- Uitgever: Provincie Utrecht
- Gebied: Nederland · Laagste detail: object (provincie Utrecht)
- Periode: actuele stand (geen datums op de server) · Ververst: jaarlijks
- Toegang: Open · Licentie: niet vastgesteld
- Koppelsleutels: dienst + laagnaam, objectid, postcode (6 posities), gemeente- en woonplaatsnaam (GeoSleutels), RD-coördinaten (EPSG:28992)
- Status: grijs · 22 diensten in 5 mappen · ArcGIS 11.5
- URL: https://geoservices.provincie-utrecht.nl/arcgis/rest/services

## Wat kun je ermee?
- **Bomkraters en kazematten.** De laag CHAT - militair erfgoed (vlakken) heeft 8.206 objecten; bijna de helft (3.917) zijn bomkraters, daarnaast schuilplaatsen, loopgraven en 102 kazematten. Zet ze op de kaart.
- **Postcodes als sleutel.** GeoSleutels heeft de grenzen van provincie, gemeenten, waterschappen, woonplaatsen en 33.162 zescijferige postcodegebieden. Handig om eigen adresgegevens op de kaart te krijgen.
- **Zonnepotentie per pand.** Tygron_Basisdata bevat zonnekaart_panden (681.784 panden) en energielabels (622.720). Het zijn werkbestanden voor een rekenmodel: controleer ze tegen de oorspronkelijke bron voor je conclusies trekt.

## Zo verwerk je het
1. **Lees de directory.** De hoofdmap heeft de bruikbare diensten. Mappen als review geven wel een lijst, maar de diensten daarin antwoorden met 502.
   `https://geoservices.provincie-utrecht.nl/arcgis/rest/services?f=json`
2. **Haal objecten op als GeoJSON.** Filter met where en vraag graden met outSR=4326. maxRecordCount is 1.000 bij de meeste diensten; pagineer met resultOffset.
   `https://geoservices.provincie-utrecht.nl/arcgis/rest/services/tercera_ro/MapServer/6/query?where=klasse2%3D%27kazemat%27%20AND%20plaats%3D%27Utrecht%27&outFields=naam,plaats,klasse2,waarde&outSR=4326&resultRecordCount=5&f=geojson`
3. **Tel per soort.** Statistieken werken; één aanroep geeft het aantal objecten per klasse militair erfgoed.
   `https://geoservices.provincie-utrecht.nl/arcgis/rest/services/tercera_ro/MapServer/6/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=klasse2&orderByFields=n%20DESC&f=json`
4. **Het natuurnetwerk.** WFS_IKN bevat het Natuurnetwerk Nederland, de Groene contour, stiltegebieden en zes andere lagen voor de Informatiekaart Nederland.
   `https://geoservices.provincie-utrecht.nl/arcgis/rest/services/WFS_IKN/MapServer?f=json`

## Interessante koppelingen
- Welk militair erfgoed is ook rijksmonument? → [rijksmonumenten](https://www.opendataindex.nl/bron/rijksmonumenten.md) via coördinaten. Leg de CHAT-objecten naast de rijksmonumenten en zoek overlap; de rest is erfgoed zonder rijksbescherming.
- Eigen gegevens per gemeente of postcode → [cbs-kwb](https://www.opendataindex.nl/bron/cbs-kwb.md) via gemeentenaam of postcode. Gebruik de grenzen uit GeoSleutels om adressen te groeperen en koppel daarna de CBS-kerncijfers per gemeente.

## Vergelijkbare bronnen
- [Provincie Utrecht in het Nationaal Georegister](https://www.nationaalgeoregister.nl/geonetwork/srv/dut/catalog.search#/search?orgName=Provincie%20Utrecht): 495 records met metadata en licentie (vooral publiek domein), met WMS/WFS. De belangrijkste ingang voor data van deze provincie.
- [data-overheid](https://www.opendataindex.nl/bron/data-overheid.md): 426 datasets van de provincie Utrecht, bijna allemaal publiek domein.

## Waar je op moet letten
- **Licentie niet vastgesteld.** De server zegt niets over hergebruik. In het NGR publiceert Utrecht vooral als publiek domein, maar dat staat hier niet bij de lagen.
- **Mappen die niet werken.** Tien diensten in medewerkers, review en review_medewerkers geven 502. Die tellen we niet mee en melden we niet als verdwenen.
- **Werkbestanden en demo's.** Tygron_* zijn werkbestanden voor een rekenmodel en SampleWorldCities is een voorbeelddienst van Esri. De laag CHAT - archeologie (punten) telt 0 objecten.
- **Niet alleen provincie Utrecht.** De Cultuurhistorische Atlas loopt over de grens door: er staan ook objecten in plaatsen als Woudrichem en Nederhorst den Berg.

## API (ArcGIS REST)

- Basis: https://geoservices.provincie-utrecht.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: 118 lagen in 12 bevraagbare diensten (grootste: Tygron_Basisdata 60, tercera_ro 20, WFS_IKN 9) (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://geoservices.provincie-utrecht.nl/arcgis/services/{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.
- `GET https://geoservices.provincie-utrecht.nl/arcgis/services/WFS_IKN/MapServer/WFSServer?service=WFS&request=GetCapabilities`: WFS 2.0 van dezelfde MapServer (alleen als supportedExtensions WFSServer noemt); GetFeature met outputFormat=GEOJSON.

### 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, `naam` String, `plaats` String, `klasse1` String, `klasse2` String, `waarde` String, `status` String, `beschrijving` String, `ontstaan` String, `toegevoegd` Date

### Limieten en valkuilen
- Hoogstens 1.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)
- De mappen review en review_medewerkers tonen een lijst diensten, maar die diensten geven HTTP 502 (Azure Application Gateway). Alleen de root en arcgis_online zijn bruikbaar; medewerkers is niet openbaar. (getest)
- WFS_IKN heeft een WFSServer-extensie met de 9 IKN-lagen (groene contour, NNN, stiltegebieden …); de andere diensten alleen WMS. (getest)
- 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)
- Tygron_* zijn werkbestanden voor een rekenmodel en SampleWorldCities is een Esri-voorbeeld; beide staan openbaar maar zijn geen provinciale publicatie. tercera_ro/10 (CHAT archeologie, punten) telt 0 objecten. (ervaring)
- 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://geoservices.provincie-utrecht.nl/arcgis/rest/services/tercera_ro/MapServer/6/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=klasse2&orderByFields=n%20DESC&f=json
```

## Zo haal je het op

### curl
```bash
curl "https://geoservices.provincie-utrecht.nl/arcgis/rest/services/tercera_ro/MapServer/6/query?where=klasse2%3D%27bomkrater%27&outFields=plaats,klasse2&outSR=4326&resultRecordCount=1000&f=geojson"
```

### python
```python
import requests

laag = "https://geoservices.provincie-utrecht.nl/arcgis/rest/services/tercera_ro/MapServer/6/query"
stat = '[{"statisticType":"count","onStatisticField":"objectid","outStatisticFieldName":"n"}]'
r = requests.get(laag, params={"where": "1=1", "outStatistics": stat,
                               "groupByFieldsForStatistics": "klasse2", "f": "json"})
rijen = sorted((f["attributes"] for f in r.json()["features"]), key=lambda a: -a["n"])
for a in rijen[:10]:
    print(a["klasse2"], a["n"])
```

## Wie gebruikt het
- [Informatiekaart Nederland](https://geoservices.provincie-utrecht.nl/arcgis/rest/services/WFS_IKN/MapServer): De dienst WFS_IKN levert het natuurnetwerk en de Groene contour van Utrecht voor de landelijke kaart


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

### Mappen
- arcgis online (3): Map (1), Resultaten per gemeente (2)
- GeoSleutels (8)
- Groenanalyses Houten en Soest (1)
- IKN (9)
- INSPIRE (5)
- m01 2 bodem (1)
- tercera_ro (20)
- Tygron_Basisdata (60)
- WFS vergunningchecker (4)
- wko tool (4)

## Voorbeelden met echte cijfers (1)

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

- **Militair erfgoed in de Cultuurhistorische Atlas van de provincie Utrecht (vlakken) naar soort: het meest bomkrater (3.916 objecten), dan schuilplaats en militair groen** (november 2026). Tabel https://geoservices.provincie-utrecht.nl/arcgis/rest/services/tercera_ro/MapServer/6. [Voorbeeld](https://www.opendataindex.nl/voorbeeld/geoservices-provincie-utrecht-militair-erfgoed)
  - `https://geoservices.provincie-utrecht.nl/arcgis/rest/services/tercera_ro/MapServer/6/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=klasse2&orderByFields=n%20DESC&f=json`
  - `https://geoservices.provincie-utrecht.nl/arcgis/rest/services/tercera_ro/MapServer/6/query?where=1%3D1&returnCountOnly=true&f=json`
