mkgmap: filtern bestimmter Einträge von bestimmten Benutzern

Hallo,

folgendes Problem:
Seit einem guten Jahr arbeitet ein Mapper bei mir in der Gegend recht aktiv am Datenbestand mit. Das ist schön und gut. Weniger schön und gut ist, dass er gefühlt hunderte Wege eingezeichnet hat, die alle nur rudimentär mit “highway=track” getaggt sind. Das problematische an dieser Stelle ist, dass die meisten der Wege für Radfahrer und manchmal nichtmal für Fussgäner sinnvoll passierbar sind. Ich vermute, dass sie deshalb bisher auch nicht gemappt wurden. Gestern hatte ich jedenfalls an zwei etliche Kilometer auseinanderliegenden Stellen damit wiedermal ein Problem. Einer der Wege im Wald war extrem steil und komplett ca. 30cm mit Grünzeugs bewachsen und nur deshalb als Weg (Track, nicht Path) erkennbar, weil dort keine Bäume wuchsen. Getaggt war das Ganze mit “highway=track”. An einer anderen Stelle - auch im Wald - bot sich ein sehr ähnliches Bild. Es war dort zwar nicht steil aber zusätzlich waren zwei der Wege mit mehreren, größeren, bis zu 40cm tiefen Wassergebilden - Pfützen mag man dazu nicht mehr sagen - versehen. Getaggt war das Ganze ebenfalls lediglich mit “highway=track”. Mit diesen Informationen ist ein sinnvolles Routenplanen nicht mehr möglich. Fast jedesmal, wenn ich auf einen Weg treffe, der für mich in die Kategorie “unpassierbar” fällt, ist es ein Weg dieses Mappers.

Nun zu meiner eigentlichen Frage:
Kann ich in den Stylefiles von mkgmap Filter verwenden, die mir bestimmte Objekte dieses Mappers herausfiltern? Wenn ja, wie müsste das aussehen?

Danke und Grüße

Bestimmte Daten eines Users filtern geht in mkgmap nicht.
Du könnstest evtl. Deinen Style so ändern, dass highway=track ohne surface=* und ohne tracktype=* gar nicht gerendert wird oder wenigstens mit minimaleen class und speed.

Wenn da fehlerhafte Einträge in OSM vorhanden sind, wäre es doch sinnvoller diese in OSM zu berichtigen anstatt mit mkgmap herauszufiltern, oder?

Für mich klingt es danach, dass da Wege von anderen Karten abgezeichnet werden, ohne selbst vor Ort gewesen zu sein. Da stellt sich dann auch die Frage der Quelle und der Lizenz.

Es gibt durchaus eine Berechtigung, auch solche Forstwege in “schlechtem” Zustand einzutragen. Allerdings dann auch mit den entsprechenden Zusatz-Attributen wie tracktype=grade5, smoothness=… Wobei man allerdings darauf achten muss, keine Rückegassen als Wege zu interpretieren (was nicht immer ganz einfach ist).

Das ein solche Weg mit tiefen Pfützen bedeckt ist, halte ich für kein geeignetes Argument, ihn als für Fußgänge als unpassierbar zu bezeichnen. Wenn es länger nicht geregnet hat, sieht ein solche Weg wieder ganz anders aus. Auch ein Weg, der aktuell mit 30cm hohem Grünzeug bewachsen ist, kann im Februar wieder ganz anders aussehen und für Trail-Runner und naturverbundene Wanderer gut passierbar sein.

Genau diese Eintragen ohne jegliche weitere Informationen ist das eigentliche Problem. Wären sie korrekt mit surface, tracktype, smoothness eingetragen, würde eine gute Wanderapp nicht über diese Wege routen. Beispiel: Die outdooractive.com z.B. macht bei der Wegauswahl deutliche Unterschiede, ob man als Profil z.B. “Jogging” oder “Trailrunning” ausgewählt hat. Solche Wege wie der beschriebene werden bei “Jogging” gemieten, bei “Trailrunning” bevorzugt.

Du kannst vor mkgmap die OSM-Datei entsorechend aufbereiten und filtern:
https://wiki.openstreetmap.org/wiki/DE:Osmconvert
https://wiki.openstreetmap.org/wiki/DE:Osmfilter

Sinnvoller wäre es, die fehlerhaften/unvollständigen Daten entsprechend zu berichtigen. Dann haben alle was davon und nicht nur du selber und das ist ja der eigentliche Gedanke von OSM.

Bei unklaren Wegen/Klassifizierungen hilft es auch oft zu schauen, wann der Weg erfasst wurde. Vorallem unbefestigte Wege können sich mit der Jahreszeit und dem alter verändern.

Beim Filtern haust du vermutlich auch diverse Wege raus, die du eigentlich Routen möchtest bzw. du behältst Wege drin, die zwar von dem Mapper sind, aber inzwischen von jemand anderem bearbeitet wurden. Wie GerdP schon geschrieben hat, halte ich es auch. Wege (track, path, footway,…) ohne Beschreibung setze ich gleich mit highway=road. Also grob gesagt. Da ist ein Weg, keine Ahnung was es ist, wenn es nichts besseres gibt, route da drüber, aber besser nicht.

Hm, naja - nicht alles, was nur “highway=track” enthält, ist nicht benutzbar. Nur bei diesem Mapper ist auffallend viel - aus meiner Sicht - nicht nutzbar, deshalb würde ich gern die “highway=track”-only-Daten dieses Nutzers herausfiltern.

Das ist eine berechtigte Frage, die ich mir auch schon gestellt habe. Möglicherweise hat er die zur Verfügung stehende “Saxony Topographic Map” verwendet. Aber die rechtliche Seite ist ohnehin eine andere und hilft mir nicht wirklich weiter.

@Galbinus
Ich stimme dir zu 100% zu. Es hilft mir nur leider auch nicht weiter. :slight_smile:

osmfilter - Filtern nach Meta-Daten - DAS könnte mir helfen, danke für diesen Tipp. Ich Pferd habe das Tool in meinem Script sogar schon drin… :laughing:

Ja, wie oben schonmal geschrieben - ich ergänze und korrigiere wo ich kann. Das hilft mir aber nicht, wenn ich unterwegs bin und wiedermal auf einen total mistigen oder auch unbefahrbaren Weg treffe, den ich aber mehr oder weniger aus Ortsunkenntnis nutzen muss, weil ich nicht weiß, wo ich sonst lande.

Und was das Filtern angeht - ich möchte ja nur die lediglich mit “highway=track” getaggten Objekte jenes Mappers herausfiltern. Wenn jemand anderes dran war oder auch der selbe Mapper Daten ergänzt hat, ist das ja ok, dann möchte ich die Daten nicht mehr herausfiltern. Letztlich möchte ich sowas wie:

wenn user='jener Mapper' & highway=track & surface !=* & tracktype !=* dann hau weg

Damit dürfte sich ein großer Teil der Überraschungen auf meinen Touren erledigt haben. Geht aber wohl mit mkgmap nicht.

@all
Ich danke euch für eure Rückmeldungen und Tipps!
“osmfilter” klingt gut, das werde ich mir genauer ansehen.

Ansonsten wünsche ich allen eine schöne Woche und fröhliches Mappen!

Grüße

In einem Blog-Eintrag habe ich kürzlich beschrieben, wie man Objekte herausfiltern kann, bei denen ein bestimmter User im Verlauf der Objekthistorie eine bestimmte Schlüssel/Wert-Kombination gesetzt hat. Es ist etwas aufwändig, aber man bekommt damit auch diejenigen Objekte, die danach noch von anderen Usern angefasst wurden.

Besonders skandinavische Kartenersteller drehen deswegen den default - Wert einfach um und rendern Wege ohne weiteres Attribut als die schlechtmöglichste Wegekategorie. Also einen Highway=track ohne weiteres Attribut wie ein tracktype=Grade5.

Warum die meisten Karten bei Highway=track automatisch die hohen Kategorien nehmen, ist mir immer ein Rätsel.

Danke für den Denkanstoss! Dazu werde ich wohl zunächst auch übergehen. Ich habe nämlich Probleme, mit osmfilter das so herauszufiltern, dass das Ergebnis passt.

Gruß


osmfilter32 --drop-ways=" highway=track AND @uid=0815" --ignore-dependencies ./download.osm  -o=./download_filtered.osm

schmeisst zuverlässig alle Objekte mit mindestens “highway=track” von dem User raus. In dem Ausschnitt verbleiben dann 21552 Objekte ohne Unterscheidung node/way/relation von dem User.


osmfilter32 --drop-ways="highway=track AND @uid=0815 AND tracktype!=grade1 AND !=grade2 AND !=grade3 AND !=grade4 AND !=grade5" --ignore-dependencies ./download.osm  -o=./download_filtered.osm

schmeisst nicht ein einziges Objekt von dem User raus, obwohl es Objekte mit nur “highway=track” von ihm gibt. In dem Ausschnitt verbleiben alle 23402 Objekte von dem User.

Hat einer eine Idee, wie das lösbar ist?

Grüße

Wenn es kein tracktype gibt, dann liefert jedes tracktype!=* eiin false zurück. Probier mal etwas in der Art

drop-ways=“highway=track AND @uid=0815 AND NOT tracktype=*” (oder so ähnlich)

Hm, macht irgendwie Sinn.
Aber: Laut Hilfetext gibt es kein NOT, nur AND und OR. Ich habs trotzdem mal versucht mit:


--drop-ways="highway=track AND @uid=0815 AND NOT tracktype=*"

Ich führe nach dem Filtern immer ein grep auf das Ergebnis aus und suche nach zwei way-id’s. Eine ist mit “tracktype=grade2” getaggt, die andere ohne jeglichen weiteren Tag. Das ohne tracktype ist definitiv noch drin und das mit tracktype definitiv raus. Das Beispiel oben haut scheinbar alle Objekte mit gesetztem tracktype raus, auch von anderen Benutzern, aber nicht Objekte ohne tracktype.

Grüße

Dann mache es doch so:

Entferne alle highway=track des users => datei1.osm. Behalte nur highway=track mit tracktype=* des users => datei2.osm. Vereinige datei1.osm und datei2.osm.

Ich hab einen anderen Ansatz gewählt:
Ich lösche nicht die Objekte des Users mit den vorhandenen bzw. nicht vorhandenen Tags, sondern ich behalte alle anderen:


--keep-ways="highway!=track OR ( highway=track AND @uid!=0815 ) OR ( highway=track AND ( tracktype=grade1 tracktype=grade2 tracktype=grade3 tracktype=grade4 tracktype=grade5 ) AND @uid!=0815 ) "

Das scheint zu funktionieren.

Nochmals besten Dank an alle für die Hinweise und Denkanstösse!

Grüße