Overpass: rechnen mit aktuellem Datum

Ich habe eine Abfrage in Overpass, die mir alle nodes, die einen Namen haben und seit 5 Jahren nicht mehr geändert wurden, anzeigt:


(
  node [name](if:timestamp()<"2016-10-01")({{bbox}});
);
out body;
>;
out skel qt;

Gibt es eine Möglichkeit diesen String 2016-10-01 dynamisch zu gestallten, etwa wie today() - (5 * 365) ?

:confused:

Mit der date Erweiterung von overpass turbo geht sowas: https://wiki.openstreetmap.org/wiki/Overpass_turbo/Extended_Overpass_Turbo_Queries

Das hatte ich schon probiert. Da ich aber eine Fehlermeldung bekam, dachte ich, dass mein Gedanke falsche wäre:

node [name](if:timestamp()<{{date:1825 day}})

Wenn man aus der C Programmierung kommt, hat man mit dieser Sprache manchmal seine Probleme. Das die “” trotz einer Funktion bleiben müssen, muss ich erst noch verinnerlichen. :roll_eyes:

So klappt es.

node [name](if:timestamp()<"{{date:1825 day}}")

Danke für die Unterstützung

:smiley:

Geht das auch in der JOSM-Suchfunktion bzw. in validator.mapcss? Ich hab mir, aus ähnlichen Gründen, ein Validator-File gebastelt, das vor diversen Objekten warnt, die lange nicht mehr angefasst worden sind: https://github.com/smootheFiets/validator/blob/master/outdated.validator.mapcss

Leider hab ich da das Datum “fest verdrahten” müssen, à la


[JOSM_search("timestamp:/2019")
[/code]
(Timestamp vor 2019)

Ein Datum relativ zu heute, wie in BLEs Frage, wäre viel eleganter. Kann JOSM das?

Weil das {{…}} nicht zur Sprache von Overpass dazugehört :wink:
Overpass ist eine API, welche 2 (Overpass QL was du nutzt und Overpass XML) Abfragesprachen versteht. Und darauf aufbauend gibt es u.a. Overpass-Turbo als Webclient in welchem man halt mit den Sprachen eine Abfrage fomulieren kann. Und Overpass-Turbo bietet mit den {{…}}-Dingern halt Zusatzfunktionen an, welche umgewandelt werden, bevor es als Abfrage an die Overpass-API geht.
So wird aus {{bbox}} halt die “4 Zahlen mit Komma getrennt”-Kolonne, entsprechend dem, was die in OverpassTurbo dargestellte BBox halt ist. Overpass selbst kennt kein {{bbox}} und auch kein {{date:…}}.
Daher muss dann halt weiterhin das “” drum rum, weil es an Overpass halt tatsächlich als fester Datums-String geht, welcher lediglich von Overpass-Turbo jeweils dynamisch erzeugt wird.

Du würdest ja auch das hier (dein Eingangsbeispiel ohne “”) als falsch betrachten, oder?

(
  node [name](if:timestamp()<2016-10-01)({{bbox}});
);
out body;
>;
out skel qt;

(Syntaktisch nur deshalb richtig, weil 2016-10-01 halt 2005 als Zahl ergibt xD)

Gruß,
asca

Muss ich mir das also so vorstellen, dass Overpass Turbo als Web-Anwendung eine Spracherweiterung der API-Sprache hat. Und diese Erweiterungen wie ein Interpreter dann, zwar nicht in Maschinensprache, aber in die original Abfragesprache übersetzt?

Vielleicht werde ich jetzt bei dem kommenden Usselwetter doch mal das Wiki intensiver konsultieren.

Puuuh, :roll_eyes:
Handbücher lesen, :rage:
war noch nie mein Ding :frowning:

:slight_smile:

Das läuft eher nach dem Prinzip “Text suchen und ersetzen”: Overpass turbo sucht die {{ … }} mit regulären Ausdrucken und ersetzt einfach Teile, wenn sie zu den Shortcuts passen.

Ein paar Links zur Implementierung::
https://github.com/tyrasd/overpass-turbo/blob/6d05bf146378d752839397ee3e7dbc290c20c0d4/js/query.js#L27
https://github.com/tyrasd/overpass-turbo/blob/6d05bf146378d752839397ee3e7dbc290c20c0d4/js/shortcuts.js#L138