OpenStreetMap 로고 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.

이메일 아이콘 Bluesky 아이콘 Facebook 아이콘 LinkedIn 아이콘 마스토돈 아이콘 텔레그램 아이콘 X 아이콘

토론

2015년 8월 16일 12:25mmd님의 의견

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.

댓글을 남기려면 로그인하세요