# Geoportaal Provincie Fryslân (ArcGIS REST)

De ArcGIS-server van de provincie Fryslân, met diensten in de hoofdmap en in de mappen Themas, ProvinciaalGeoRegister, GOG en Basemaps. Op 16 oktober 2026 telden we 563 lagen in onze index, samen bijna 9 miljoen objecten. Er zitten grote meetbestanden tussen (3.646.306 waterdieptemetingen in meren, 2019 tot 2021), de Natuurbeheerplannen per jaar sinds 2019, stikstofdepositie per hexagon en 6.694 gebouwen uit de inventarisatie jongere bouwkunst (1850-1940). Ongeveer een op de tien lagen staat ook in het Nationaal Georegister.

- Uitgever: Provincie Fryslân
- Gebied: Nederland · Laagste detail: object (provincie Fryslân)
- Periode: actuele stand, plus jaargangen (Natuurbeheerplannen 2019 – 2026) · Ververst: jaarlijks
- Toegang: Open · Licentie: niet vastgesteld
- Koppelsleutels: map/dienst + laagnaam, OBJECTID, vaarwegnummer en profielnummer (waterdieptemetingen), RD-coördinaten (EPSG:28992)
- Status: grijs · 39 diensten in 7 mappen · ArcGIS 11.5
- URL: https://geoportaal.fryslan.nl/arcgis/rest/services

## Wat kun je ermee?
- **Hoe diep is het meer?.** Waterdieptemetingen meren (map Themas, dienst water) heeft 3.646.306 meetpunten met diepte ten opzichte van NAP en een peildatum tussen januari 2019 en september 2021. Haal één meer op en maak een dieptekaart.
- **Erfgoed uit 1850-1940.** De laag Jongere bouwkunst 1850-1940 (Provinciaal GeoRegister) heeft 6.694 gebouwen en objecten met functie, datering en adres; ruim de helft zijn woningen.
- **Natuurbeheer door de jaren.** De dienst natuurbeheerplannen heeft per jaar (2019 tot en met 2025) het beheergebied, de ambitie en de zoekgebieden; het Provinciaal GeoRegister heeft al 2026. Vergelijk jaargangen en zie waar natuur bijkwam.

## Zo verwerk je het
1. **Blader per map.** Themas heeft één dienst per thema (algemeen, bodem, cultuurhistorie, landbouw, milieu, natuur, water …), elk met tientallen lagen.
   `https://geoportaal.fryslan.nl/arcgis/rest/services/Themas?f=json`
2. **Haal objecten op als GeoJSON.** Filter met where en vraag graden met outSR=4326. maxRecordCount verschilt per laag (1.000 tot 20.000).
   `https://geoportaal.fryslan.nl/arcgis/rest/services/ProvinciaalGeoRegister/PGR2/MapServer/80/query?where=PLAATS%3D%27Leeuwarden%27&outFields=NAAM,FUNCTIE,DATERING,STRAAT&outSR=4326&resultRecordCount=5&f=geojson`
3. **Tel per categorie.** Statistieken werken; één aanroep geeft het aantal gebouwen per hoofdcategorie.
   `https://geoportaal.fryslan.nl/arcgis/rest/services/ProvinciaalGeoRegister/PGR2/MapServer/80/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=HOOFDCAT&f=json`
4. **Grote lagen in stukken.** Bij miljoenen punten (waterdiepte) filter je eerst op een vaarweg of gebied en pagineer je met resultOffset; vraag alleen de velden die je nodig hebt.
   `https://geoportaal.fryslan.nl/arcgis/rest/services/Themas/water/MapServer/53/query?where=1%3D1&outFields=diepteNAP,peildatum,vaarwegnr&returnGeometry=false&orderByFields=OBJECTID&resultOffset=0&resultRecordCount=5&f=json`

## Interessante koppelingen
- Welke bodemlocaties zijn er in Fryslân? → [bodemloket](https://www.opendataindex.nl/bron/bodemloket.md) via locatiecode. De Bodematlas op deze server toont informatie uit het Bodemloket per locatie; de landelijke bron heeft de actuele stand.
- Habitattypen per Natura 2000-gebied → [natura2000](https://www.opendataindex.nl/bron/natura2000.md) via geometrie. De laag Natura 2000 Habitattypen (map Themas, dienst natuur) geeft per vlak het habitattype en de kwaliteit; sommeer per gebied.

## Vergelijkbare bronnen
- [data-overheid](https://www.opendataindex.nl/bron/data-overheid.md): Fryslân zet 88 datasets in data.overheid.nl, allemaal als publiek domein, en evenveel records in het NGR.
- [geoservices-noord-holland](https://www.opendataindex.nl/bron/geoservices-noord-holland.md): Een grotere provinciale ArcGIS-server, met dezelfde soort jaargangen van natuurbeheerplannen.

## Waar je op moet letten
- **Licentie niet vastgesteld.** De server zegt niets over hergebruik. Fryslân publiceert in data.overheid.nl en het NGR als publiek domein, maar dat staat hier niet bij de lagen.
- **Sommige lagen zijn voor intern gebruik.** De metadata van de laag asbestdaken (533.994 vlakken, inventarisatie 2019) zegt 'Alleen voor intern gebruik', terwijl de laag openbaar te bevragen is. Lees de metadata voor je iets publiceert.
- **Metadatalinks werken niet altijd.** Veel lagen hebben als beschrijving alleen 'Bekijk metadata' met een link; die van de waterdieptemetingen gaf 404 (16 okt 2026).
- **Dubbele lagen en jaargangen.** AFS en AFS_WGS bevatten dezelfde lagen in twee projecties; natuurbeheerplannen staan per jaar naast elkaar. Kies bewust, er staan geen datums op de lagen.

## API (ArcGIS REST)

- Basis: https://geoportaal.fryslan.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), xml/geojson (WFS)
- Omvang: 581 bladlagen in 39 bevraagbare diensten (492 unieke namen), plus 19 rasterlagen (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://geoportaal.fryslan.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.
- `GET https://geoportaal.fryslan.nl/arcgis/services/{map}/{dienst}/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 (12)
`OBJECTID` OID, `MIPCODE` String, `NAAM` String, `HOOFDCAT` String, `SUBCAT` String, `FUNCTIE` String, `DATERING` String, `STRAAT` String, `HUISNR` String, `POSTCODE` String, `PLAATS` String, `GEMEENTE` String

### Limieten en valkuilen
- Hoogstens 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)
- 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)
- PGR2 heeft naast de REST-API ook een WFS 2.0 met 81 objecttypen (PGR:…). De typenamen wijken af van de laagnamen: 'Jongere bouwkunst 1850-1940' heet PGR:Jongere_bouwkunst_1850-1940. outputFormat=GEOJSON werkt. (getest)
- Tekens met accenten zijn in de data zelf kapot: FUNCTIE 'café' staat er als 'caf¿', in REST en WFS gelijk. (getest)
- De laag asbestdaken (533.994 vlakken) is openbaar te bevragen, maar de metadata zegt 'Alleen voor intern gebruik'. Lees de laagbeschrijving voor je iets publiceert; laagbeschrijvingen verwijzen vaak alleen naar ' Bekijk metadata '. (ervaring)
- Groeplagen (met subLayerIds) hebben geen query; vraag de bladlagen eronder op. Rasterlagen hebben geen velden en geen telling. (platform)
- De server geeft geen wijzigingsdatum per dienst of laag (geen editingInfo). Hoe vers een laag is, staat er niet bij. (getest)
- maxRecordCount verschilt per dienst (1.000 tot 20.000); drie diensten kennen alleen f=json. (ervaring)

### Voorbeeld
```
https://geoportaal.fryslan.nl/arcgis/rest/services/ProvinciaalGeoRegister/PGR2/MapServer/80/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=HOOFDCAT&orderByFields=n%20DESC&f=json
```

## Zo haal je het op

### curl
```bash
curl "https://geoportaal.fryslan.nl/arcgis/rest/services/ProvinciaalGeoRegister/PGR2/MapServer/80/query?where=PLAATS%3D%27Sneek%27&outFields=NAAM,FUNCTIE,DATERING&outSR=4326&f=geojson"
```

### python
```python
import requests

laag = "https://geoportaal.fryslan.nl/arcgis/rest/services/ProvinciaalGeoRegister/PGR2/MapServer/80/query"
r = requests.get(laag, params={"where": "PLAATS='Leeuwarden'", "outFields": "FUNCTIE,DATERING,STRAAT",
                               "returnGeometry": "false", "f": "json"})
for f in r.json()["features"][:10]:
    a = f["attributes"]
    print(a["DATERING"], a["FUNCTIE"], a["STRAAT"])
```

## Wie gebruikt het
- [Nationaal Georegister](https://www.nationaalgeoregister.nl): Metadata van een deel van deze lagen (86 NGR-records noemen deze server)


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

### Mappen
- AFS (28)
- AFS WGS (28)
- Basemaps (3): luchtfoto (1), luchtfoto1950 (1), Map1 (1)
- Bodematlas (45)
- CHK2 (42)
- Circulair projecten (3)
- Elfstedentocht (5)
- friese klimaatatlas hitte (1)
- gebiedsontwikkeling (2)
- GOG (7): Map (7)
- gripOpGrond publiek (4)
- KernRegistratie Natuur Natuurontwikkeling (16)
- Map (2)
- natuurbeheerplannen (49)
- ProvinciaalGeoRegister (91): Map2 (9), PGR (82)
- Stikstof Aerius (7)
- Themas (209): Algemeen (5), bodem (7), Cultuurhistorie (3), Industrie (2), Maatschappij (10), Map (16), Map4 (56), Milieu (28) …
- vaarroutes wvdv (10)
- waddenfonds (1)
- WOO vegetatiekarteringen (10)

## Voorbeelden met echte cijfers (1)

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

- **Jongere bouwkunst (1850-1940) in Fryslân naar categorie: het meest woningen en woningbouwcomplexen (3.666 gebouwen en objecten), dan boerderijen, molens en bedrijven en religieuze gebouwen** (november 2026). Tabel https://geoportaal.fryslan.nl/arcgis/rest/services/ProvinciaalGeoRegister/PGR2/MapServer/80. [Voorbeeld](https://www.opendataindex.nl/voorbeeld/geoportaal-fryslan-jongere-bouwkunst)
  - `https://geoportaal.fryslan.nl/arcgis/rest/services/ProvinciaalGeoRegister/PGR2/MapServer/80/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=HOOFDCAT&orderByFields=n%20DESC&f=json`
  - `https://geoportaal.fryslan.nl/arcgis/rest/services/ProvinciaalGeoRegister/PGR2/MapServer/80/query?where=1%3D1&returnCountOnly=true&f=json`
