x

Routingfähige Karte mit OSM-Composer erstellen


Geschrieben von Walter Schlögl (Gast) am 28. Dezember 2009 18:15:07: [flux]

Hier die versprochene Anleitung zur Erstellung einer routingfähigen Karte mit dem OSM-Composer (aktuell in V 0.8).

1.) Erstellung eines styles für routingfähige Wege.

Kopieren des Files \data\mapstyle\lines nach lines_routing
Hier muß nun zu jedem relevanten Weg die Info der Road-Class und Road-Speed angegeben werden.

road_class=4 ... motorway
road_class=3 ... trunk, primary
road_class=2 ... secondary, tertiary
road_class=1 ... roundabout
road_class=0 ... residential, trails, ...

road_speed=7 ... > 110 km/h
road_speed=6 ... 90..110
road_speed=5 ... 80..90
road_speed=4 ... 60..80
road_speed=3 ... 40..60
road_speed=2 ... 20..40
road_speed=1 ... 05..20
road_speed=0 ... < 5 km/h

http://wiki.openstreetmap.org/wiki/Mkgm … road_class

Beispiel:
vorher: highway=motorway [0x01 resolution 14]
nachher: highway=motorway [0x01 road_class=4 road_speed=7 resolution 14]

Wer möchte, kann die road_speed nicht nur fix, sondern variabel vergeben, je nach getaggter maxspeed.
Im Composer werden solche Unterscheidungen mit Ersetzungen realisiert, im File lines_routing können wir es so angeben.

highway=residential␣&␣maxspeed>60␣&␣maxspeed<81␣[0x07␣road_class=0␣road_speed=4␣resolution␣22]
highway=residential␣&␣maxspeed>40␣&␣maxspeed<61␣[0x07␣road_class=0␣road_speed=3␣resolution␣23]
highway=residential␣&␣maxspeed>20␣&␣maxspeed<41␣[0x07␣road_class=0␣road_speed=2␣resolution␣23]
highway=residential␣&␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣maxspeed<21␣[0x07␣road_class=0␣road_speed=1␣resolution␣24]
highway=residential␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣[0x07␣road_class=0␣road_speed=3␣resolution␣23]

Zu beachten ist, dass nicht alle Wege routingfähig sind.
Routingfähige Wege: 0x01 - 0x13, 0x16 und 0x1a für Fähren (bedingt auch 0x1b, angeblich mit Side-Effekten)

Die Composer-Vorlage verwendet 0x26 für Fußwege, 0x19 für Radwege, 0x1b für Treppen.
Diese IDs tauscht man daher am besten mit den Overlays wie z.B. Damm und Einschnitt.

Damit Autobahnen sicher nicht für Radfahrer- oder Fußgänger-Routing in Frage kommen, kann man zur Sicherheit Tags hinzufügen.
Das geht wieder per Composer-Ersetzung oder auch im Style-File "lines_routing".

highway=motorway␣{add␣oneway␣=␣yes;␣add␣bicycle␣=␣no;␣add␣foot␣=␣no}

Wir haben jetzt zwei Style-Files, lines wird vom Composer erzeugt und lines_routing ist in unserer Verwaltung.
Jede neue Renderregel für Wege muss daher manuell im lines_routing nachgezogen werden.
Sobald eine neue Composer-Version die Angabe von road_class und road_speed in den Renderregeln erlaubt, fällt diese Doppelpflege natürlich weg.

2.) Erstellung eines Aufruf-Scripts.

Der Composer bietet die Möglichkeit, nach der Generierung noch ein Abschlußskript aufzurufen (siehe Job/Parameter http://wiki.openstreetmap.org/wiki/DE:O … #Parameter)
Wir legen daher am besten ein Verzeichnis \skript an und erstellen dort ein Batch-File make_routing.bat

Zuerst tauschen wir die beiden Style-Files (wir befinden uns bei Aufruf des Scripts im Ordner \data)

cd␣\mapstyle
rename␣lines␣␣␣␣␣␣␣␣␣␣lines_non_routing
rename␣lines_routing␣␣lines
cd␣..

Jetzt kommt der Aufruf von mkgmap. Am besten kopieren wir diesen Aufruf aus \data\commands.log und ergänzen unsere zusätzlichen Parameter (fett dargestellt).

java -Xmx1100M -jar \Tools\mkgmap.jar --tdbfile --preserve-element-order -c osmc_options --remove-short-arcs --route xxx_garmin.osm --gmapsupp xxx.TYP

java␣-Xmx1100M␣-jar␣\Tools\mkgmap.jar␣--tdbfile␣--preserve-element-order␣-c␣osmc_options␣--remove-short-arcs␣--route␣xxx_garmin.osm␣--gmapsupp␣xxx.TYP

--route aktiviert die Routing-Funktionen
--remove-short-arcs wird benötigt, sonst generiert mkgmap nur Fehler in Verbindung mit route
--gmapsupp bewirkt, dass mkgmap gleich das Garmin-File erstellt. Das Typ-File muss dazu angegeben werden.
(Im Gegensatz zu sendmap bleibt hier der Name des Plans erhalten und ist im Gerät dann besser auswählbar.)
Statt xxx muss natürlich der richtige Dateiname wie in commands.log angegeben werden!
Statt relativen Pfaden wie in diesem Beispiel sollten am besten absolute Pfade verwendet werden.

nicht vergessen, die beiden Style-Files wieder auszutauschen.

rename␣\mapstyle\lines␣␣␣␣␣␣␣␣␣␣␣␣␣␣lines_routing
rename␣\mapstyle\lines_non_routing␣␣lines

Fertig ist die routingfähige OSM-Karte, erstellt mit dem OSM-Composer und mkgmap.
Ich hoffe auf zahlreiche Rückmeldungen und darauf, dass uns Nop die beiden benötigten Parameter direkt im Composer implementiert.

Walter


Antworten: