Darstellung von 'highway=pedestrian & area=yes' mit mkgmap

Hi,

Frage an die Spezialisten:

Mich stört, daß in meiner Karte mit dem im Subject genannten Tagging nur der Weg als Polygon gezeichnet wird und die Fläche dazwischen leer bleibt.

Habe dann auf mehreren Seiten dieses Tagging gefunden:

Im style lines: highway=pedestrian & area!=yes [0x0d level 2]
Im style polygons: highway=pedestrian & area=yes [0x13 level 2]

Leider führt es nicht zum gewünschten Ergebnis:
Fläche wird nicht gefüllt und der Weg selbst wird mit dem Typ 0x03 und nicht mit 0x0d gezeichnet.

Hat jemand einen Tip oder gar eine Lösung?

Gruß
Josef

Da es bei anderen Leuten genau auf diese Weise funktioniert, solltest du nochmal genau deine style-Dateien und deinen mkgmap Aufruf pruefen. Vielleicht irgendwo ein Tippfehler? Oder die fragliche Kachel wurde aufgrund eines anderen Problems vielleicht gar nicht neu gebaut (passiert mir immer mal wieder gerne)?

Gruss
Torsten

Hmmm, in meinem Style hab ich da noch ein continue stehen, aber vllt wird das nicht mehr benötigt.

continue wirkt sich AFAIK nur innerhalb einer style-Datei aus, also nur innerhalb von lines, wenn man es in lines rein schreibt.

Mit continue kenne ich mich nicht aus. Habe meine Ziele bisher auch ohne erreicht.

Fehler gefunden.

Es war der Eintrag ‘highway=’ in lines. Nach ändern in 'highway= & area!=yes’ werden die Flächen angezeigt.

Bin darüber gestolpert, weil ich für zwei highways den gleichen Typ benutze.

Ich glaube ich habe das benötigt, damit er weiterhin über den Platz (bzw. den Rand des Platzes) routet.

Wo gibt es denn erschöpfende Infos über continue. Was ich bisher so gefunden habe, befriedigt nicht.

Gruß
Josef

Das mit den Infos bzw. der Dokumentation ist bei offenen Softwareprojekten immer schwierig. (Und was dich so befriedigt ist allein deine Sache.)

Was das continue-Kommando angeht:

Das Kommando wird dazu benutzt, um aus einem OSM-Objekt mehrere Objekte in der Garminkarte zu erzeugen. mkgmap geht fuer jedes OSM-Objekt das betreffende style-File von vorne nach hinten durch, bis es die erste, passende Ersetzungsregel findet. Sobald eine solche Regel gefunden ist, wird das entsprechende Kartenelement erzeugt und normalerweise macht mkgmap dann weiter mit dem naechsten OSM-Objekt. Wenn diese Regel aber ein continue-Kommando enthaelt, so macht mkgmap mit diesem Objekt weiter und sucht, ob eine weitere Regel passt.

Von dem continue-Kommando gibt es nun noch zwei Varianten: das einfache continue und ein continue wih_actions. Beim einfachen continue werden die Action-Regeln der actuellen ersetzung nur auf das aktuell erzeugte Kartenelement angewand, d.h. sie gelten nicht fuer die nachfolgenden Ersetzungen. beim continue with_actions werden die Action-Regeln grundsaetzlich ausgefuehrt, so kann also das betreffende Element fuer die nachfolgenden Regelanwendungen veraendert werden.

Ein kleines Beispiel:

highway=road {set highway=done} [0x01 continue]
highway=done [0x02]

Das fuehrt nur zu einer Linie in der Garminkarte, da das hihway=done nur fuer die Ersetzung in der oberen Zeile angewand wird. (In diesem Beispiel ist es also nicht sonderlich sinnvoll, aber man kann in den Action-Regeln ja auch durchaus Werte setzen, die sich in der Garmin-Karte niederschlagen, z.B. oneway=yes.)

highway=road {set highway=done} [0x01 continue with_actions]
highway=done [0x02]

Das fuehrt nun zu zwei uebereinanderliegenden Linien in der Garminkarte, da die Action-Regel der oberen Zeile ausgefuehrt wird, ehe die zweite Regel-Zeile zur Anwendung kommt.

Meistens will man ein continue with_actions haben, so kann man sich damit z.B. Hilfsvariablen setzen, um die weitere Generierung von Elementen zu steuern:
shop=shoe {set shop=done} [0x01 continue with_actions]
shop!=done [0x02 continue with_actions]

Dieses Beispiel wuerde fuer alle Schuhgeschaefte einmal das Symbol 0x01 in der Garminkarte erzeugen, kein Symbol 0x02 (das stattdessen fuer alle anderen Geschaefte erzeugt wird), sowie alle weiteren Symbole, die zu diesem Objekt gehoeren.

Soweit grundsaetzlich zum continue. Meines Wissens nach wirkt das continue auch von Linien zu Polygonen (oder ist die Abarbeitungsreihenfolge von mkgmap umgekehrt?), auf alle Faelle kann man fuer ein OSM-Objekt sowohl ein Polygon als auch gleichzeitig eine Linie in der Garmin-Karte bekommen.

Gruss
Torsten

Ganz stimmt das aber auch nicht. mkgmap mach solange weiter, bis es eine passende Regel mit [] gefunden hat. Davor kann man unzählige Ersetzungen machen.

Bsp:
highway=* { set oneway=no }
highway=path [0x01]

Damit kann man sich im Prinzip die with_actions ersparen. Ist letztlich aber Geschmackssache, was man übersichtlicher findet.

Danke für die Erläuterung.
Habe mal damit angefangen und meine Overlays für straßenbegleitende Radwege und Einbahnstraßen ersetzt, wobei ich dabei vom Ergebnis her keinen Unterschied zwischen continue und continue with_actions festgestellt habe.

Gruß
Josef

Das ist das selbe, was ich auch geschrieben hatte, nur anders formuliert: Nur Regeln mit sehe ich als Ersetzungsregeln an, der Teil in geschweiften Klammern wird bei mkgmap allgemein als Action-Teil bezeichnet.

Reine Action-Regeln (also ohne Ersetzungsanweisung) werden fuer jeden OSM->Garmin-Ersetzung erneut ausgefuehrt, dass kann im Zusammenspiel mit continue with_actions durchaus zu unerwarteten Effekten fuehren.

Die with_actions Variante braucht man zwingend, wenn man sich irgendwie merken will, dass eine bestimmte OSM->Garmin-Ersetzung bereits durchgefuehrt worden ist, siehe mein Beispiel mit den Schuhlaeden.

Gruss
Torsten