[Osmand] Relation zu Wegen konvertieren

Hallo,

Osmand zeigt leider nicht die Relationen an, mit denen die Fahrradnetzwerke in der Opencyclemap angezeigt werden.

Ich habe mich mit dem Thema befasst, weil ich das ändern wollte. Da das ganze auf Englisch stattfand, bin ich meiner Erkenntnisse nicht sicher. Deswegen wäre es nett wenn die mir jemand bestätigen würde.

Osmand kann grundsätzlich keine Relationen anzeigen, aber ways. Stimmt das?

Meine Idee ist deswegen, dass ich die entsprechende Relationen in Wege umforme. Dieses entstandene Datei in eine Osmandkarte umwandleund dann durch ein render.xml diese Wege farblich hervorhebe. Wäre dieser Weg grundsätzlich gangbar?

Nachdem ich mir OSM-Daten angesehen habe, bräuchte ich ein Tool, welches Relationen in ways umwandelt. Gibt es so etwas?

Mein erster Einwand (soweit ich es jetzt richtig verstehe - ich will dich aber von nichts abhalten…):

Eine Relation ist ein Container, welcher Wege beinhaltet. Wandelt man diesen Container nun um in einen Weg, dann werden die Wege doppelt angelegt - einmal als Weg aus Teilstücken (“Original-Wege”) und dann als ein Gesamtweg (“Kopie aus Relation”) - ich glaube das gibt Probleme - zu mal das Original aus Teilstücken unterschiedliche Taggings aufweisen kann…

Das heißt vielleicht, ich muss es schaffen, dass die entstehenden Wege entsprechend getagt werden. Die Wege ohne entsprechende Tags werden gelöscht. Es würde daraus eine Art Overlaykarte, was in Osmand möglich ist entstehen.

Wenn nur eine farbige Linie (als way) in einem separatem Overlay oben drüber gelegt werden solll, braucht man doch keine Tags dafür?
Die original Wege sind doch sicherlich weiterhin erhalten (über die dann geroutet werden kann)? Oder hab ich das falsch verstanden?

Jein. :slight_smile:
OsmAnd kann zwar direkt keine Relationen anzeigen, aber es kann Relationen in Wege umwandeln bzw. die Tags der Relation auf die entsprechende Wege übertragen.

Ja, allerdings sollte das OsmAnd schon alles können.

Siehe zur konkreten Implementierung hier:
z.B. isRelationalTagValuePropogated()
https://github.com/osmandapp/OsmAnd-tools/blob/master/OsmAndMapCreator/src/net/osmand/data/preparation/IndexVectorMapCreator.java
https://github.com/osmandapp/OsmAnd-core/blob/master/OsmAnd-java/src/net/osmand/osm/MapRenderingTypes.java

Und hier nach “relation” suchen:
https://github.com/osmandapp/OsmAnd-core/blob/master/OsmAnd-java/src/net/osmand/osm/rendering_types.xml

Du müsstest also deine rendering_types.xml entsprechend anpassen, denn dort steht drin, welche Dinge (und wie) in die OBF-Datei aufgenommen werden und die OBF-Datei dann mit dieser geänderten XML-Datei erstellen lassen.
In der entsprechenden (evtl. eigenen) *.render.xml trägst du dann ein, wie die entsprechenden Wege mit den entsprechenden Tags auf der Karte dargestellt werden sollen.
Diese *.render.xml muss in dem Unterordner “rendering” des “osmand”-Ordners liegen und in OsmAnd unter “Kartendarstellung” ausgewählt werden.
Die *.render.xml kann man auch direkt im OsmAnd Map Creator testen, wenn man eine native OsmAnd-Lib besitzt und bei “Offline-Rendering” einen Haken setzt.
Wo man diese OsmAnd-Lib zzt. herunterladen kann, ist mir allerdings nicht bekannt, der Quellcode ist aber da und man kann sich diese erstellen.

Evtl. sind auch target_tag und target_value (rendering_types.xml) hilfreich, falss diese mit Relationen funktionieren.

Gruß,
Mondschein

Vielen Dank für die Erklärung.

Also immer wenn Javadateien auftauchen, bin ich reichlich hilflos. Kann es sein, dass Du nach

einen Link vergessen hast, in welchem steht, wie man diese Dateien wo implementiert.

Verstehe ich jetzt nicht.
Das ist der Teil des OsmAnd-Quellcodes, welcher für die Übertragung der Tags der Relation auf die entsprechende Wege zuständig ist.
Wen genau interessiert, wie OsmAnd das macht, der kann sich das ggfs. ansehen.

Gruß,
Mondschein

Ich habe dich so verstanden, als müsse ich die von dir verlinkten Java-Dateien irgendwie in Betrieb nehmen. Wie das gehen soll ist mir unklar.

Dies lesend, verstehe ich dich so, dass ich nur die XML-Dateien verändern muss. Die Javadateien sind nur dazu da, um zu sehen, was Osmand da macht.

Beim nochmaligen Lesen möchte ich vorsichtshalber zusammenfassen, was ich glaube tun zu müssen.

  1. rendering_types.xml so ändern

Weil mir der Javacode zu hoch ist, ich kann nur ein wenig Basic…

Die anderen Tags die im Relationscontainer stehen, wie zum Beispiel k=network v=lcn oder k=“ref” v=“GG” stehen dann beim Rendering auch zur Verfügung?

  1. Ich muss rendering_types.xml, in einen Ordner des Osmandmapcreators kopieren. Dann OSM-Dateien in obf umwandeln.

  2. *render.xml umschreiben und in den Renderorder von Osmand kopieren. Dannn erscheint im Auswahlmenü für die Kartendarstellung der Name des XML-Files, dass ich dann anwähle.

Du merkst, dass ich ziemlich ahnungslos bin. Ich habe mich da ran getraut, weil ich es bei Maperetive in 30 Minuten geschafft hatte.

Genau.

Die musst du extra angeben.

Den genauen Pfad muss ich nachsehen.

Genau.

Das ist leider noch nicht so schön dokumentiert.
Ich sehe mir das demnächst nochmal genau an.

Gruß,
Mondschein

Also ich habe jetzt folgendes ausprobiert.

In rendering_types.xml

<category name="routes">
<type tag="route" value="ferry" minzoom="8" relation="true"/>
<type tag="route" value="hiking" minzoom="8" relation="true"/>
<tag tag="route" value="bicycle" minzoom="8" relation="true"/>
</category>

reingeschrieben.

rendering_types.xml dann in sämtliche Verzeichnisse des OsmandMapcreator kopiert.

Dann eine OSM-Datei nach obf konvertiert.

Weil “ferry” in default.render.xml schon ausgearbeitet ist, habe ich die entsprechenden Zeilen gedoppelt und dann das Wort ferry durch bicycle ersetzt. Die Farbwerte auf ein gut sichtbares giftgrün gesetzt.

Dann auf das Handy geschoben.

Es ist an den entscheidenden Stellen nichts giftgrünes zu sehen.

Kannst du eventuell einen Permalink zu dem von dir betrachteten Radweg verlinken?

Es sind Radwege.

http://www.openstreetmap.org/?lat=50.029&lon=8.6572&zoom=12&layers=C

Es geht um die blauen und roten Linien. Die sollen in Osmand sichtbar werden.

Im OSM Datensatz sind diese mit
markiert. Bei dem Sternchen steht i,n,r oder l.

achso - jetzt seh ich es erst: Wenn du wirklich in der rendering_types.xml die Werte von oben stehen hast, dann hättest du vielleicht nicht das “type” auf “tag” ändern sollen…

Und achte auch darauf, dass er nicht mit der “default.render.xml” arbeitet, sondern mit der “rendering_types.xml”.

Das habe ich glücklicherweise nur hier falsch geschrieben.

OsmandMapcreator auf dem PC braucht “rendering_types.xml”, um die Daten vorzubereiten.
Osmand auf dem Telephon braucht “default.render.xml”.

Oder muss ich im Interface von OsmandMapCreator irgendwo “rendering_types.xml” angeben?

wahrscheinlich ja.

ich mache die Konvertierung im Batch ohne Gui. Da muß ich im batch.xml den Parameter renderingTypesFile setzen.


<process_attributes mapZooms="" 
         renderingTypesFile="/opt/install/OsmAndMapCreator/rendering_types.xml" 
         zoomWaySmoothness="" 
         osmDbDialect="sqlite" 
         mapDbDialect="sqlite"/>

sollte in der Gui auch irgendwie gehen.

Gruss
walter

Wenn du den Haken bei “Oflline Rendering” setzt, geht ein Fenster auf und da kannst du die xml definieren.

Bei dem “Offline Rendering” frage ich mich schon lange, was das soll?

Öffne ich es, erhalte ich .

Schließe ich, erhalte ich folgende Fehlermeldung:

Ich habe mich schon damit rumgespielt, aber die Fehlermeldung bleibt.

Und unter “Einstellungen → Rendering types (xml config to extract osm data) file path” den vollen Pfad zu einer dieser Dateien angegeben?

Ok.

Dann könntest du auch direkt danach filtern:

<type tag="network" value="lcn" minzoom="8" relation="true"/>
<type tag="network" value="rcn" minzoom="8" relation="true"/>
...

Nach route=bicycle zu filtern, wie oben, ist aber auch möglich.

Wie genau?
“order” auch gesetzt, sonst liegt der Radweg evtl. unter anderen Objekten und ist nicht sichtbar?

z.B.

<filter tag="route" value="bicycle" minzoom="8" color="#00FF00" strokeWidth="5" pathEffect="5_5"/>

oder

<filter tag="network" value="lcn" minzoom="8" color="#00FF00" strokeWidth="5" pathEffect="5_5"/>

und

<order>
...
	<group objectType="2" area="false" point="false">
...
		<filter tag="route" value="bicycle" order="38"/>
		oder auch
		<filter tag="network" value="lcn" order="38"/>
...
	</group>
</order>

Das sind zwei verschiedene Dinge.
In der “*.render.xml” steht, wie die Objekte, welche sich in der OBF-Datei befinden, dargestellt werden sollen.
In der “rendering_types.xml” steht, welche Objekte (und wie) in die OBF-Datei aufgenommen werden sollen.

Genau, bzw. “*.render.xml”.

Ja, siehe oben (“Einstellungen → Rendering types (xml config to extract osm data) file path”).

Das benötigst du nur, wenn du die Karte direkt im OsmAnd Map Creator gerendert bekommen möchtest.
Das ist z.B. praktisch, wenn man die eigene “*.render.xml” testen und ändern möchte, denn dann muss man die Dateien nicht immer erst auf das Smartphone kopieren.

Wie schon angemerkt, benötigt man hierfür eine native OsmAnd-Lib (siehe oben).
Diese ist aber nicht nötig, falls du die Dateien nur auf deinem Smartphone testen möchtest.
Einzustellen wäre der Pfad zur nativen Lib unter “Einstellungen → Native lib file (osmand.lib)”, der Pfad zur “*.render.xml” unter “Einstellungen → Rendering style file (path)”.
Aber das ist wirklich nur für das Offline-Rendering auf dem PC notwendig.

Übrigens gibt es in OsmAnd schon einen default-Renderer, du solltest deinen Renderer also evtl. umbenennen, z.B. in mein.renderer.xml (evtl. auch in der Datei "name=“mein”).
Denn ich weiß jetzt gerade nicht, was passiert bzw. welchen default-Renderer OsmAnd verwendet, wenn es zwei davon gibt.

Gruß,
Mondschein

Vielen Dank für deine Mühe. Es hat daran gelegen, dass ich das EInstellungsmenü nicht in Betracht gezogen habe. Dann habe ich die ersten Erfolge verzeichnen können.

So sieht es momentan aus.

So sieht es in der OCM aus:

<filter tag="network" value="lcn" order="35"/>
      <filter tag="network" value="rcn" order="35"/>
      <filter tag="network" value="ncn" order="35"/>
      <filter tag="network" value="icn" order="35"/>

Das ich den türkisen Streifen durch Erhöhung der Zahlen bei “order=” mehr in den Vordergrund bringen kann, habe ich herausgefunden. Aber diese Färbungen der Radrouten sind momentan noch 100% deckend. Gibt es eine Möglichkeit diese Linien transparent zu gestalten, sodass die darunterliegende Linie durchscheinen können. Ähnlich wie bei bei meinen Screenshot der OCM.

Ja, durch das Hinzufügen von zwei Stellen am Anfang wird die Transparenz angegeben, also z.B. #400000FF.
#FF0000FF hätte dann keine Transparenz, #000000FF maximale Transparenz.

Gibt übrigens auch noch andere Effekte, z.B. mit cap=“ROUND” können Linien abgerundet werden.

Gruß,
Mondschein