User:Oli-Wan/Wall-E/MechEditEuthanize1NW

From OpenStreetMap Wiki
Jump to: navigation, search

Wege mit nur einem Knoten

Wege mit nur einem Knoten werden von verschiedenen Editoren hinterlassen, führend ist hier Potlatch 2. "Wege" mit nur einem Knoten sind unsinnig, daher sollen sie eliminiert werden. Die einfachste Lösung bestünde in der pauschalen Löschung aller derartigen Wege. Davon möchte ich aber absehen und mich lieber auf Fälle beschränken, wo per Algorithmus (weitestgehend) sicher entschieden werden kann, daß der Weg keine Restinformation enthält, aus der ein menschlicher Korrekteur noch Information herausziehen könnte, die eine "bessere" Korrektur erlauben. Dies trifft in folgenden Fällen zu:

  • 1NW01 Der Weg hat keine Tags, ist nicht Element einer Relation, seine Version ist 1. In diesem Fall enthält der Weg keinerlei Information.
  • 1NW02 Der Weg ist nicht Element einer Relation, seine Version ist 1; die Tags des Weges sind identisch zu den Tags eines weiteren Weges, der denselben Knoten enthält. (Sämtliche mit dem Weg gelöschten Informationen sind an dem anderen Weg weiterhin vorhanden.)
  • 1NW03 Der Weg ist nicht Element einer Relation, seine Version ist > 1; die Tags des Weges sind identisch zu den Tags eines weiteren Weges, der denselben Knoten enthält sowie ferner alle Knoten, die in der Vorgängerversion noch im nun kaputten Weg enthalten waren. In diesem Fall enthält der reguläre Weg neben den Tags auch die gesamte frühere Geometrieinformation des nun defekten Weges.
  • 1NW04 wie 1NW03, jedoch muß der weitere vorhandene Weg nur die noch existierenden Knoten aus der Vorgängerversion des nun defekten Wegs enthalten, d.h. es dürfen auch Knoten gelöscht worden sein. Unterstellt man, daß die Löschung der Knoten (bzw. auch des sie referenzierenden, nun defekten Weges) beabsichtigt war, enthält der defekte Weg keine Information, die nicht auch anderweitig vorhanden ist, und erfüllt auch keine Markerfunktion.
  • 1NW05 wie 1NW02, die Tags des Weges sind jedoch am Knoten selbst statt an einem von dessen übrigen Eltern.
  • 1NW13 wie 1NW03, jedoch keine komplette Übereinstimmung der Tags, sondern nur Übereinstimmung bis auf triviale Tags.
  • 1NW14 wie 1NW04, jedoch keine komplette Übereinstimmung der Tags, sondern nur Übereinstimmung bis auf triviale Tags.
  • 1NW22 analog zu 1NW02, jedoch ist der Weg Element einer oder mehrerer Relationen. Der weitere Weg, welcher den Knoten enthält und die Tags dupliziert, ist ebenfalls Element all dieser Relationen. Der Ein-Knoten-Weg kann in diesem Fall aus den Relationen entfernt und gelöscht werden.

In diesen Fällen wird daher der betroffene Weg gelöscht. Die obige Liste wird sukzessive ergänzt durch weitere im Zuge von Testing und Diskussion als sicher erkannte Szenarien.

Wenn ein Weg gelöscht wird und der von ihm referenzierte Knoten weder selbst Tags enthält noch Teil eines anderen Weges oder einer Relation ist, kann der Knoten ebenfalls entsorgt werden.

Als trivial gelten neben created_by=* und source=* Tags mit Standardwerten wie layer=0, access=yes und oneway=no.

Der Prüfung, ob der Weg gelöscht werden kann, ist der Versuch vorgeschaltet, ihn aus eventuellen Elternrelationen zu entfernen. Dies geschieht für jede Elternrelation einzeln und unabhängig davon, ob der Weg selbst in der Folge tatsächlich gelöscht werden kann. Der Algorithmus hierzu lautet wie folgt (W ist der defekte Weg, N sein Knoten, R die jeweilige Elternrelation):

  1. Prüfe, ob die Relation ein type-Tag hat und dieses den Wert route oder TMC enthält.
  2. Finde alle Referenzen auf W in R, speichere deren Rollen in einer Liste. Bei mehr als einer Referenz Abbruch.
  3. Prüfe die erhaltene Rollenliste: alle gefundenen Rollen müssen leer, "forward" oder "backward" sein. (Hierdurch sollen Haltestellen ausgeschlossen werden: Hat W in R etwa die Rolle "platform", bricht der Algorithmus ab.)
  4. Suche die übrigen Elternwege von N, welche selbst keine 1NW sind, in der Elementliste von R (d.h. welche an W anschließenden Wege ebenfalls in R enthalten sind). Weiter in Abhängigkeit von deren Anzahl:
    • Sind zwei N-Elternwege in R enthalten, muß N über einen der Wege erreicht und über den anderen wieder verlassen werden. Prüfe daher für jeden der beiden Wege, ob N hier entweder als erster oder als letzter Knoten vorkommt.
    • Ist nur ein Elternweg von N in R enthalten, muß dieser allein durch N hindurch führen. Prüfe, daß N in der Mitte dieses Weges liegt (nicht erster oder letzter Knoten).
    • Abbruch in allen anderen Fällen (keine Elternwege von N in R, oder mehr als zwei).
  5. Entferne W aus R.

Betrachtet werden also nur Routenrelationen (diese sind am häufigsten beteiligt, da Straßen-Wege am häufigsten editiert werden); hierzu wird neben type=route auch type=TMC gezählt. Ferner soll der 1-Knoten-Weg in dieser Relation nur einmal vorkommen und an dieser Stelle soll die Relation stetig sein. Näheres im verlinkten Forumsfaden. Der Algorithmus erscheint zwar sehr restriktiv, deckt jedoch den Großteil der in der Praxis vorkommenden Fälle ab, wo 1-Knoten-Wege in Relationen enthalten sind.

Ausnahmen, Opt-out

Nicht vorgesehen.

Status, Ausführungsintervall

Nach einer längeren Entwicklungsphase läuft auch dieser Korrekturprozeß inzwischen im Normalbetrieb und eliminiert in DE einen erheblichen Teil der neu erzeugten 1-Knoten-Wege. Deren Neuentstehung wird damit momentan soweit in Schach gehalten, daß der Rest durch Mapper beseitigt werden kann.

Diskussion

Im deutschsprachigen Forum ab 23.04.2013.

Siehe auch

Elementare Geometriefehler im OSM Inspector.

Editor-Tickets: