# KNMI aardbevingen

De aardbevingscatalogus van het KNMI als open dienst: tijd, plaats, diepte, kracht en soort van elke gebeurtenis, plus meetstations, golfvormen en ShakeMaps (grondbeweging per beving). In het vak rond Nederland stonden op 16 oktober 2026 4.551 gebeurtenissen sinds 1911, waarvan 3.493 geïnduceerd (door gas- of mijnbouw). In Nederland zelf zijn dat 2.003 geïnduceerde bevingen sinds 1986; de zwaarste was Huizinge op 16 augustus 2012 (kracht 3,6).

- Uitgever: Koninklijk Nederlands Meteorologisch Instituut
- Gebied: Nederland · Laagste detail: gebeurtenis
- Periode: 1911 – 2026 · Ververst: dagelijks
- Toegang: Open · Licentie: CC BY 4.0 (ShakeMaps volgens KNMI niet onbewerkt commercieel herbruikbaar)
- Koppelsleutels: event-id (knmi2012qcdh), coördinaten, plaatsnaam, stationscode
- Status: ok (2026-10-14) · Geraardsbergen (België), quarry blast
- URL: https://api.dataplatform.knmi.nl/fdsnws/event/1/

## Wat kun je ermee?
- **Bevingen per jaar in Groningen.** Tel de geïnduceerde bevingen per jaar. Met kracht 1,5 of meer was 2013 het piekjaar (34); in 2025 waren het er 7. De grafiek op deze pagina laat de hele reeks zien.
- **Welke dorpen schudden het vaakst?.** Het KNMI geeft elke beving de naam van de dichtstbijzijnde kern. Garrelsweer (89), Appingedam (88) en Loppersum (76) staan bovenaan.
- **Hoe hard schudde de grond?.** Voor 66 bevingen staat er een ShakeMap: grondversnelling per meetstation (rrsm.json) en voor 56 ook een raster (grid.nc). Leg dat over de woningen uit de BAG.
- **Gaswinning en bevingen naast elkaar.** Zet de bevingen per jaar naast de productie uit het Groningenveld en de besluiten om de winning te verlagen. Begin bij Huizinge (augustus 2012).

## Zo verwerk je het
1. **De hele catalogus als tekst.** format=text geeft één regel per gebeurtenis, met | als scheidingsteken (~580 kB voor het vak rond Nederland). Zonder vak komen er ook bevingen verder weg bij (6.514 in totaal).
   `https://api.dataplatform.knmi.nl/fdsnws/event/1/query?starttime=1900-01-01&minlatitude=50.7&maxlatitude=53.7&minlongitude=3.2&maxlongitude=7.3&format=text`
2. **Alleen geïnduceerde bevingen vanaf een kracht.** Filter op eventtype en minmagnitude. Let op: het vak bevat ook mijnbevingen in Duitsland; laat plaatsnamen met (Duitsland) of (België) weg.
   `https://api.dataplatform.knmi.nl/fdsnws/event/1/query?starttime=2020-01-01&eventtype=induced%20or%20triggered%20event&minmagnitude=2.5&format=text`
3. **Eén beving in detail (QuakeML).** Zonder format krijg je QuakeML (XML) met alle magnitudes en de oorsprong. Huizinge 2012 heeft id knmi2012qcdh.
   `https://api.dataplatform.knmi.nl/fdsnws/event/1/query?eventid=knmi2012qcdh`
4. **ShakeMaps en grondversnelling.** list geeft per beving de beschikbare bestanden; download/<id>/rrsm.json de versnelling per station.
   `https://api.dataplatform.knmi.nl/shakemaps/7/download/knmi2025whfa/rrsm.json`
5. **De meetstations.** Netwerk NL (sinds 1993) heeft 903 stations, netwerk NA (Caribisch Nederland) 12.
   `https://api.dataplatform.knmi.nl/fdsnws/station/1/query?level=station&network=NL&format=text`

## Interessante koppelingen
- Hoeveel woningen staan er binnen 5 km van een beving? → [pdok-bag](https://www.opendataindex.nl/bron/pdok-bag.md) via coördinaten. Tel per beving de verblijfsobjecten uit de BAG in een straal rond het epicentrum. Zo zie je welke bevingen veel huizen raakten.
- Bevingen per buurt en de woningwaarde → [cbs-kwb](https://www.opendataindex.nl/bron/cbs-kwb.md) via buurtcode (punt in buurtvlak). Leg de epicentra over de CBS-buurten en zet het aantal bevingen naast de WOZ-waarde en het aantal woningen per buurt.

## Vergelijkbare bronnen
- [EMSC (European-Mediterranean Seismological Centre)](https://www.seismicportal.eu/fdsn-wsevent.html): Zelfde FDSN-standaard en dezelfde parameters, maar voor Europa en de wereld. Handig om bevingen over de grens te vergelijken.
- [knmi-dataplatform](https://www.opendataindex.nl/bron/knmi-dataplatform.md): Het KNMI Data Platform zelf, met ruim 400 datasets over weer en klimaat; de aardbevingsdiensten draaien op dezelfde server maar zonder sleutel.

## Waar je op moet letten
- **Het vak is groter dan Nederland.** Met een rechthoek rond Nederland komen ook ~1.900 mijnbevingen uit het Ruhrgebied en bevingen in België mee. De plaatsnaam eindigt dan op (Duitsland) of (België).
- **Kleine bevingen hangen af van het meetnet.** Hoe meer stations, hoe meer kleine bevingen er worden gezien. Vergelijk jaren daarom vanaf een vaste kracht, bijvoorbeeld 1,5.
- **Niet alles is een aardbeving.** De catalogus bevat ook explosies, steengroeve-ontploffingen en knallen (sonic boom). Filter op de kolom EventType.
- **Diepte vaak vast op 3 km.** Bij 1.939 van de 2.003 geïnduceerde bevingen in Nederland staat de diepte op 3,0 km, ongeveer de diepte van het Groningenveld. Behandel het niet als een gemeten diepte per beving.
- **ShakeMaps met extra voorwaarde.** De ShakeMap-dienst noemt CC BY 4.0, maar zegt ook dat de data niet onbewerkt commercieel hergebruikt mogen worden. Die twee botsen; vraag het KNMI bij twijfel.

## API (FDSN Web Services (event, station, dataselect))

- Basis: https://api.dataplatform.knmi.nl/fdsnws
- Toegang: Geen sleutel. Draait op dezelfde server als het KNMI Data Platform, maar de seismologische diensten vragen geen Authorization-kop (getest). (getest)
- Formaten: text, json, xml, csv
- Omvang: 6514 gebeurtenissen in de hele catalogus sinds 1911 (4.408 geïnduceerd, 2.053 tektonisch, 53 explosies e.d.; 16 okt 2026) (getest)
- Filteren: Geen querytaal: elke voorwaarde is een eigen queryparameter (FDSN). Combinaties gelden als EN.; min…, max…, =

### Endpoints
- `GET /event/1/query`: Gebeurtenissen zoeken op tijd, vak of straal, diepte, kracht en soort. Standaard QuakeML; format=text of json voor tabel of GeoJSON.
- `GET /event/1/query?eventid={id}`: Eén gebeurtenis in detail (alle magnitudes, oorsprong, picks); id zoals knmi2012qcdh (Huizinge).
- `GET /event/1/version`: Versie van de dienst (1.2.9 op 16 okt 2026).
- `GET /event/1/application.wadl`: Machineleesbare lijst van parameters.
- `GET /event/1/catalogs/`: Catalogi (alleen KNMI); let op de slash aan het eind, zonder volgt een 301.
- `GET /event/1/contributors/`: Bijdragers (alleen KNMI).
- `GET /station/1/query`: Meetnetten en stations (level=network|station|channel|response): NL 903 stations sinds 1993, NA (Caribisch Nederland) 12.
- `GET /dataselect/1/query`: Golfvormen (miniSEED) per netwerk, station, kanaal en tijdvak.
- `GET /shakemaps/7/list`: Alle ShakeMaps met hun bestanden (66 bevingen, 56 met grid.nc).
- `GET /shakemaps/7/download/{eventid}/{bestand}`: Eén ShakeMap-bestand: rrsm.json/rrsm.csv (versnelling per station), grid.nc (raster), event.xml.

### Parameters
- `starttime / endtime`: Tijdvak in UTC, ISO 8601 (2025-01-01 of 2025-01-01T12:00:00). (uit de beschrijving)
- `minlatitude / maxlatitude / minlongitude / maxlongitude`: Rechthoek in graden (WGS84). Rond Nederland: 50.7–53.7 N, 3.2–7.3 O. (getest)
- `latitude / longitude / minradius / maxradius`: Cirkel rond een punt; straal in graden (niet km). (platform)
- `mindepth / maxdepth`: Diepte in km. (uit de beschrijving)
- `minmagnitude / maxmagnitude / magnitudetype`: Kracht (meestal ML) en het magnitudetype. (uit de beschrijving)
- `eventtype`: Soort: 'induced or triggered event', earthquake, 'quarry blast', 'controlled explosion', 'sonic boom', explosion, 'other event'. (getest)
- `eventid`: Eén of meer gebeurtenissen op id. (uit de beschrijving)
- `updateafter`: Alleen gebeurtenissen die na dit moment zijn bijgewerkt: handig om bij te houden. (uit de beschrijving)
- `limit / offset`: Pagineren; offset begint bij 1 (FDSN), niet bij 0. (uit de beschrijving)
- `orderby`: time (nieuwste eerst, standaard), time-asc, magnitude, magnitude-asc. (getest)
- `format`: xml (QuakeML, standaard), text (|-gescheiden), json (GeoJSON), csv, qml-rt, sc3ml. geojson als waarde geeft 400. (getest)
- `nodata`: Wat er gebeurt als niets gevonden wordt: standaard 204 zonder inhoud, met nodata=404 een 404 met uitleg. (getest)
- `includeallmagnitudes / includeallorigins / includearrivals / includepicks / includefocalmechanism`: Extra onderdelen in QuakeML. (uit de beschrijving)

### Kolommen bij format=text (json heeft dezelfde gegevens als GeoJSON-properties) (9)
`EventID` tekst, `Time` datetime, `Latitude / Longitude` getal, `Depth/km` getal, `MagType` tekst, `Magnitude` getal, `EventLocationName` tekst, `EventType` tekst, `status / mode (json)` tekst

### Limieten en valkuilen
- Geen gedocumenteerde limiet; de hele catalogus (6.514 regels) komt in één text-antwoord van ~0,6 MB. (getest)
- /event/1/count (optioneel in FDSN) bestaat hier niet: 404. Tel zelf de regels van format=text. (getest)
- Niets gevonden geeft HTTP 204 zonder inhoud, geen lege lijst. Een JSON-parser struikelt daarover; vang 204 af of gebruik nodata=404. (getest)
- De catalogus is niet alleen Nederland: zonder vak komen ook bevingen in Caribisch Nederland en verder weg mee (orderby=magnitude gaf een beving bij de Bovenwindse Eilanden); met een vak ook de Ruhr en België. (getest)
- De parameter catalog werkt niet (volgens de KNMI-uitlegpagina niet beschikbaar in SeisComP). (uit de beschrijving)
- In format=text staan getallen met veel decimalen (Magnitude 1.5031251973028663, coördinaten 53.46530151367188): rond zelf af. (getest)
- Een foutmelding (400, 404) is platte tekst met de regel 'Usage details are available from …', geen JSON. (getest)

### Voorbeeld
```
https://api.dataplatform.knmi.nl/fdsnws/event/1/query?starttime=2026-01-01&minlatitude=50.7&maxlatitude=53.7&minlongitude=3.2&maxlongitude=7.3&eventtype=induced%20or%20triggered%20event&limit=5&format=json
```

## Zo haal je het op

### curl
```bash
curl "https://api.dataplatform.knmi.nl/fdsnws/event/1/query?starttime=2024-01-01&minlatitude=50.7&maxlatitude=53.7&minlongitude=3.2&maxlongitude=7.3&eventtype=induced%20or%20triggered%20event&format=text"
```

### python
```python
import requests
from collections import Counter

url = "https://api.dataplatform.knmi.nl/fdsnws/event/1/query"
params = {"starttime": "1990-01-01", "minlatitude": 50.7, "maxlatitude": 53.7,
          "minlongitude": 3.2, "maxlongitude": 7.3, "format": "text"}
regels = requests.get(url, params=params).text.splitlines()[1:]
jaren = Counter()
for r in regels:
    k = r.split("|")
    plaats, soort, kracht = k[12], k[13], float(k[10] or 0)
    if soort == "induced or triggered event" and kracht >= 1.5 and not plaats.endswith(("(Duitsland)", "(België)")):
        jaren[k[1][:4]] += 1
print(sorted(jaren.items()))
```

## Wat je ermee kunt bouwen
- [Aardbevingentracker: elke beving op de kaart, met gemeente en woningen](https://www.opendataindex.nl/bouwen/aardbevingentracker.md): Een kaart en tijdlijn van alle bevingen in Nederland sinds 1986, met kracht, soort, gemeente en buurt, en het aantal adressen binnen twee kilometer van het epicentrum.


## Voorbeelden met echte cijfers (2)

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

- **Geïnduceerde aardbevingen in Nederland (kracht 1,5 of meer): 7 in 2025, tegen 34 in het piekjaar 2013** (2025). Tabel fdsnws/event. [Voorbeeld](https://www.opendataindex.nl/voorbeeld/knmi-aardbevingen-geinduceerd-per-jaar)
  - `https://api.dataplatform.knmi.nl/fdsnws/event/1/query?starttime=1900-01-01&minlatitude=50.7&maxlatitude=53.7&minlongitude=3.2&maxlongitude=7.3&format=text`
- **Geïnduceerde aardbevingen per plaats: het meest Garrelsweer (89 bevingen), dan Appingedam en Loppersum** (1986–2026). Tabel fdsnws/event. [Voorbeeld](https://www.opendataindex.nl/voorbeeld/knmi-aardbevingen-per-plaats)
  - `https://api.dataplatform.knmi.nl/fdsnws/event/1/query?starttime=1900-01-01&minlatitude=50.7&maxlatitude=53.7&minlongitude=3.2&maxlongitude=7.3&format=text`
