# EEA luchtkwaliteit

Dezelfde Nederlandse meetstations als Luchtmeetnet, maar naast die van de rest van Europa. Handig om Amsterdam met Antwerpen of Keulen te vergelijken.

- Uitgever: Europees Milieuagentschap
- Gebied: Europa · Laagste detail: meetstation
- Periode: 2013 – heden · Ververst: dagelijks
- Toegang: Open · Licentie: CC BY 4.0
- Koppelsleutels: stationscode, landcode
- Status: grijs
- URL: https://www.eea.europa.eu/en/topics/in-depth/air-pollution

## Wat kun je ermee?
- **Amsterdam tegen Antwerpen en Keulen.** Kies de straatstations in drie steden en vergelijk de jaargemiddelden.

## Interessante koppelingen
- Lucht en gezondheid in Europa → [eurostat](https://www.opendataindex.nl/bron/eurostat.md) via landcode / regio. Zet luchtkwaliteit per regio naast sterfte aan luchtwegziekten uit Eurostat.

## Vergelijkbare bronnen
- [luchtmeetnet](https://www.opendataindex.nl/bron/luchtmeetnet.md): Alleen Nederland, maar sneller beschikbaar.

## API (SQL via GET (Discodata, JSON) + REST-downloaddienst (Parquet))

- Basis: https://discodata.eea.europa.eu/sql
- Toegang: Geen sleutel of account voor Discodata en de downloaddienst (getest). (getest)
- Formaten: json, parquet, csv
- Omvang: 6563389 rijen in AirQualityStatistics (heel Europa); Nederland 144.817 rijen van 153 stations, statistiekjaren 1976–2026 (16 okt 2026) (getest)
- Filteren: Gewone SQL-WHERE. Handige filters: CountryCode='NL', AirPollutant='NO2', DataAggregationProcessId='P1Y' (jaargemiddelde), DataCovFilterYN='Yes' (genoeg meetdekking), SourceDataFlow LIKE 'E1a%' (gevalideerd).; =, <>, <, >, LIKE, IN, AND, OR, TOP, GROUP BY, ORDER BY

### Endpoints
- `GET /sql?query={SQL}&p={pagina}&nrOfHits={aantal}`: Een SELECT op een Discodata-tabel; antwoord {"results": [...]}. Luchtkwaliteit: [AirQualityDataFlows].[latest].[AirQualityStatistics] (jaarstatistieken per meetpunt).
- `GET /SchemaDifferences.aspx?dbName=…&schema1=latest&schema2=v1&result=json`: Verschillen tussen twee versies van een database.

### Parameters
- `query`: Transact-SQL (Microsoft SQL Server), alleen SELECT; geen WITH. Berekende kolommen moeten een naam hebben (COUNT(*) AS n). Gebruik TOP n om klein te beginnen. (uit de beschrijving)
- `p`: Paginanummer; voorbij de laatste pagina een lege lijst. (uit de beschrijving)
- `nrOfHits`: Rijen per pagina, standaard 100. (uit de beschrijving)

### Kolommen van AirQualityStatistics (selectie uit 47) (11)
`AirQualityStationEoICode` tekst, `AQStationName` tekst, `AirPollutant` tekst, `DataAggregationProcessId` tekst, `YearOfStatistics` integer, `AirPollutionLevel` getal, `DataCoverage` getal, `AirQualityStationType / AirQualityStationArea` tekst, `SourceDataFlow` tekst, `Longitude / Latitude` getal, `RawData` url

### Limieten en valkuilen
- Een vraag mag hoogstens ~30 seconden duren; daarna {"errors":[{"error":"Query timed out"}]} met HTTP 200. Een ORDER BY over Nederland voor één stof en jaar haalde dat al niet: sorteer zelf. (getest)
- Standaard 100 rijen per pagina (nrOfHits). (uit de beschrijving)
- Fouten komen met HTTP 200 als {"errors":[{"error":"Invalid column name …","errorcode":10003}]}. Controleer altijd of er 'results' in het antwoord staat. (getest)
- CountryCode, City en CityCode zijn met spaties aangevuld ('BG        '); = 'NL' werkt wel, maar gebruik RTRIM bij vergelijken of groeperen in je eigen code. (getest)
- Op 15 okt 2026 gaf een alias in SELECT samen met ORDER BY de fout 'Your query is not allowed execution' (10002); op 16 okt werkte dat wel. Bij die fout: zonder alias proberen. (getest)
- 'latest' is altijd de nieuwste versie van de database; zet een vaste versie (v1r4) in de query als je resultaten herhaalbaar wilt houden. (uit de beschrijving)

### Voorbeeld
```
https://discodata.eea.europa.eu/sql?query=SELECT%20TOP%205%20AirQualityStationEoICode%2C%20AQStationName%2C%20AirPollutant%2C%20YearOfStatistics%2C%20AirPollutionLevel%2C%20UnitOfAirpollutionLevel%2C%20AirQualityStationType%20FROM%20%5BAirQualityDataFlows%5D.%5Blatest%5D.%5BAirQualityStatistics%5D%20WHERE%20CountryCode%3D%27NL%27%20AND%20AirPollutant%3D%27NO2%27%20AND%20DataAggregationProcessId%3D%27P1Y%27%20AND%20YearOfStatistics%3D2024%20AND%20DataCovFilterYN%3D%27Yes%27
```


## Voorbeelden met echte cijfers (2)

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

- **Stikstofdioxide in de buitenlucht in Nederland (jaargemiddelde van de meetstations): 15,7 microgram per kubieke meter in 2025, 40% minder dan in 2013** (2025). Tabel AirQualityStatistics. [Voorbeeld](https://www.opendataindex.nl/voorbeeld/eea-no2-nederland)
  - `https://discodata.eea.europa.eu/sql?query=SELECT%20YearOfStatistics%20jaar%2C%20COUNT(*)%20n%2C%20AVG(AirPollutionLevel)%20gem%20FROM%20%5BAirQualityDataFlows%5D.%5Blatest%5D.%5BAirQualityStatistics%5D%20WHERE%20CountryCode%3D'NL'%20AND%20AirPollutant%3D'NO2'%20AND%20DataAggregationProcessId%3D'P1Y'%20AND%20DataCovFilterYN%3D'Yes'%20AND%20SourceDataFlow%20LIKE%20'E1a%25'%20AND%20YearOfStatistics%20%3E%3D%202013%20GROUP%20BY%20YearOfStatistics`
- **Fijnstof (PM2,5) op stedelijke achtergrondstations in Nederland: lager dan in 14 van de 26 andere EU-landen** (2025). Tabel AirQualityStatistics. [Voorbeeld](https://www.opendataindex.nl/voorbeeld/eea-pm25-eu)
  - `https://discodata.eea.europa.eu/sql?query=SELECT%20RTRIM(CountryCode)%20land%2C%20YearOfStatistics%20jaar%2C%20COUNT(*)%20n%2C%20AVG(AirPollutionLevel)%20gem%20FROM%20%5BAirQualityDataFlows%5D.%5Blatest%5D.%5BAirQualityStatistics%5D%20WHERE%20AirPollutant%3D'PM2.5'%20AND%20DataAggregationProcessId%3D'P1Y'%20AND%20DataCovFilterYN%3D'Yes'%20AND%20SourceDataFlow%20LIKE%20'E1a%25'%20AND%20AirQualityStationType%3D'Background'%20AND%20AirQualityStationArea%3D'Urban'%20AND%20YearOfStatistics%20%3E%3D%202022%20GROUP%20BY%20CountryCode%2C%20YearOfStatistics`
