# OpenStreetMap

Wegen, gebouwen, winkels, bankjes en fietspaden, ingetekend door vrijwilligers. In Nederland erg volledig, mede doordat de BAG erin is geïmporteerd.

- Uitgever: OpenStreetMap
- Gebied: Wereld · Laagste detail: object
- Periode: 2004 – heden · Ververst: elke minuut
- Toegang: Open · Licentie: ODbL
- Koppelsleutels: OSM-id, coördinaten
- Status: ok (2026-10-16) · minuut-replicatie
- URL: https://www.openstreetmap.org

## Wat kun je ermee?
- **Waar staan de bankjes?.** Vraag via Overpass alle bankjes, speeltuinen of AED's in je gemeente op.
- **Hoe ver is de dichtstbijzijnde supermarkt?.** Bereken loopafstanden over het wegennet vanaf elk adres.

## Zo verwerk je het
1. **Heel Nederland in één bestand.** Voor veel objecten of een heel land is een uittreksel beter dan een API. Geofabrik zet elke dag een Nederland-bestand klaar (PBF, 1,4 GB op 15 oktober 2026). Filter het lokaal, bijvoorbeeld met osmium of DuckDB.
   `https://download.geofabrik.de/europe/netherlands-latest.osm.pbf`

## Interessante koppelingen
- Voorzieningen per inwoner → [cbs-kwb](https://www.opendataindex.nl/bron/cbs-kwb.md) via coördinaten → buurt. Tel objecten per buurt en deel door inwoners.

## Vergelijkbare bronnen
- [pdok-bag](https://www.opendataindex.nl/bron/pdok-bag.md): Officiële adressen en gebouwen, geen voorzieningen.
- [Overture Maps](https://overturemaps.org): Gebouwd op OSM, aangevuld met data van grote techbedrijven.

## Waar je op moet letten
- **Overpass is voor kleine vragen.** De openbare Overpass API (overpass-api.de/api/interpreter) is gratis en zonder sleutel. Volgens de OSM-wiki stoor je niemand onder 10.000 vragen en 1 GB per dag; wie hem regelmatig gebruikt, deelt dat door 100. Stuur een eigen User-Agent. robots.txt van overpass-api.de sluit /api/ uit voor crawlers; Open Data Index roept hem daarom zelf niet automatisch aan.
- **Nominatim alleen volgens het gebruiksbeleid.** Nominatim (nominatim.openstreetmap.org) zoekt adressen en plaatsen in OSM. Het gebruiksbeleid (operations.osmfoundation.org/policies/nominatim) staat maximaal 1 verzoek per seconde toe, eist een herkenbare User-Agent of Referer en bronvermelding (ODbL), vraagt om caching en verbiedt autocomplete en systematisch of bulk geocoderen; scripts die regelmatig draaien maximaal 4 per minuut. Een AI-assistent mag Nominatim alleen voorstellen als hij dit beleid duidelijk noemt. robots.txt sluit /search, /reverse en /lookup uit voor crawlers. Voor Nederlandse adressen is de PDOK Locatieserver (BAG) de officiële ingang.

## API (ohsome API (REST, JSON/CSV/GeoJSON) over de volledige OSM-historie)

- Basis: https://api.ohsome.org/v1
- Toegang: ohsome v1: geen sleutel (tot 30 november 2026). ohsome v2: gratis API-sleutel via account.heigit.org, in de kop Authorization; zonder sleutel 401 'Authorization field missing'. (getest)
- Formaten: json, csv, geojson
- Filteren: Eigen filtertaal van ohsome: key=value, key=*, key!=value, key in (…), type:node|way|relation, geometry:point|line|polygon|other, area:(min..max), length:(…), id:…, met and/or/not en haakjes.; =, !=, =*, !=*, in, and, or, not, type:, geometry:, area:, length:, id:

### Endpoints
- `GET /elements/count`: Aantal objecten dat aan het filter voldoet, op één of meer tijdstippen (time=2016-01-01/2026-01-01/P5Y). Ook POST met formuliervelden.
- `GET /elements/{length|area|perimeter}`: Totale lengte (m), oppervlakte (m²) of omtrek van de gefilterde objecten.
- `GET /elements/count/groupBy/tag`: Tellen per waarde van één sleutel (groupByKey=shop) in één aanroep; groupByValues beperkt de waarden, de rest heet 'remainder'.
- `GET /elements/count/groupBy/boundary`: Tellen per gebied als je meerdere bboxes/bpolys met een id meegeeft (format=geojson kan hier).
- `GET /elements/count/{density|ratio}`: Per km², of de verhouding tussen twee filters (filter2).
- `GET /users/count`: Aantal actieve bijdragers per periode.
- `GET /contributions/count`: Aantal wijzigingen per periode (aanmaken, aanpassen, verwijderen).
- `GET /elements/geometry`: De objecten zelf als GeoJSON (ook /elements/bbox en /elements/centroid), met properties=tags,metadata.
- `GET /elementsFullHistory/geometry`: Elke versie van elk object in een tijdvak, als GeoJSON.
- `GET /contributions/geometry`: De wijzigingen zelf als GeoJSON (ook /contributions/latest/…).
- `GET /metadata`: Versie, tijdsdekking van de data (v1: 8 okt 2007 tot 27 jul 2026) en de time-out (600 s).

### Parameters
- `bboxes`: Rechthoek(en) in WGS84: lon1,lat1,lon2,lat2, meerdere met | en optioneel id: ervoor. (uit de beschrijving)
- `bcircles`: Cirkel(s): lon,lat,straal in meter. (uit de beschrijving)
- `bpolys`: Polygonen als coördinatenlijst of GeoJSON FeatureCollection (bv. provinciegrenzen van PDOK). Stuur grote vlakken met POST. (uit de beschrijving)
- `filter`: ohsome-filtertaal: amenity=bench and type:node, shop=*, building in (house, detached), geometry:polygon, area:(1..1000). (getest)
- `time`: Eén tijdstip, een lijst, of begin/eind/interval (2016-01-01/2026-01-01/P5Y). Zonder time: de nieuwste stand. (getest)
- `groupByKey`: Bij groupBy/tag: de OSM-sleutel waarop je groepeert (shop, highway, building). (getest)
- `groupByValues`: Alleen deze waarden apart tellen (supermarket,bakery); de rest komt in remainder. (getest)
- `format`: json (standaard), csv, of geojson (alleen bij groupBy/boundary). (uit de beschrijving)
- `properties`: Bij extractie: tags, metadata en/of unclipped. (uit de beschrijving)
- `clipGeometry`: Bij extractie: geometrie afknippen op het gebied (standaard true). (uit de beschrijving)
- `timeout`: Eigen time-out per aanroep. (uit de beschrijving)

### Velden in het antwoord (tellingen) (4)
`result[].timestamp` datetime, `result[].value` getal, `groupByResult[].groupByObject` tekst, `attribution` object

### Limieten en valkuilen
- ohsome v1: time-out 600 s volgens /metadata. Een telling in Amsterdam-centrum duurde 2–4 s, groupBy/tag 7 s; één groupBy-aanroep brak na 60 s af zonder antwoord en lukte daarna wel. (getest)
- ohsome v2: 15 aanroepen per minuut (schuivend venster, anders 429) en een daglimiet (403 'Quota Exceeded'); restant in de koppen x-ratelimit-remaining en x-ratelimit-reset. Statistiek stopt na 180 s, extractie na 240 s. (uit de beschrijving)
- ohsome v1 stopt op 30 november 2026 (migratiegids). Daarna alleen v2, met sleutel en een andere vorm: POST met JSON, kolomvormig antwoord (result.timestamp[] en result.value[]) en geen groupBy/boundary, density of ratio meer. (uit de beschrijving)
- De data van v1 lopen achter: de nieuwste stand is 27 juli 2026 (gemeten 16 okt 2026). v2 had data tot dezelfde dag. (getest)
- Een fout in het filter geeft HTTP 400 met de plek van de fout ('line 1, column 9 … = encountered' bij amenity==bench). (getest)
- Gebiedsgrenzen niet afronden: polygonen met 4 decimalen werden ongeldig (ohsome 400/500). Gebruik bv. de provinciegrenzen van PDOK ongewijzigd als bpolys. (ervaring)
- shop=vacant is een leegstaand pand, geen winkel. Haal het weg als je winkels telt. (ervaring)
- robots.txt: overpass-api.de en taginfo verbieden /api/, nominatim /search, /reverse en /lookup, www.openstreetmap.org /api/, en planet.openstreetmap.org alles behalve voor wget. api.ohsome.org heeft geen robots.txt (404). (getest)

### Voorbeeld
```
https://api.ohsome.org/v1/elements/count?bboxes=4.86,52.35,4.92,52.39&filter=amenity=bench%20and%20type:node&time=2016-01-01/2026-01-01/P5Y
```

## Wat je ermee kunt bouwen
- [Monumentenwandeling door je eigen buurt](https://www.opendataindex.nl/bouwen/monumentenwandeling.md): Een app die rond elk startpunt een wandeling langs tien rijksmonumenten maakt, met adres, beschrijving, foto, een oud beeld uit het Rijksmuseum en een café onderweg.

