
North Holland Province geoservices (ArcGIS REST)
The ArcGIS server of the province of North Holland, with nearly 200 services in the root and six subfolders. On 16 October 2026 we counted 3,843 leaf layers on the server; because the same layer recurs in many collection services, our index keeps 2,683 after deduplication. Three quarters sit in the oi_op folder (environmental information), including a time series of the provincial environmental regulation, the provincial monuments and the nature management plans per year. Almost none of this is on data.overheid.nl or in the National Georegister.

Everything that's in it2,732
All services and layers on this ArcGIS server, fetched every night. Every layer has its own page with fields, geometry and a query call.
Provincial monuments in North Holland by type: most small objects (275 features), then Stelling van Amsterdam and flood defence elements
Provincial monuments in North Holland by type, oktober 2026, in features. Total: 761; the largest 6 of 6 categories are shown. Small objects is 36% of the total. Counted with one statistics query on the layer (field srt_monume). One monument can consist of several features (polygons). Some municipality names in the layer predate mergers (Zeevang, Graft-De Rijp).
What can you do with it?3 ideas
Provincial monuments on the map
The layer Provinciale monumenten INSPIRE has 761 features: 275 small objects, 224 parts of the Defence Line of Amsterdam, 150 flood defence elements and 102 hydraulic works. Fetch them as GeoJSON and plan a walk.
A map image without code
Every MapServer also has a WMS. Paste the GetCapabilities url into QGIS and you have the layers as a map.
How did the environmental regulation change?
The service oi_povnh_tijdreeks holds versions of the provincial environmental regulation side by side. Compare two versions of the same layer to see which areas were added or removed.
How to process it4 steps
Browse by folder
Mind the path: /ags/rest/services, not /arcgis/. The oi_op folder has most services; ondergronden holds aerial photos (rasters, not queryable).
https://geoservices.noord-holland.nl/ags/rest/services/oi_op?f=json
Fetch a layer as GeoJSON
Filter with where and request degrees with outSR=4326. maxRecordCount differs per service (usually 1,000 or 2,000); check the layer JSON and page with resultOffset.
https://geoservices.noord-holland.nl/ags/rest/services/oi_dataservice_alg/MapServer/31/query?where=srt_monume%3D%27Stelling+van+Amsterdam%27&outFields=element,plaats,gemeente&outSR=4326&resultRecordCount=5&f=geojson
Count per category
Statistics work: a single call returns the number of monument features per type.
https://geoservices.noord-holland.nl/ags/rest/services/oi_dataservice_alg/MapServer/31/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=srt_monume&f=json
Or as WMS
The same service as WMS 1.3.0 for QGIS or a web map.
https://geoservices.noord-holland.nl/ags/services/oi_dataservice_alg/MapServer/WMSServer?request=GetCapabilities&service=WMS
Interesting combinations


Which provincial monuments lie next to national monuments?
Put the provincial monuments next to the RCE national monuments; together they give a fuller picture of heritage per municipality.


Monuments per municipality, with current boundaries
Municipality names in the monument layer are partly outdated (Zeevang, Graft-De Rijp). Re-derive the municipality with the CBS boundaries via PDOK.
Similar sources
data.overheid.nlNorth Holland lists 94 datasets on data.overheid.nl (mostly public domain); only a few layers of this server appear there too.
- DNDataportaal Noord-Holland not in the index yet
The province's own viewer on the same services, to browse and download without an API.
What to watch out for
- Licence not established, partly Geo Gedeeld
The server says nothing about reuse. In the NGR, 50 of North Holland's 61 records carry the Geo Gedeeld licence, which is not open. Check per layer.
- Many duplicate layers
The same layer sits in several collection services (oi_dataportaal_geoweb, oi_ilc, oi_gezonde_leefomgeving …). Deduplicate on layer name plus fields: 3,843 leaf layers become 2,683.
- Dates only in the description
Layers carry no modification date. A few services state in their description that they were 'published by script on 07-07-2025'; that is the publication, not the content.
- Outdated municipality names
The monument layer lists municipalities that no longer exist (Zeevang, Graft-De Rijp), and the municipality is blank for 382 features.
APIArcGIS REST · read 16 Oct 2026
No key or token: the directory and all calls below worked anonymously. tested
leaf layers in 194 queryable services; about 2,140 unique layer names (the same layer sits in several services) tested
jsongeojsonpbfpng (export, WMS)xml/geojson (WFS)
Base URL
https://geoservices.noord-holland.nl/ags/rest/services
Endpoints 9
- GET
?f=jsonDirectory: version, folders and services (name + type). - GET
/{map}?f=jsonServices in one folder. - GET
/{dienst}/MapServer?f=jsonService: layers and tables (id, name, group layer or not), maxRecordCount, capabilities, projection, description. - GET
/{dienst}/MapServer/{laag}?f=jsonLayer: fields (name, type, alias, length), geometry type, maxRecordCount, supportedQueryFormats and advancedQueryCapabilities (pagination, statistics, orderBy, distinct). - GET
/{dienst}/MapServer/{laag}/queryQuery features with a where clause or spatial filter; also count (returnCountOnly) and group (outStatistics). Response in JSON, GeoJSON or PBF. - GET
/{dienst}/MapServer/legend?f=jsonLegend per layer: labels and symbols (PNG as base64). - GET
/{dienst}/MapServer/export?bbox=…&bboxSR=4326&size=600,400&format=png&f=imageMap image as PNG for a rectangle; with f=json you get a link to the image. Without bbox: error 'bbox must be specified'. - GET
https://geoservices.noord-holland.nl/ags/services/{map}/{dienst}/MapServer/WMSServer?request=GetCapabilities&service=WMSWMS 1.3.0 of the same MapServer: path without /rest/ and with /WMSServer. Only for services whose supportedExtensions lists WMSServer. - GET
https://geoservices.noord-holland.nl/ags/services/{map}/{dienst}/MapServer/WFSServer?service=WFS&request=GetCapabilitiesWFS 2.0 of the same MapServer (only if supportedExtensions lists WFSServer); GetFeature with outputFormat=GEOJSON.
Filtering platform
SQL-like where clause on the layer's fields, plus an optional spatial filter (geometry). Group and count with outStatistics.
Parameters 13
where | Condition in SQL-92 style: 1=1 for everything, text in single quotes (GEMEENTE='Zwolle'), LIKE with %, AND/OR, dates as DATE 'YYYY-MM-DD'. Required when there is no other filter. | tested |
outFields | Fields in the response, comma-separated, or * for all fields. | tested |
returnGeometry | false = attributes only (much smaller response). | tested |
outSR | Projection of the geometry in the response; 4326 = degrees (WGS84). Default is the layer's projection, here RD (28992). | tested |
f | Format: json (Esri JSON), geojson, pbf (protobuf), pjson (indented) or html (browse in the browser). | tested |
resultOffset | Pagination: number of features to skip (from 0). Use together with orderByFields for a stable order. | tested |
resultRecordCount | Maximum number of features in this response (capped at the layer's maxRecordCount). | tested |
orderByFields | Sort order, e.g. 'OBJECTID' or 'n DESC' (also on a statistics field). | tested |
returnCountOnly | true = only the number of features matching where: {"count": …}. | tested |
outStatistics | Server-side statistics: list of {statisticType, onStatisticField, outStatisticFieldName}; statisticType count, sum, min, max, avg, stddev or var. URL-encode it. | tested |
groupByFieldsForStatistics | Fields to group by with outStatistics (like GROUP BY). | tested |
returnDistinctValues | true with outFields and returnGeometry=false: the unique values of those fields. | tested |
geometry | Spatial filter: a point 'x,y' or envelope 'xmin,ymin,xmax,ymax', with geometryType (esriGeometryPoint, esriGeometryEnvelope), inSR (input projection), spatialRel (esriSpatialRelIntersects) and optionally distance + units (esriSRUnit_Meter) for a radius. | platform |
Fields of the example layer 10 · oi_op/oi_dataportaal_geoweb/MapServer/23 (66 zonneparken)
| Name | Type | Meaning |
|---|---|---|
objectid | OID | Objectsleutel |
naam | String | Naam van het park |
categorie | String | Zonnepark op veld of op parkeren |
gemeentenaam | String | Gemeente |
ingebruikname_jaar | Integer | Jaar van ingebruikname |
netto_opp_park_ha | String · ha | Netto oppervlakte (tekstveld) |
geschatte_vermogen_mw | String · MW | Geschat vermogen (tekstveld: '0.08') |
geschatte_opbrengst_gwh_jr | String · GWh | Geschatte opbrengst per jaar (tekstveld) |
sde_vermogen_mw | String · MW | Vermogen volgens de SDE-projectenlijst |
peildatum | String | Herkomst en peildatum als tekst ('SDE-lijst (jan 2022), OSM (juli 2022) …') |
Limits and pitfalls
- At most 1.000 tot 2.000.000 (oi_dataportaal_geoweb: 2.000.000; per laag nakijken) features per response (the layer's maxRecordCount; varies per layer, see /{layer}?f=json). If there are more, the response has exceededTransferLimit: true: fetch the rest with resultOffset and resultRecordCount. tested
- No key and no documented rate limit. Take it easy (a few requests per second) and prefer statistics or counts over fetching all features. experience
- Note /ags/ in the address (not /arcgis/). WMS and WFS are at /ags/services/…/MapServer/WMSServer and /WFSServer, only for services whose supportedExtensions list them (oi_dataservice_alg: both; oi_dataportaal_geoweb: WFS only). tested
- On 16 Oct 2026 around 23:30 every query on oi_dataservice_alg returned 'Underlying DBMS error [no connection to the server]' (with HTTP 200), while other services worked. Individual services can be down temporarily. tested
- Errors come back with HTTP 200 and a JSON object {"error": {"code": 400, …}} ('Failed to execute query.' for an unknown field in where). Always check for an error field, not just the status code. tested
- Numbers are sometimes stored as text (Zonneparken: geschatte_vermogen_mw '0.08'): sum in outStatistics then fails. Count or group on text fields, do the arithmetic yourself. tested
- The same layer appears in several collection services (oi_dataportaal_geoweb, oi_dataservice_alg, thematic atlas services). Deduplicate on layer name and fields. experience
- Dates only sometimes appear in the service description ('published by script on 07-07-2025 16:05:15'); otherwise no editingInfo. experience
- Group layers (with subLayerIds) have no query; query the leaf layers below them. Raster layers have no fields and no count. platform
Try it HTTP 200 · 411 ms · 16 Oct
https://geoservices.noord-holland.nl/ags/rest/services/oi_op/oi_dataportaal_geoweb/MapServer/23/query?where=1%3D1&outStatistics=[{"statisticType"%3A"count"%2C"onStatisticField"%3A"objectid"%2C"outStatisticFieldName"%3A"n"}]&groupByFieldsForStatistics=categorie&orderByFields=n DESC&f=json
{
"displayFieldName": "",
"fieldAliases": {
"categorie": "categorie",
"n": "n"
},
"fields": [
{
"name": "categorie",
"type": "esriFieldTypeString",
"alias": "categorie",
"length": 200
},
{
"name": "n",
"type": "esriFieldTypeBigInteger",
"alias": "n"
}
],
"features": [
{
"attributes": {
"categorie": "Zonnepark op veld",
"n": 59
}
},
{
"attributes": {
"categorie": "Zonnepark op parkeren",
"n": 7
}
}
]
}Shortened response, saved at harvest time. Click the URL for the real, current response.
Read from Directory: 7 folders and 9 services in the root · Collection service of the data portal (214 layers) · Layer Zonneparken: fields · Esri: query operation (all parameters). Labels: from the description stated in what the api itself publishes. tested from our own small call. platform applies to every api on this platform, per its documentation. experience learned while building open data index.
How to fetch it
curl "https://geoservices.noord-holland.nl/ags/rest/services/oi_dataservice_alg/MapServer/31/query?where=1%3D1&outFields=element,srt_monume,plaats&outSR=4326&resultRecordCount=1000&f=geojson"
Used by
- Dataportaal Noord-HollandThe province's map viewer and data portal
More from Noord-Holland in our index
2,887 datasets in Geoservices Provincie Noord-Holland, data.overheid.nl, Nationaal Georegister. These changed most recently.
- Werkingsgebied - Permanente bollenteelt2026-08-19
- Werkingsgebied - Nautisch beheer2026-08-19
- Werkingsgebied - Vaarwegbeheer2026-08-19
- Werkingsgebied - Zaadveredelingsconcentratiegebied2026-08-19
- vlakdekkende weidevogeltellingen2026-08-19
- Meetplots boerenlandvogels2026-08-18
More in this topic
See how this page is built
bron: geoservices-noord-holland
blokken: []
secties:
- ideeen
- verwerken
- koppelingen
- vergelijkbaar
- beperkingen
- code
- gebruiktDoor
cache:
tag: bron:geoservices-noord-holland
ververs: na statuscheck, als de bron nieuwer is
statuscheck:
methode: services-directory (?f=json) bereikbaar, aantal diensten als noot; de
server geeft geen datums
verwacht: jaarlijks
Source: content/bronnen/geoservices-noord-holland.yaml · Markdown


