Skip to content
Back to skills

Geo Api

BSecurity

OGC API services en kaartdiensten: WMS, WFS, WCS, WMTS, OGC API Features. PDOK-services, GetCapabilities/GetMap/GetFeature, ogc-checker validatie.

  • 2 stars
  • 0 votes
  • 0 copies
  • 7 views
  • Added September 4, 2026
developmentpythongobashsqlnodedockergitapi

Works with

  • cli
  • api

Security analysis

B88/100
  • criticalDownloads and executes remote scripts — classic supply chain attack

Pro scans all 2 files and shows the line behind each finding

Scanned October 4, 2026

npx -y skills add developer-overheid-nl/skills-geo --skill geo-api --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Geo Api?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Geo Api
[![Security: B — Skills Directory](https://www.skillsdirectory.com/api/skills/developer-overheid-nl-geo-api/badge)](https://www.skillsdirectory.com/skills/developer-overheid-nl-geo-api)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: geo-api
description: "OGC API services en kaartdiensten: WMS, WFS, WCS, WMTS, OGC API Features. PDOK-services, GetCapabilities/GetMap/GetFeature, ogc-checker validatie."
allowed-tools:
  - Bash(gh api *)
  - Bash(curl -s *)
  - Bash(ogr2ogr *)
  - Bash(ogrinfo *)
  - WebFetch(*)
metadata:
  created-with-ai: "true"
  created-with-model: claude-opus-4-20250514
  created-date: "2025-02-22"
  status: concept
---

> **CONCEPT — Let op:** Deze skill is geen officieel product van Geonovum. De beschrijvingen zijn informatieve samenvattingen — niet de officiële standaarden zelf. De definities op [forumstandaardisatie.nl](https://www.forumstandaardisatie.nl/open-standaarden) en [Geonovum](https://www.geonovum.nl) zijn altijd leidend. Overheidsorganisaties die generatieve AI inzetten dienen te voldoen aan het [Overheidsbreed standpunt voor de inzet van generatieve AI](https://open.overheid.nl/documenten/bc03ce31-0cf1-4946-9c94-e934a62ebe73/file). Zie [DISCLAIMER.md](../../DISCLAIMER.md) en onze [verantwoording](https://github.com/developer-overheid-nl/skills-marketplace/blob/main/docs/verantwoording.md).

# OGC API Services & Kaartdiensten

**Agent-instructie:** Deze skill helpt bij het implementeren en gebruiken van OGC geo-webservices. Gebruik curl-voorbeelden voor PDOK-services en de ogc-checker voor validatie. OGC API Features en OGC API Tiles zijn verplicht onder ['pas-toe-of-leg-uit'](https://www.forumstandaardisatie.nl/open-standaarden/geo-standaarden); WMS en WFS zijn aanbevolen (sinds september 2024).

OGC-services zijn de standaard manier om geodata beschikbaar te stellen via het web. Nederland gebruikt deze standaarden intensief via [PDOK](https://www.pdok.nl/) — het nationale portaal voor geo-webservices. Geonovum beheert de Nederlandse profielen en de [ogc-checker](https://github.com/Geonovum/ogc-checker) validatietool.

## Standaarden Overzicht

| Standaard | Type | Doel | Forum status |
|-----------|------|------|-------------|
| OGC API Features | REST API | REST-gebaseerde opvolger van WFS (JSON/GeoJSON) | Verplicht |
| OGC API Tiles | Tiles | Opvolger van WMTS (voorgerenderde kaarttegels) | Verplicht |
| WMS 1.3.0 | View | Kaartafbeeldingen (PNG/JPEG) opvragen | Aanbevolen |
| WFS 2.0 | Download | Vector features (GML/GeoJSON) opvragen | Aanbevolen |
| WCS 2.0 | Coverage | Rasterdata (gridded data) ophalen | Geen Forum status |
| GeoPackage 1.3.1 | Bestandsformaat | Lokale opslag van vector- en rasterdata (SQLite) | Verplicht |

## Repositories

| Repository | Beschrijving | Licentie |
|-----------|-------------|--------|
| [Geonovum/ogc-checker](https://github.com/Geonovum/ogc-checker) | Validatietool voor OGC services (v1.3.2) | [EUPL-1.2](https://eupl.eu/1.2/en) |
| [Geonovum/ogc-checker Tags](https://github.com/Geonovum/ogc-checker/tags) | Versies van ogc-checker | [EUPL-1.2](https://eupl.eu/1.2/en) |

## WMS (Web Map Service)

WMS levert kaartafbeeldingen (rasterformaat). Drie operaties:

- **GetCapabilities** — beschrijft de service en beschikbare lagen
- **GetMap** — haalt een kaartafbeelding op (PNG, JPEG)
- **GetFeatureInfo** — haalt attribuutinfo op voor een punt op de kaart

```bash
# WMS GetCapabilities — Luchtfoto RGB
curl -s "https://service.pdok.nl/hwh/luchtfotorgb/wms/v1_0?service=WMS&request=GetCapabilities" \
  | head -50

# WMS GetMap — kaartafbeelding ophalen (PNG)
curl -s "https://service.pdok.nl/hwh/luchtfotorgb/wms/v1_0?\
service=WMS&version=1.3.0&request=GetMap&\
layers=Actueel_orthoHR&crs=EPSG:28992&\
bbox=120000,480000,130000,490000&\
width=800&height=800&format=image/png" -o /tmp/kaart.png

# WMS GetFeatureInfo — attribuutinfo op een punt
curl -s "https://service.pdok.nl/hwh/luchtfotorgb/wms/v1_0?\
service=WMS&version=1.3.0&request=GetFeatureInfo&\
layers=Actueel_orthoHR&query_layers=Actueel_orthoHR&\
crs=EPSG:28992&bbox=120000,480000,130000,490000&\
width=800&height=800&i=400&j=400&\
info_format=application/json"
```

## WFS (Web Feature Service)

WFS levert vectordata als features (GML of GeoJSON). Belangrijke operaties:

- **GetCapabilities** — beschrijft de service
- **DescribeFeatureType** — beschrijft het schema van een featuretype
- **GetFeature** — haalt features op, met filters

```bash
# WFS GetCapabilities — BAG (Basisregistratie Adressen en Gebouwen)
curl -s "https://service.pdok.nl/lv/bag/wfs/v2_0?\
service=WFS&request=GetCapabilities" | head -80

# WFS GetFeature — eerste 10 panden als GeoJSON
curl -s "https://service.pdok.nl/lv/bag/wfs/v2_0?\
service=WFS&version=2.0.0&request=GetFeature&\
typeName=bag:pand&count=10&\
outputFormat=application/json"

# WFS met ruimtelijk filter (BBOX)
curl -s "https://service.pdok.nl/lv/bag/wfs/v2_0?\
service=WFS&version=2.0.0&request=GetFeature&\
typeName=bag:pand&count=10&\
outputFormat=application/json&\
bbox=52.37,4.89,52.38,4.91,urn:ogc:def:crs:EPSG::4326"

# WFS DescribeFeatureType
curl -s "https://service.pdok.nl/lv/bag/wfs/v2_0?\
service=WFS&version=2.0.0&request=DescribeFeatureType&\
typeName=bag:pand"
```

## WMTS (Web Map Tile Service)

WMTS levert voorgerenderde kaarttegels. Veel sneller dan WMS voor basemaps.

```bash
# WMTS GetCapabilities — BRT Achtergrondkaart
curl -s "https://service.pdok.nl/brt/achtergrondkaart/wmts/v2_0?\
service=WMTS&request=GetCapabilities" | head -80

# WMTS GetTile — enkele tegel ophalen
curl -s "https://service.pdok.nl/brt/achtergrondkaart/wmts/v2_0?\
service=WMTS&version=1.0.0&request=GetTile&\
layer=standaard&style=default&\
tilematrixset=EPSG:28992&tilematrix=10&\
tilerow=300&tilecol=350&format=image/png" -o /tmp/tile.png
```

## WCS (Web Coverage Service)

WCS levert rasterdata (gridded coverages) zoals hoogtemodellen.

```bash
# WCS GetCapabilities — AHN (Actueel Hoogtebestand Nederland)
curl -s "https://service.pdok.nl/rws/ahn/wcs/v1_0?\
service=WCS&request=GetCapabilities" | head -50
```

## OGC API Features

REST-gebaseerde opvolger van WFS. Gebruikt JSON/GeoJSON, OpenAPI-specificatie, en standaard HTTP-methoden.

```bash
# Beschikbare collecties ophalen (Bestuurlijke Gebieden)
curl -s "https://api.pdok.nl/kadaster/brk-bestuurlijke-gebieden/ogc/v1/collections?f=json" \
  | python3 -m json.tool

# Specifieke collectie bekijken
curl -s "https://api.pdok.nl/kadaster/brk-bestuurlijke-gebieden/ogc/v1/collections/gemeentegebied?f=json" \
  | python3 -m json.tool

# Features ophalen (eerste 10 gemeenten)
curl -s "https://api.pdok.nl/kadaster/brk-bestuurlijke-gebieden/ogc/v1/collections/gemeentegebied/items?limit=10&f=json" \
  | python3 -m json.tool

# Feature op basis van ID
curl -s "https://api.pdok.nl/kadaster/brk-bestuurlijke-gebieden/ogc/v1/collections/gemeentegebied/items/{id}?f=json" \
  | python3 -m json.tool

# Ruimtelijke filter met bbox
curl -s "https://api.pdok.nl/kadaster/brk-bestuurlijke-gebieden/ogc/v1/collections/gemeentegebied/items?\
bbox=4.89,52.37,4.91,52.38&limit=10&f=json" | python3 -m json.tool

# OpenAPI spec van de service
curl -s "https://api.pdok.nl/kadaster/brk-bestuurlijke-gebieden/ogc/v1/api?f=json" \
  | python3 -m json.tool | head -50
```

## Python Implementatie

### Met requests (OGC API Features)

```python
import requests

# OGC API Features — bestuurlijke gebieden ophalen
base_url = "https://api.pdok.nl/kadaster/brk-bestuurlijke-gebieden/ogc/v1"

# Collecties ophalen
collecties = requests.get(f"{base_url}/collections", params={"f": "json"}).json()
for c in collecties["collections"]:
    print(f"  {c['id']}: {c.get('title', '')}")

# Features met bbox-filter
params = {
    "bbox": "4.89,52.37,4.91,52.38",
    "limit": 50,
    "f": "json",
}
response = requests.get(f"{base_url}/collections/gemeentegebied/items", params=params)
features = response.json()
print(f"Gevonden: {features.get('numberMatched', len(features.get('features', [])))} gemeenten")
for feature in features["features"]:
    print(f"  ID: {feature['id']}, Naam: {feature['properties'].get('naam')}")
```

### Met OWSLib (WMS/WFS)

```python
from owslib.wms import WebMapService
from owslib.wfs import WebFeatureService

# WMS — kaartafbeelding ophalen
wms = WebMapService("https://service.pdok.nl/hwh/luchtfotorgb/wms/v1_0")
print("Lagen:", list(wms.contents))

img = wms.getmap(
    layers=["Actueel_orthoHR"],
    srs="EPSG:28992",
    bbox=(120000, 480000, 130000, 490000),
    size=(800, 800),
    format="image/png",
)
with open("/tmp/kaart.png", "wb") as f:
    f.write(img.read())

# WFS — features ophalen
wfs = WebFeatureService(
    "https://service.pdok.nl/lv/bag/wfs/v2_0", version="2.0.0"
)
print("Feature types:", list(wfs.contents))

response = wfs.getfeature(
    typename=["bag:pand"],
    maxfeatures=10,
    outputFormat="application/json",
)
import json
data = json.loads(response.read())
print(f"Gevonden: {len(data['features'])} panden")
```

## ogc-checker Validatie

De [ogc-checker](https://github.com/Geonovum/ogc-checker) (v1.3.2) is een validatietool van Geonovum om OGC-services te controleren op conformiteit.

De CLI kiest een standaard met `--standard <slug>` en optioneel `--version <id>`; zonder `--version` wordt de laatste **final** versie gebruikt. De oude vlag `--ruleset` werkt nog als deprecated alias en waarschuwt op stderr.

| Standaard | Slug | Versies |
|-----------|------|---------|
| JSON-FG | `json-fg` | `1.0` |
| OGC API Features | `ogc-api-features` | `1.0` |
| OGC API Processes | `ogc-api-processes` | `1.0.0` (default, goedgekeurd 18-062r2), `2.0.0` (draft) |
| OGC API Records | `ogc-api-records` | draft |

```bash
# Valideer tegen de laatste vastgestelde versie van een standaard
npx @geonovum/ogc-checker --standard ogc-api-features https://service.example.nl/collections

# Expliciet de OGC API Processes 2.0 draft kiezen
npx @geonovum/ogc-checker --standard ogc-api-processes --version 2.0.0 ./openapi.json
```

> **Let op:** sinds v1.2.0 selecteert `--standard ogc-api-processes` de goedgekeurde 1.0-versie in plaats van de 2.0-draft. Vanaf v1.3.0 vereist de CLI Node 22 of hoger (Node 20 is end-of-life).

### Via Docker

De repo bevat een `Dockerfile` met **twee build targets** uit dezelfde bron. Handig als Node 22+ lokaal niet beschikbaar is.

- `cli` (default): de CLI op een distroless, non-root Node-image
- `web`: de web-UI als statische bestanden, geserveerd door Caddy als non-root gebruiker

```bash
# CLI
docker build --target cli -t ogc-checker .

# lokaal bestand valideren (mount het in de container)
docker run --rm -v "$PWD/openapi.json:/data/openapi.json:ro" \
  ogc-checker validate --standard ogc-api-processes --input /data/openapi.json

# vanaf een URL
docker run --rm ogc-checker \
  validate --standard json-fg --input https://service.example.nl/spec.json

# vanaf stdin
cat spec.json | docker run --rm -i ogc-checker validate --standard json-fg

# Web-UI op http://localhost:8080/
docker build --target web -t ogc-checker-web .
docker run --rm -p 8080:8080 ogc-checker-web
```

De poort in de container is `8080`; aanpasbaar met `-e PORT=<poort>` plus een bijpassende `-p` mapping (bijv. `-e PORT=9090 -p 9090:9090`). Exit codes van de CLI: `0` = geslaagd, `1` = gefaald volgens het `--fail-on` beleid, `>1` = onverwachte fout.

> **Let op:** tot v1.3.1 was er één image met een entrypoint dat op het eerste argument dispatchte (`serve` startte de webserver). Dat entrypoint is in v1.3.2 vervangen door de twee targets hierboven; `docker run ... serve` werkt dus niet meer.

```bash
# Repo-informatie ophalen
gh api repos/Geonovum/ogc-checker --jq '{name, description, language, updated_at}'

# Laatste releases bekijken
gh api repos/Geonovum/ogc-checker/tags --jq '.[].name'

# Issues bekijken
gh issue list --repo Geonovum/ogc-checker

# Broncode verkennen
gh api repos/Geonovum/ogc-checker/contents --jq '.[].name'
```

## GDAL/OGR Diagnostiek

```bash
# WFS-service testen met ogrinfo
ogrinfo "WFS:https://service.pdok.nl/lv/bag/wfs/v2_0" -summary

# Features downloaden naar GeoJSON
ogr2ogr -f "GeoJSON" /tmp/panden.geojson \
  "WFS:https://service.pdok.nl/lv/bag/wfs/v2_0" bag:pand \
  -where "1=1" -limit 10

# CRS-transformatie bij download
ogr2ogr -f "GeoJSON" /tmp/panden_wgs84.geojson \
  "WFS:https://service.pdok.nl/lv/bag/wfs/v2_0" bag:pand \
  -t_srs EPSG:4326 -limit 10
```

## Veelvoorkomende Problemen

| Probleem | Oorzaak | Oplossing |
|----------|---------|-----------|
| `InvalidParameterValue` bij WMS/WFS | Verkeerde CRS of lagen-naam | Controleer GetCapabilities voor juiste waarden |
| Lege response bij bbox-filter | Verkeerde coördinaatvolgorde | WMS 1.3.0 respecteert CRS-asvolgorde: voor EPSG:4326 is dat lat/lon; voor EPSG:28992 is het x/y |
| Timeout bij grote WFS-requests | Te veel features opgevraagd | Gebruik `count`/`maxFeatures` parameter of bbox-filter |
| `text/xml` in plaats van GeoJSON | outputFormat niet ondersteund | Controleer GetCapabilities voor beschikbare formaten |
| 403 bij PDOK-service | Te zware of geblokkeerde request | PDOK-services zijn open zonder API-key; beperk de request (bbox, lagere frequentie) of neem contact op met PDOK bij structurele blokkade |
| OGC API Features geeft HTML | Geen Accept-header meegegeven | Voeg `Accept: application/geo+json` header toe |

## Cross-referenties

- Gebruik `/ls-api` (uit skills-standaarden) voor de **ADR geo-module** — richtlijnen voor GeoJSON, CRS-negotiatie en bbox in REST APIs.
- Gebruik `/geo-meta` voor metadata van services (ISO 19115, CSW).
- Gebruik `/geo-inspire` voor INSPIRE-conforme view en download services.

## Achtergrondinfo

Zie [reference.md](reference.md) voor uitgebreide OGC-protocoldetails, CRS-handling (EPSG:28992/RD New), en de volledige PDOK-servicecatalogus.

Files in this skill

  • SKILL.md11.9 KB
  • reference.md5.9 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.