OpenStreetMap logo OpenStreetMap

Heute stellte sich mir die Frage, auf die die Overpass-API eine Antwort weiß.

Wie viele Newbies gibt es eigentlich in einem Gebiet, die Eisenbahnsignale mappen? Der Begriff “Newbie” stimmt nicht ganz, eigentlich erhält man alle Nodes, die nicht von einer vorher definierten Menge an Mappern zuletzt editiert wurden.

In den OSM-Daten sind neben den Tags nämlich auch ein paar Metadaten enthalten:

Beispiel:

<node id="3515197709" lat="48.8605008" lon="9.3274573" version="5" 
timestamp="2015-07-21T19:02:45Z" changeset="32785733" uid="2450569" 
user="regedemu">
    <tag k="railway" v="signal"/>
    <tag k="railway:signal:direction" v="forward"/>
    <tag k="railway:signal:main" v="DE-ESO:hp"/>
    <tag k="railway:signal:main:form" v="light"/>
    <tag k="railway:signal:main:height" v="normal"/>
    <tag k="railway:signal:main:states" v="DE-ESO:hp0;DE-ESO:hp1"/>
    <tag k="railway:signal:position" v="right"/>
    <tag k="ref" v="N501"/>
    <tag k="source" v="survey"/>
</node>

Wir sehen in obigen XML-Listing folgende Metadaten:

  • Version des Objekts (version)
  • Zeitstempel (timestamp)
  • Änderungssatz-ID (changeset). Dieser Änderungssatz hat das Objekt zuletzt bearbeitet.
  • User-ID (uid). Dieser User hat das Objekt zuletzt bearbeitet. Diese bleibt gleich, auch wenn der User sich umbenennt.
  • User (user). Dieser User hat das Objekt zuletzt bearbeitet.

Uns interessieren timestamp uind user. Mit dem Zeitstempel filtern wir nur die neusten Änderungen, mit User filtern wir alle Objekte weg, die von Eisenbahn-Powermappern geändert wurden.

Das ist die Overpass-Abfrage dazu:

// Datum ggf. anpassen
node
  [railway=signal](newer:"2015-05-01T07:00:00Z")
  ({{bbox}})->.newnodes;
 
// Liste aller User, die man schon kennt und nicht in den Ergebnissen haben möchte
// i.d.R. sind das Poweruser
(.newnodes; - node.newnodes(user:Nakaner);)->.newnodes;
(.newnodes; - node.newnodes(user:"Nakaner-repair");)->.newnodes;
(.newnodes; - node.newnodes(user:bigbug21);)->.newnodes;
(.newnodes; - node.newnodes(user:mapper999);)->.newnodes;
 
// Ausgabe
.newnodes out meta;

Die Abfrage muss man für jede Region anpassen. Denn Eisenbahnmapper haben meist eine Mappingregion, in der sie aktiv sind. Tut man das nicht, erhält man zu viele False Positives, d.h. unter Umständen alle Signale einer Strecke, weil diese von einem User innerhalb weniger Tage eingetragen wurden.

Diese Abfrage habe ich zur Overpass-Beispielsammlung ergänzt.

Email icon Bluesky Icon Facebook Icon LinkedIn Icon Mastodon Icon Telegram Icon X Icon

Discussion

Comment from mmd on 16 August 2015 at 12:25

Die Overpass QL Query sieht wirklich nicht so schön aus. Eigentlich eine gute Gelegenheit, das Proposal von jotpe wieder aufzugreifen und umzusetzen: https://github.com/drolbr/Overpass-API/pull/225

Bitte mal schauen, ob das so funktioniert und ggfs. direkt im Pull request kommentieren. Das ganze funktioniert bisher nur auf der dev-Instanz. Es kann allerdings noch eine geraume Weile dauern, bis es allgemein verfügbar ist.

Log in to leave a comment