Overpass-Verlaufsabfragen: [date:], [diff:] und [adiff:]
OpenStreetMap mit der Overpass API so abfragen, wie es an einem früheren Datum war, oder die Änderungen zwischen zwei Daten.
[date:"2015-01-01T00:00:00Z"] in den Einstellungsblock, und die Abfrage läuft auf den Daten dieses Tages. [diff:"A","B"] liefert, was sich zwischen zwei Daten geändert hat, und [adiff:"A","B"] die alte und die neue Version jeder Änderung. Der Verlauf beginnt am 12. September 2012. Diffs gibt es nur als XML. Bei overpass.ch gehören Verlaufsabfragen zu den Tarifen Medium und Large.
Die Karte an einem früheren Datum
Die Cafés der Zürcher Innenstadt am 1. Januar 2015:
[out:json][date:"2015-01-01T00:00:00Z"]; nw(47.365,8.535,47.380,8.555)(if:t["amenity"]=="cafe"); out center;
Die Antwort hat 52 Cafés; dieselbe Abfrage ohne [date:] findet heute 116. Sie dauerte 1,1 Sekunden. Alles nach dem Einstellungsblock läuft auf den Daten dieses Datums: Tags, Positionen, die Nodes eines Ways. Mit out meta sehen Sie die Version jedes Elements, wann sie entstand und von wem.
Änderungen zwischen zwei Daten
[diff:"START","ENDE"] führt die Abfrage an beiden Daten aus und liefert eine <action> für jedes Element, das sich unterscheidet: create für eines, das nur am Ende passt, delete für eines, das nur am Anfang passt, modify für eines, das an beiden Daten passt, aber in einer anderen Version. [adiff:] liefert dieselben Aktionen mit der alten und der neuen Version jedes Elements; so sehen Sie, was sich geändert hat und ob ein gelöschtes Element von der Karte verschwunden ist. Zwei Aktionen aus den Restaurants des Zürcher Niederdorfs, von 2023 bis 2025:
[out:xml][adiff:"2023-01-01T00:00:00Z","2025-01-01T00:00:00Z"]; nw(47.369,8.541,47.376,8.547)(if:t["amenity"]=="restaurant"); out meta center;
<action type="delete">
<old>
<node id="955074361" lat="47.3743872" lon="8.5434905" version="5" timestamp="2017-09-16T14:12:10Z" user="mllr" …>
<tag k="amenity" v="restaurant"/>
<tag k="name" v="Kormasutra"/>
</node>
</old>
<new>
<node id="955074361" visible="false" version="7" timestamp="2023-04-24T19:55:28Z" user="paulbrunner" …/>
</new>
</action>
<action type="delete">
<old>
<node id="343391110" lat="47.3731698" lon="8.5448295" version="8" timestamp="2017-12-15T13:43:01Z" user="d_berger" …>
<tag k="amenity" v="restaurant"/>
<tag k="name" v="Isebähnli"/>
</node>
</old>
<new>
<node id="343391110" visible="true" version="10" timestamp="2024-04-28T15:47:07Z" user="casperonbike" …/>
</new>
</action>
Für die Abfrage sind beide Löschungen. Kormasutra hat visible="false": Der Node wurde im April 2023 gelöscht. Isebähnli hat visible="true": Der Node ist noch da, aber kein Restaurant mehr. Eine Version, die nicht zur Abfrage passt, kommt ohne Tags; fragen Sie sie mit [date:] nach ihrer ID ab, um zu sehen, was daraus wurde, hier eine Bar. Änderungen in OpenStreetMap zwischen zwei Daten liest eine solche Antwort in Python.
Ab dem 12. September 2012
Der Verlauf beginnt mit den Daten vom 12. September 2012, als OpenStreetMap die Lizenz wechselte. Ein Datum davor liefert nur die Elemente, die zwischen diesem Datum und September 2012 niemand bearbeitet hat. Die Cafés im Rechteck oben:
| Datum | Cafés |
|---|---|
| 1. Januar 2008 | 0 |
| 1. Januar 2010 | 9 |
| 13. September 2012 | 50 |
| 1. Januar 2015 | 52 |
| 1. Januar 2020 | 85 |
| heute | 116 |
Antworten für Daten ab dem 13. September 2012 sind vollständig.
Die Versionen eines Elements
timeline(node, 26863664); listet die Versionen eines Elements auf, und retro (Datum) { … } führt Anweisungen innerhalb einer Abfrage an einem anderen Datum aus. Zusammen liefern sie jede Version eines Objekts: siehe Versionsgeschichte eines OpenStreetMap-Objekts.
Gut zu wissen
[out:json]und[out:csv]können keinen Diff aufnehmen. Overpass antwortet mitstatic error: The selected output format does not support the diff or adiff mode: siehe diesen Fehler.[adiff:]meldet manche Elemente, die neu zur Abfrage passen, alsmodifymit einer alten Version ohne Tags;[diff:]meldet dieselben Elemente alscreate. Für die Restaurants oben hat[diff:]8 Aktionencreateund[adiff:]5.- Tag-Filter in eckigen Klammern sind an einem früheren Datum langsam.
["amenity"="cafe"]brauchte für die Cafés oben 3,7 Sekunden,(if:t["amenity"]=="cafe")für dieselbe Antwort 1,1 Sekunden. - Flächenfilter wie
area["name"="Zürich"]verwenden die Grenze von heute, auch an einem früheren Datum. - Relationen an einem früheren Datum sind langsam: Die 27 Relationen eines Rechtecks von 200 × 300 m brauchten 26 Sekunden. Fragen Sie nach Nodes und Ways, wo es geht.
- Eine Antwort für zwei Daten in der Vergangenheit ändert sich nie. Speichern Sie sie, statt erneut zu fragen.
Bei overpass.ch
Die Tarife Medium und Large führen Verlaufsabfragen auf dem ganzen Planeten aus; eine Abfrage über ein kleines Gebiet dauert 1 bis 2 Sekunden. Andere Tarife erhalten HTTP 403 history_not_in_plan. Die Beispiele zum Verlauf führen jede Art von Abfrage live aus, mit dem Ergebnis auf einer Karte und in einer Tabelle.
https://overpass-api.de/api/interpreter
→ https://api.overpass.ch/v1/IHR_API_SCHLÜSSEL/interpreter