Overpass bewahrt die alten Versionen jedes Elements auf. Mit der Einstellung [date:…] läuft die ganze Abfrage auf den Daten dieses Zeitpunkts: mit den Tags und Positionen, die die Elemente damals hatten, und mit den Elementen, die es damals gab.
Diese Abfrage findet die Cafés im Zentrum von Zürich am 1. Januar 2015. Das erste Beispiel durchsucht denselben Rahmen heute.
Die Abfrage
[out:json][timeout:60][date:"2015-01-01T00:00:00Z"]; nw(47.365,8.535,47.380,8.555)(if:t["amenity"]=="cafe"); out center;
Ausführen
Live-Ergebnis von overpass.ch, bis zu 12 Stunden zwischengespeichert. Kartendaten © OpenStreetMap-Mitwirkende (ODbL).
So funktioniert es
[date:"2015-01-01T00:00:00Z"]legt den Zeitpunkt fest, in UTC. Jede Anweisung der Abfrage sieht die Daten dieses Zeitpunkts.nw(47.365,8.535,47.380,8.555)sucht Nodes und Ways im Rahmen. Relationen bleiben weg: An einem früheren Datum machen sie eine Abfrage um ein Vielfaches langsamer.(if:t["amenity"]=="cafe")behält die Cafés. In Abfragen auf alte Daten ist das schneller als["amenity"="cafe"], weil der Tag nur bei den Elementen im Rahmen geprüft wird.out center;gibt die Cafés mit den Tags und der Position aus, die sie an diesem Tag hatten.- Die Geschichte beginnt am 12. September 2012, als OpenStreetMap die Lizenz wechselte. Ein früheres Datum liefert nur die Elemente, die zwischen diesem Datum und September 2012 niemand bearbeitet hat.
Varianten
- Gebiete funktionieren auch an einem früheren Datum, mit ihrem heutigen Umriss:
area["name"="Zürich"]["admin_level"="8"]->.a;undnw(area.a). Für ganz Zürich dauert das etwa 10 Sekunden. - Ein einzelnes Objekt an einem früheren Datum, zum Beispiel ein Laden, bevor er gelöscht wurde:
[date:"2024-04-01T00:00:00Z"];node(7815426573);out meta;. - Was sich zwischen zwei Daten geändert hat: siehe Änderungen in einem Gebiet.
Aus Ihrem Code ausführen
curl https://api.overpass.ch/v1/IHR_API_SCHLÜSSEL/interpreter \
--data-urlencode 'data@query.overpassql'
import requests
query = open("query.overpassql").read()
r = requests.post("https://api.overpass.ch/v1/IHR_API_SCHLÜSSEL/interpreter",
data={"data": query}, timeout=120)
r.raise_for_status()
print(r.json()["elements"][:3])
const res = await fetch("https://api.overpass.ch/v1/IHR_API_SCHLÜSSEL/interpreter", {
method: "POST",
body: new URLSearchParams({ data: query }),
});
if (!res.ok) throw new Error(await res.text());
console.log(await res.json());
Speichern Sie die Abfrage als query.overpassql. Sie funktioniert genauso in Overpass Turbo, QGIS und JOSM.