Wie Wanderweg-Layer-Karte für Garmin erzeugen?

Hallo,

ich bin gerade dabei mich mit der Generierung von Garmin-Karten zu beschäftigen. Eine Karte mit dem All-In-One Kartenstyle kann ich mir mitlerweile selber erstellen und jetzt bastle ich an einen Ergänzungslayer für Wanderwege oder auch Radwege. Wenn alles klappt stelle ich mir vor, dass sowas rauskommt wie der Maxspeed-Layer die AIO-Karte, nur mit den Wanderwegen drin.

Mein derzeitiges Problem ist wie ich in den Stylefiles nur diejenigen Wege/Strassen aufnehmen kann die Teil eines (oder mehrerer) Wanderweg-Route Relationen sind? Nach meinen Verständnis müsste das im lines-Files eingetragen/ausgewählt sein. Bei Wegteilen mit einen Radweg und gesetzten rcn_ref - Tag im Weg klappt das auch grundsätzlich. Aber wie kann ich da alle Wege auswählen die Teile einer Wanderweg/Radweg Routen-Realation sind?

Markus

Hallo,
du brauchst einen relations-File. Darin dan etwas wie das: route=bicycle & ( network=rcn | rcn=yes ) { apply { set blablub_rcn=yes } }
Damit bekommen alle Objekte die einer Relation mit route=bicycle und rcn=yes oder network=rcn angehören den Tag blablub_rcn=yes.

Anschließend brauchst du im lines-File dann die entsprechende Auswertung.

Hab es jetzt mal grundsätzlich geschafft! Danke für den kleinen Tipp.

Zwischendurch war ich zwar schon fast am verzweifeln warum es nicht und nicht klappen wollte. Und bin nach gefühlt unendlicher Zeit draufgekommen, dass ich im Editor ein anderes relations-File editiert habe, als ich dann anschließend im mkgmap-Prozess verwendet habe. Die primitivsten Fehler können am lästigsten sein! :rage:

Jetzt kommt dann die eigentliche Arbeit, damit alles reinkommt was rein soll und mit etwas Glück noch gut aussehen/beschriftet werden soll.

Markus

Mitlerweile läuft die Generierung selbst geschmeidig, ich bin aber nun auf ein nächstes Problem gestoßen.

Wie soll bzw. kann man Wege auswerten die Teil von mehreren verschiedenen Route-Relationen sind?

Bisher schaffe ich es nur eingeschränkt. Um genauer zu sein schaffe ich es nur wenn der selben Weg Teil unterschiedlich kategorisierter Radweg-Relationen ist. Auch da schaffe ich es nur die verschiedenen Relationen im selben Wegnamen hintereinander aufzufädeln.

Eigentlich wünschen würde ich mir, dass der Weg im selben Layer mehrfach hinzugefügt wird. Aber soweit ich es bisher rausgefunden habe geht das prinzipiell nicht, sondern man müsste für jede Radweg-Kategorie einen eigenen Layer schaffen und auch da würden dann immer noch die Radwegrelationen “verloren gehen”, welche am selben Weg mit gleicher Relations-Kategorie eingetragen sind.

Zur besseren Anschauung:

Es gibt den Weg:

highway=cycleway

Der ist Teil von:

Route1:
name=Local-Radweg1
network=lcn

und

Route2:
name=Local-Radweg2
network=lcn

und

Route3:
name=Regional-Radweg
network=rcn

Im Lines-Stylefile kann ich da insbesondere die Route1 und Route2 nicht unterscheiden. Es wird dann einfach eine der beiden Relationen zufällig genommen und in die Karte eingetragen.

Oder gibt es da doch noch Möglichkeiten in den Stylefile-Regeln? Eventuell mit “continue” oder “continue with_actions” - Regeln? Diese hab ich bisher noch nicht so recht verstanden wie sie funktionieren sollten!

Für jeden Tipp dankbar.

Markus

Ich denke mal, da muss man zwei Faelle unterscheiden:

  1. Fall:

Du willst eine generische Karte erzeugen, deren Erezugung unabhaengig von der betrachteten Region funktioniert. Oder einfache ausgedrueckt: Mit den selben Style-Dateien soll ein gleichmaessig brauchbares Ergebnis bei rauskommen, egal ob man in Bayern oder an der Kueste ist.

So wie ich es sehe, kann man in diesem Fal wirklich nicht mehr erreichen, als dass die Wege je nach Kategorie markiert werden (z.B. rot wenn sie teil eines rcn sind und blau wenn sie zu einem lcn gehoeren), und das man im Namen die verschiednen Relationsnamen hintereinander anhaengt. In deinem Beispiel koennte man dann fuer dne Weg eien rote Markeirung mit dem Namen Route3 und eine blaue Markierung mit den Namen Route1, Route2 erzeugen.

Ich denke mehr kann man da nicht machen, Fuer jede Route einen eigenen Linienstil ist nicht drin, man weiss ja auch gar nicht, wieviele verschiedene Routen innerhalb des Kartenebereiches ueberhaupt liegen.

  1. Fall:

Du willst eine Karte erzeugen, die genau auf deinen speziellen Fall hin optimiert ist, die also genau in deiner Region mit den bekannten Daten ein optimales Ergebnis liefert, ansosnten aber nicht zu gebrauchen ist.

Wenn du weisst, wie die Routen in deinem Gebiet heissen, oder vielleicht noch besser: welche Relation (mit welcher ID) bei dir in der Karte auftauchen sollen, dann kannst du natuerlich dafuer sorgen, dass jede Route als eigener Linientyp in deinem Kartenlayer gezeichnet wird.

Damit fuer ein und den selben Weg mehrer (Routen-)Linien gezeichnet werden, musst in deiner lines-Datei mit dem continue oder besser dem continue with_actions arbeiten.

Im Prinzip funktionieren diese Kommandos ganz einfach:

Du hast ein Objekt, das mit tag_a=value_a und tag_b=value_b markiert ist.

In deiner Style-Datei hast du nun die folgenden Zeilen:
tag_a=value_a {set tag_c=value_c} [0x01 resolution 20]
tag_b=value_b [0x02 resolution 20]
tag_c=value_c [0x03 resolution 20]

mkgmap geht nun die Style Datei von oben nach unten durch und sucht nach passenden Konvertierungsregeln. In diesem Fall passt die erste Regel, mkgmap erzeugt in der Garminkarte also ein Objekt vom typ 0x01 und ist fertig mit der Konvertierung fuer dieses Objekt.

Wenn stattdessen die Regeln wie folgt aussehen:
tag_a=value_a {set tag_c=value_c} [0x01 resolution 20 continue]
tag_b=value_b [0x02 resolution 20 continue]
tag_c=value_c [0x03 resolution 20 continue]

dann mkgmap geht nun wieder die Style Datei von oben nach unten durch und sucht nach passenden Konvertierungsregeln. In diesem Fall passt wieder die erste Regel, mkgmap erzeugt in der Garminkarte also ein Objekt vom Typ 0x01. Da in dieser Regel aber ein continue Kommando enthalten ist, bricht mkgmap die Konvertierung fuer dieses Objekt nun nicht ab sondern sucht nach weiteren passenden Regel. Als naechstes passt die zweite Regel, mkgmap erzeugt also mit identischen Koordinaten auch ein Objekt vom Typ 0x02. Und weil wieder ein continue Kommando da ist, sucht mkgmap auch ncoh nach weiteren passenden Regeln.
In diesem Beispiel passt aber keine weitere Regel. Der Grund dafuer ist, dass der Action-Teil in den geschweiften Klammern in der ersten Regel nur auf die Konvertierung zum Typ 0x01 angewendet worden ist.

Wenn stattdessen die Regeln wie folgt aussehen:
tag_a=value_a {set tag_c=value_c} [0x01 resolution 20 continue with_actions]
tag_b=value_b [0x02 resolution 20 continue with_actions]
tag_c=value_c [0x03 resolution 20 continue with_actions]

dann werden fuer das eine Objekt nun drei Objekte in der Garmin Karte erzeugt (0x01, 0x02 und 0x03). Der Anhang with_actions beim continue-Kommando bedeutet, dass mkgmap den Action-Teil in eienr Regel nicht nur auf die aktuelle sondern auch auf alle nachfolgenden Konvertierungen anwendet.

Meiner Meinung anch muesste das with_actions Verhalten eigentlich der Normalfall sein, aus historischen Gruenden ist es aber so, dass man es extra angeben muss, wenn die Aktionen ueber eine Regel hinaus Gültigkeit haben sollen.

Kleine Warnung am Rande noch: Wenn man mit dem continue with_actions arbeitet, dann koenenn manche action-Regeln auch mehrfach fuer ein und das selbe Objekt ausgefuehrt werden, wenn sie nicht fest mit einer Konvertierungsregel verbunden sind.
So hat man in der lines-Datei haeufig eine Regel, die den ref-Wert an den name-Wert anhaengt, unabhaengig vom eigentlichen Strassentyp. Wenn nun mehrere Konvertierungsregeln zur Anwendung kommen, dann wird mit with_actions bei jeder Konvertierung erneut der ref-Wert hinten angehaengt.
Verhindern kann man das durch eine kleine Hilfsvariable, in der man sich merkt, ob eine Regel bereits angewendet worden ist, z.B.
highway=* & mkgmap_rule_not_applied!=yes {set mkgmap_rule_not_applied=yes; … }

Gruss
Torsten

Ja das wäre eigentlich der Fall der mich (derzeit) interessieren würde. Von den Wegmarkierungen her würde mir das eigentlich auch prinzipiell reichen. Mit den Route-Namen bin ich da noch eher unzufrieden. Um den von dir für diesen Fall beschrieben Stand hinzubekommen sehe ich noch zwei Probleme.

  1. Prinzipiell die blaue Markierung mit den namen Route1 und Route2 zu versehen. Wenn ich da im Lines-Style nach der im relations-Style erzeigten my_lcn_name - Variable abfrage bekomme ich eben nur einen der beiden Routennamen geliefert.

  2. Für den Weg neben der roten Markierung auch noch eine zweite blaue zu erzeugen schaffe ich bisher auch noch nicht. Dafür kann ich mir aber nach deinem Posting jetzt die Lösung über “continue” bzw. “continue with_actions” vorstellen. Danke für die super Erklärung dieser Regeln. Mit denen werde ich aber noch eifrig herumexperimentieren müssen um sie für meinen Fall gänzlich zu durchblicken. Auf eine andere mögliche Lösung bin ich aber auch noch gekommen. Ich könnte für den Fall auch einen neuen kombinierten Linientype für den Fall von lcn und rcn Radwegen am selben Weg vorstellen. So in der art, wenn lcn und rcn vorhanden dann nehme ich nicht den roten oder blauen Linientyp, sondern einen rot-blau strichlierten.

Das zweite Problem scheint mir lösbar, das erste eher nicht. Es sei denn ich versuch mich mit mkgmap-Sourcecode rumzuschlagen, denn beim Durchsuchen/Nachlesen auf der mkgmap-dev Mailinglisten scheint jemand das Problem mit Patch grundsätzlich anders gelöst zu haben. In dem er Wege in der Karte schon aus dem relations-file direkt generiert. (http://www.mkgmap.org.uk/pipermail/mkgmap-dev/2009q2/002288.html)

Markus

Ich muss gestehen, dass ich das selber auch noch nicht so gebaut habe. Ich meine aber, entsprechendes auf der MTB-Map gesehen zu haben.

Das musste man so machen, bevor es das continue-Kommando gab. Bei den verschiedenen Kombinationsmoeglichkeiten steigt der Aufwand dann aber exponentiell. D.h. bei vier verschiedenen Kategorien hast du dann nicht vier verschiedene Linientypen sondern zwei hoch vier verschiedene Linientypen. In diesem speziellen Fall passt das also noch, aber generell kommt man mit der Technik nicht sehr weit.

Gruss
Torsten

Auf der mkgmap-Liste habe ich gerade die folgende Information bekommen:

I implemented the $(variable_name) syntax some time ago, to get bus
route relations translated properly. An excerpt from --style=routes:

[relations file]
type=route & … {
apply { set mkgmap:route=‘$(mkgmap:route),${ref}’ | ‘${ref}’ }
}
[lines file]
highway=* & mkgmap:route=* { name ‘${mkgmap:route}’ } [0x1d resolution 16]

Note that in the apply rule, the $(mkgmap:route) is referring to an
attribute of the relation member, and the ${ref} is referring to an
attribute of the relation.

Probleme macht das allerdings noch, wenn mit verschiedenen Rollen (forward, backward) bei den Mitgliedern gearbeitet wird. Das kann dann dazu führen, dass der ref Text doppelt in der Karte erscheint.

Gruss
Torsten

Mittlerweile habe ich recht ausführlich mit den verschiedenen Kartengenerierungs-Möglichkeiten rumgespielt.

Die Sache mit der Routing-Variable Syntax klappt einwandfrei. (= $(variable_name) mit runden Klammern statt ${variable_name} mit geschwungenen.)
Damit lässt sich die Beschriftung im routes-file pro linie und relation generieren. Und nachher im lines-file auch zusammensetzen und zuordnen.

Die Sache mit dem “continue” um mehrere verschiedene Wanderweg-Relationstypen auf einen Weg darzustellen hat grundsätzlich auch geklappt. Nur bin ich damit doch nicht zufrieden. Zum einen hätte ich gedacht, dass bei mir am Garmin Dakota 20 damit die Wegeauswahl so dargestellt würde wie wenn sie von verschiedenen Layern kommen würden, bzw. so wie bei einem Weg durch einen Wald beim Markieren des Weges die Auswahl zwischen Wald und Weg kommt. Weiters hab ich bei manchen Wegen Probleme gehabt in der textuellen Darstellung der übereinanderliegenden Wege. Bei vielen hat es geklappt, aber bei manchen Wegkombinationen (für mich nicht nachvollziehbar bei welchen und warum) wurden mir eine Weg-Kategorie nicht angezeigt. Ausserdem ist es nicht so einfach Linientypen zu entwerfen die übereinandergelegt auch noch irgendwie vernünftig aussehen.

Darum stelle ich jetzt im Linientyp nur immer den höchstrangingen Wanderweg dar, aber in der Benennung führe ich auch die lokalen Wege an.

Wer will kann ja mal das vorläufige Resultat selber ausprobieren. Unter http://140.78.94.22/~hetzi/hiking_germany.img ist mal der Layer der Wanderweg und Radwegrelationen für die deutsche Karte gerendert (ca. 19MB, erstellt am 15.9.2010)

Markus

PS: Ein einfaches Generierungsscript kann unter http://140.78.94.22/~hetzi/hiking-map.tar.gz geladen werden. Das Skript lädt das deutsche .osm File vom geofabrik Server runter und ebenso splitter und mkgmap. Bei Versionsänderungen sollte das skript einfach darauf abgeändert werden. Ebenso, wenn für andere Kartenausschnitte ein Wanderweg- und Radwegrouten Layer generiert werden soll.