Skip to main content

Karten-Rendering-Stil - .render.xml

Wenn Sie den Standard-Rendering-Stil ändern möchten, müssen Sie sich die Definition auf GitHub ansehen. Unter diesem Link finden Sie alle Arten von Stilen. Wenn Sie also Ihren eigenen Stil erstellen möchten, können Sie das einfachste Beispiel finden.

Wenn Sie sich entscheiden, Ihren benutzerdefinierten Rendering-Stil zu erstellen, müssen Sie möglicherweise Ihre eigenen Karten erstellen, um die Anzeige benutzerdefinierter Funktionen hinzuzufügen.

Abschnitte des Kartenstils

Die Datei des Kartenstils besteht aus mehreren Abschnitten.

AbschnittBeschreibung
HeaderBesteht aus name (Stilname), defaultColor (Standardkartenfarbe, kann durch das Attribut defaultColor überschrieben werden) und depends (erbt alle Eigenschaften vom übergeordneten Stil).
ParameterDefiniert als <renderingProperty> hat attr, das im Stil als Parametername verwendet wird, und name, description werden dem Benutzer angezeigt.
Attribute und KonstantenDefiniert als <renderingAttribute> und als <renderingConstant> ermöglicht die Wiederverwendung derselben Blöcke von Rendering-Stilen für verschiedene Kartenobjekte
Order-AbschnittDefiniert als Block <order>. Jedes Kartenobjekt wird im Order-Abschnitt gesucht, um zu ermitteln, ob es als Punkt, Linie oder Polygon (objectType) gerendert wird und in welcher order es angezeigt werden soll. Suchparameter (Eingabe): tag, value, zoom, point (wahr oder falsch), area (osm-Typ), cycle (Start- und Endpunkt sind gleich). Suchergebnis (Ausgabe): objectType (Punkt = 1, Linie = 2, Polygon = 3), order (0-255). Die Reihenfolge des Renderings ist definiert als: Polygone, Linienschatten, Linien, Punkte. Wenn die order für Polygone gleich ist, werden die Polygone vom größten Polygon zum kleinsten angezeigt. Hinweis: Polygone sollten sich nicht teilweise überlappen, da ansonsten das Verhalten nicht definiert ist.
Text-AbschnittDefiniert als Block <text>. Jedes angezeigte Kartenobjekt wird gesucht, um zu ermitteln, ob es den Text anzeigen soll und wie es angezeigt werden soll. Suchparameter (Eingabe): tag, value, zoom, nameTag (jeder Text-Tag wird geprüft). Suchergebnis (Ausgabe): textOnPath, textMinDistance (Abstand zwischen gleichen Texten, z. B. Straßennamen, Referenzen), textSize, textColor, textHaloRadius, textOrder, textDy, textBold, nameTag2 (zusätzlicher Name in Klammern, falls vorhanden), textShield (Hintergrund um den Text), textItalic, textWrapWidth, intersectionMargin (zusätzlicher Abstand, um Textüberlappungen zu vermeiden).
Point-AbschnittDefiniert als Block <point>. Jedes angezeigte Punkt-Kartenobjekt (definiert im order-Abschnitt) wird in diesem Abschnitt gesucht, um zu bestimmen, wie es angezeigt werden soll. Suchparameter (Eingabe): tag, value, zoom, e. Suchergebnis (Ausgabe): shield (Icon-Schild), icon, iconVisibleSize (zusätzlicher Platz, um Icons nicht zu überladen), iconOrder, intersectionSizeFactor.
Polygon-AbschnittDefiniert als Block <polygon>. Jedes angezeigte Polygon-Kartenobjekt (definiert im order-Abschnitt) wird in diesem Abschnitt gesucht, um zu bestimmen, wie es angezeigt werden soll. Suchparameter (Eingabe): tag, value, zoom. Suchergebnis (Ausgabe): color (Farbe zum Füllen des Polygons), shader (Polygon mit demselben Icon füllen), color_2, color_N (Farbe des Randes um das Polygon), strokeWidth_2 (Randbreite), pathEffect_2, cap_2.
Line-AbschnittDefiniert als Block <line>. Jedes angezeigte Linien-Kartenobjekt (definiert im order-Abschnitt) wird in diesem Abschnitt gesucht, um zu bestimmen, wie es angezeigt werden soll. 1 Linienobjekt kann als mehrere kombinierte Linien gerendert werden, bis zu -2 Ebenen darunter und bis zu 7 Ebenen darüber. Suchparameter (Eingabe): tag, value, zoom, nameTag (jeder Text-Tag wird geprüft),. Suchergebnis (Ausgabe): color, color_* (Farbe des Randes um das Polygon), strokeWidth, strokeWidth_* (Randbreite), pathEffect, pathEffect_* (Pfad-Effekt), cap, cap_* (BUTT, ROUND, SQUARE), pathIcon, pathIconStep, shadowRadius (Schatten um die Linie).

Selektoren für Kartenfunktionen

Um zu bestimmen, welche Attribute vom Rendering-Stil abgerufen werden sollen, wird folgendes Suchverfahren durchgeführt:

  • Finden Sie den innersten <case>, der den Such-Eingabeparametern tag/value/zoom entspricht, z. B. für highway=primary wird <case tag="highway" value="primary"> gefunden.
  • Alle Interna von <case> werden sequenziell tief angewendet und Ausgabeparameter werden gesammelt.
  • <case><apply output="1"/><apply_if zoom="15" output="2"> <case> - Die Ausgabe ist 2 im Fall zoom=15 und 1 sonst.
  • Es wird geprüft, ob <case> Teil eines <switch> ist, und wenn ja, werden alle apply und apply_if dieses Schalters ebenfalls ausgewertet.

Auswertungsregeln:

  • In jedem 'case', apply_if, switch, apply werden die Eingabeattribute auf Übereinstimmung geprüft (Auswertung auf true), andernfalls wird der Abschnitt übersprungen und die Ausgabeattribute werden nicht gesammelt.
  • Alle Regeln werden sequenziell ausgewertet und Ausgabeparameter können durch folgende Regeln überschrieben werden.
  • additional=? ist ein spezielles Eingabeattribut, das zusätzliche Tags des Objekts prüft.
  • Kartenstilparameter sind neben tag/value/zoom ebenfalls Eingabe-Suchparameter.
    • Beispiel: <apply_if nightMode="false" streetLightingNight="false" shield="street_lamp_lit_no_shield"/>. Eingabeparameter: nightMode, streetLightingNight; Ausgabeparameter - shield.

Attribute (speziell) & Konstanten

Rendering-Konstanten und Rendering-Attribute sind austauschbar und können verwendet werden, um den Rendering-Stil zu vereinfachen und das Kopieren/Einfügen von Werten oder Codeblöcken zu vermeiden. Wenn ein Attribut wie color ein einzelner Wert ist, wird die Verwendung einer Rendering-Konstante bevorzugt, da dies die Leistung des Rendering-Stils erheblich beschleunigt.

Rendering-Konstanten können nur mit einem bestimmten Wert verwendet werden: <renderingConstant name="motorwayShadowRadius" value="1.6"/> und später in Feature-Selektoren als <apply_if shadowRadius="$motorwayShadowRadius"/>.

Rendering-Attribute können eine eingebettete Struktur mit zusätzlichen Selektoren haben und eines der folgenden Attribute ausgeben (attrColorValue, attrBoolValue, attrFloatValue, attrIntValue, attrStringValue). Beispiel:

    <renderingAttribute name="motorroadShadowColor">
<case attrColorValue="#5f5fff"/>
</renderingAttribute>
.....
<case showAccess="true" additional="motorroad=yes" attrColorValue="$motorroadShadowColor"/>

Spezielle Attribute

Spezielle Attribute sind <renderingAttribute>, die nicht von Selektoren verwendet werden, sondern direkt vom Code abgefragt werden, um bestimmte Funktionen abzubilden, die in der Anwendung gezeichnet werden, wie z. B. eine Navigationsroute, ein Lineal, ein GPX-Track usw.

Spezielles AttributBeschreibung
measureDistanceLineLinien-Rendering für die Funktion "Route planen"
markerGuideline, markerPlanRoutelineRendering-Linien zu den Markern
routeRendering einer Navigationsroute
gpxRendering eines GPX-Tracks
publicTransportLineRendering einer Navigationsroute für öffentliche Verkehrsmittel
walkingRouteLineRendering einer Navigation für öffentliche Verkehrsmittel: Fußgängerroute zwischen Haltestellen
rulerLineFont, rulerLine, rulerCircleAlt, rulerCircleWie das Radius-Lineal-Widget gerendert wird und die Entfernung durch Tippen gemessen wird
defaultColorStandardfarbe zum Füllen der Karte (schaltet Nacht-/Tagmodus)
shadowRenderingIntern wie Schatten mit Skia gerendert wird
routeInfo_*Beispiel: routeInfo_surface, routeInfo_roadClass erzeugen Straßenklassen, die in der Legende der Route angezeigt werden.
polygonMinSizeToDisplayIntern wie kleine Linien und kleine Polygone gerendert werden
roadDensityZoomTileIntern wie kleine Linien und kleine Polygone gerendert werden
roadsDensityLimitPerTileIntern wie kleine Linien und kleine Polygone gerendert werden
defaultSymbolPathSpacingIntern wie kleine Linien und kleine Polygone gerendert werden
defaultBlockPathSpacingIntern wie kleine Linien und kleine Polygone gerendert werden
globalPathPaddingIntern wie kleine Linien und kleine Polygone gerendert werden
debugTextDisplayBBoxAttribute zum Debuggen von Text-Rendering und -Positionierung
debugTextDisplayShieldBBoxAttribute zum Debuggen von Text-Rendering und -Positionierung
debugTextDoNotFindIntersectionsAttribute zum Debuggen von Text-Rendering und -Positionierung
debugTextDoNotFindIntersectionsSameNameAttribute zum Debuggen von Text-Rendering und -Positionierung
debugTextDisplayShortRoadNamesAttribute zum Debuggen von Text-Rendering und -Positionierung

Kartenstilparameter

Kartenstilparameter ermöglichen die Kombination mehrerer Rendering-Stile innerhalb einer Dateidefinition, d. h. es ist nicht erforderlich, separate 'my_custom_style_night_mode.render.xml' zu haben. Es ist möglich, einen Parameter wie night_mode (standardmäßig aktiviert) zu definieren und bestimmte Regeln (wie Farben) mithilfe dieses Parameters anzupassen. Später in der Benutzeroberfläche ist es möglich, diesen Parameter einfach zu wechseln und einen anderen Kartenstil in OsmAnd zu haben.

Hier ist eine Definition des Parameters baseAppMode. possibleValues sind Werte, die in der OsmAnd-Benutzeroberfläche angezeigt werden, category hilft dabei, zu welcher Benutzeroberflächenkategorie diese Eigenschaft gehört.

<renderingProperty attr="baseAppMode" name="Standard-Renderingmodus" description="Kartenoptimierung für das jeweilige Benutzerprofil basierend auf dem Basis-(Eltern-)Profil"
type="string" possibleValues="default, car, bicycle, pedestrian, public_transport, boat, ski"/>

Später im Auswahlstil können Sie angeben, wann dieser Selektor angewendet werden kann, d. h. für welchen vom Benutzer angegebenen Anwendungsmodus.

<renderingAttribute name="roadsDensityLimitPerTile">
<!-- Anzahl der Straßen pro Kachel anzeigen -->
<case moreDetailed="true" attrIntValue="55"/>
<case baseAppMode="pedestrian" attrIntValue="40"/>
<case baseAppMode="bicycle" attrIntValue="40"/>
<case attrIntValue="60"/>
</renderingAttribute>

Wenn der Benutzer also moreDetailed=true auswählt, ist der Ausgabewert für die Dichte 55, und wenn baseAppMode=pedestrian (ein anderer Parameter), ist er 40, andernfalls 60.