Kartenstil
Eine MapCSS-Stildatei besteht aus Regeln, die von oben nach unten auf jedes Objekt angewendet werden.
Dieser Stil zum Beispiel:
node[natural=tree] {
icon-image: "tree.svg";
}
zeigt an Punkten, deren Tag natural den Wert tree besitzt, das Bild tree.svg an.
Jede Regel besteht aus zwei Teilen: dem Filter node[natural=tree] und den Darstellungsparametern icon-image: tree.svg;. Der Filter bestimmt, für welche Objekte die Parameter gelten.
Regeln können verschachtelt werden und auf jeder Ebene Parameter setzen.
|z16- {
icon-scale: 0.50;
icon-tint: @color_icon_tint;
[amenity=bicycle_parking] {
icon-image: "bike_parking.svg";
}
[amenity=bicycle_rental] {
icon-image: "bike_rental.svg";
}
[amenity=bicycle_repair_station] {
icon-image: "bike_service.svg";
}
}
Verschachtelte Regeln halten den Stil kurz und strukturiert: Gemeinsame Parameter werden einmal definiert und müssen nicht in mehreren Blöcken wiederholt werden.
Diese Dokumentation beschreibt den MapCSS-Dialekt von Guru Maps. Einige ursprüngliche Darstellungsparameter sind nicht implementiert; dafür stehen Präprozessor-Makros, verschachtelte Regeln und zusätzliche Funktionen für berechnete Ausdrücke zur Verfügung. Den in Guru Maps verwendeten Stil findest du im Repository.
Filter
Betrachten wir einen komplexen Filter:
node,area|z14-[boundary=forest_compartment][ref]
Er besteht aus:
- Dem Typfilter
node,area: Verwendenodefür Punkte,linefür Linien undareafür Polygone. Mehrere Typen werden durch Kommas getrennt. Mit*spielt der Typ keine Rolle.canvaswählt den Kartenhintergrund aus. - Dem Zoomfilter
z14-: Er legt die Zoomstufen fest, auf denen die Regel greift. Du kannst nur die Mindeststufez8-, nur die Höchststufez-9, eine einzelne Zoomstufez12oder einen Bereich wiez3-9angeben. Beide Enden eines Bereichs gehören dazu:z3-9gilt auf den Zoomstufen 3 bis 9. - Den Tagfiltern
[boundary=forest_compartment][ref]: Sie behalten nur Objekte, deren Tagboundaryden Wertforest_compartmentund deren Tagrefeinen beliebigen Wert besitzt. Mit[!ref]werden dagegen Objekte ohne Tagrefausgewählt.
Jeder Teil ist optional. Ein Zoomfilter kann auch allein stehen, wie |z16- im Beispiel oben.
Tagfilter
| Filter | Behält Objekte, bei denen |
|---|---|
[ref] | das Tag ref vorhanden ist |
[!ref] | das Tag ref fehlt |
[highway=primary] | der Wert primary ist |
[highway!=primary] | der Wert nicht primary ist |
[population>100000] | der Wert größer ist; <, >= und <= funktionieren genauso |
[ele%100] | der Wert ein Vielfaches von 100 ist |
[ref^=E] | der Wert mit E beginnt |
[name$=Street] | der Wert auf Street endet |
[name*=Park] | der Wert Park enthält |
[cuisine~=pizza] | pizza einer der durch ; getrennten Werte ist, etwa in pizza;burger |
Die Vergleiche >, <, >= und <= vergleichen Zahlen, wenn beide Werte Zahlen sind, andernfalls Text.
Setze einen Wert in doppelte Anführungszeichen, wenn er ein Apostroph, ein Anführungszeichen oder ] enthält oder mit einem Leerzeichen beginnt oder endet:
[name="McDonald's"],
[ref^="B "] {
icon-image: "logo.svg";
}
Ein Wert in Anführungszeichen darf {, }, ;, @ und // nicht enthalten.
Filter gruppieren
Mehrere Filter können durch Kommas getrennt werden:
node,area|z14-[boundary=forest_compartment][ref],
node,area|z14-[boundary=forestry_compartment][ref]
Gemeinsame Parameter lassen sich auf eine höhere Ebene verschieben:
node,area|z14-[ref] {
[boundary=forest_compartment],
[boundary=forestry_compartment] {
}
}
Um mehrere Regeln zu gruppieren, ohne sofort einen Regelblock zu beginnen, umschließe die Filter mit Klammern:
node,area|z14-[ref](
[boundary=forest_compartment],
[boundary=forestry_compartment]) {
}
Ein Zoomfilter kann für eine ganze Gruppe gelten:
|z11-([highway=trunk], [highway=primary]) {
shield-image: "shield.svg";
}
Relationsfilter
relation[...] behält Objekte, die zu einer Relation mit den angegebenen Tags gehören, zum Beispiel die Wege von Wanderrouten:
relation[type=route][route=hiking] {
line|z9- {
color: #0000ff80;
width: 2pt;
}
}
Die Funktion relationTag liest die Tags dieser Relation, und per-relation zeichnet einen Weg einmal für jede seiner Relationen.
Präprozessor-Makros
Der Präprozessor bereitet den Stil für das Parsen vor. Er ersetzt Werte und aktiviert oder deaktiviert Blöcke abhängig von den Einstellungen.
Ersetzungsmakros
@import
Fügt den Inhalt einer Datei ein:
@import "polygons.mapcss";
@{name}
Setzt an jeder Verwendungsstelle den Wert eines Makros ein:
// Farbe definieren
@color_ground: #EAE3D3;
// und anschließend verwenden
canvas
{
fill-color: @color_ground;
}
Ein Makro fügt seinen Text unverändert ein und kann deshalb einen Teil eines Ausdrucks enthalten:
@route_band_width: zlinear(13, 5pt, 7pt, 9pt, 11pt);
line|z13- {
outline-width: eval(@route_band_width);
}
Ein Makro, dessen Wert mit eval( beginnt, wird einmal beim Laden des Stils berechnet.
Bedingungen
@if
Prüft einen Parameter und nimmt einen Block abhängig vom Ergebnis in den Stil auf oder schließt ihn aus:
@if Theme == Dark
@import "colors_dark.mapcss";
@else // Standardfarben
@import "colors.mapcss";
@endif
Guru Maps stellt dem Präprozessor folgende Parameter bereit:
Eine Bedingung kann einen Parameter mit ==, !=, <, >, <= oder >= vergleichen. Ein Wert ist ein einzelnes Wort aus Buchstaben, Ziffern und _. Ein Parameter ohne Vergleich prüft, ob er eingeschaltet ist; mit ! wird geprüft, ob er ausgeschaltet ist:
@if Food
// angezeigt, wenn der Schalter „Restaurants und Cafés“ eingeschaltet ist
@endif
@if !Food
// angezeigt, wenn er ausgeschaltet ist
@endif
Guru Maps stellt dem Präprozessor folgende Parameter bereit:
- Theme {Light, Dark} – aktuelles App-Design. Im dunklen Design wird reines Weiß
#FFFFFFin Symbolen dunkelgrau; verwende#FEFEFEfür Weiß, das weiß bleiben soll. - Style {City, Outdoor} – aktueller Kartenstil,
- SubStyle {Hike, Bike, Ski, Car}
- Hike, Bike und Ski werden von den Outdoor-Kartenvarianten für Wandern, Radfahren und Skifahren gesetzt,
- Car wird bei der Auto-Navigation gesetzt, mit jedem Kartenstil.
- Schalter aus Objekte auf der Karte in den Einstellungen:
AllShops,Bar,Beauty,BuildingName,CityService,Culture,Education,Entertaiment,Financial,Food,Hotel,Medical,PistesAndLifts,Postal,PublicTransport,Railway,Shop,Sport. Ein Schalter ist1, wenn er eingeschaltet ist, und0, wenn er ausgeschaltet ist. Bei der Auto-Navigation sind alle Schalter außerBuildingNameausgeschaltet.
@else
Definiert den Block, der ausgeführt wird, wenn die erste Bedingung falsch ist.
@elif
Enthält eine weitere Bedingung für den Fall, dass vorherige Bedingungen nicht zutrafen.
@endif
Schließt den aktuellen Bedingungsblock.
Kommentare
// kommentiert den Rest der Zeile aus, /* und */ umschließen einen Kommentar über mehrere Zeilen.
Darstellungsparameter
Diese Parameter steuern, wie Objekte auf der Karte gezeichnet werden.
Parameterwerte
Breite
Eine Linienbreite kann in Pixeln (1px), Punkten (2pt) oder Metern (3m) angegeben oder mit einem Ausdruck berechnet werden, zum Beispiel eval( zlinear( 13, 1px,1pt,max(2pt, 4m)) );. Mehr dazu im Abschnitt Ausdrücke. Schreibe immer die Einheit: Eine Zahl ohne Einheit wird in internen Karteneinheiten gemessen.
Farbe
Farben werden als #RGB, #RRGGBB, #RRGGBBAA oder als benannte Farbe aus der CSS-Farbliste angegeben.
fill-color, casing-color, dashes-color, text-color und font-stroke-color akzeptieren nur eine Farbe. color, icon-tint, outline-color, shield-color und shield-text-color akzeptieren auch einen Ausdruck.
Text und Anführungszeichen
Einfache und doppelte Anführungszeichen bedeuten dasselbe. Es gibt keine Escape-Sequenzen, daher kann ein Text das Anführungszeichen, mit dem er eingeschlossen ist, nicht selbst enthalten: Schreiben Sie "McDonald's" in doppelten und 'say "hi"' in einfachen Anführungszeichen. Die Beispiele auf dieser Seite verwenden doppelte Anführungszeichen.
Setzen Sie innerhalb von eval() jeden Text in Anführungszeichen. Ein Tag-Name, der nur aus lateinischen Buchstaben und Ziffern besteht, funktioniert auch ohne sie, also ist tag(name) dasselbe wie tag("name"), aber ein Name mit : oder _ braucht Anführungszeichen: tag("addr:street"). Zahlen mit Einheiten, wie 2pt, und Farben, wie #808080, stehen ohne Anführungszeichen. In diesem Beispiel ist die Palette ein Text, relationTag("colour") liest einen Tag, und #808080 ist eine Farbe:
color: eval(mapColor("red #E53935, green #43A047, blue #1E88E5", relationTag("colour"), #808080));
Außerhalb von eval() sind die Anführungszeichen optional: Ein Parameterwert ist der Text bis zum ;, daher sind icon-image: tree.svg; und icon-image: "tree.svg"; gleichwertig. Leerzeichen am Anfang und am Ende eines Werts werden verworfen, auch innerhalb von Anführungszeichen. @import funktioniert genauso.
In Tag-Filtern setzen Sie einen Wert in Anführungszeichen, wenn er einen Apostroph, ein Anführungszeichen oder ] enthält oder mit einem Leerzeichen beginnt oder endet: [name="McDonald's"], [ref^="B "]. Tag-Namen in Filtern und Werte in @if-Bedingungen stehen nie in Anführungszeichen.
Auch in Anführungszeichen darf ein Wert kein ;, { oder } enthalten, die den Parameter beenden beziehungsweise einen Block öffnen, kein //, das einen Kommentar beginnt, und kein @, das ein Makro beginnt.
Die nächste Version von Guru Maps hebt diese Einschränkungen auf. Ein Backslash maskiert dann ein Anführungszeichen (\", \', \\), ;, {, }, // und @ werden innerhalb von Anführungszeichen zu gewöhnlichen Zeichen, und ein Wert in Anführungszeichen behält seine Leerzeichen.
Zahlen und Schalter
text-priority, icon-scale, icon-offset-x, icon-offset-y und z-index akzeptieren eine einfache Zahl, keinen Ausdruck. Schalter wie text-allow-overlap akzeptieren true oder false.
Parameter der Zeichenreihenfolge
layer
Die Ebenennummer trennt unterschiedliche Darstellungsebenen der Karte.
// Für jedes Objekt mit dem Tag 'layer' den Tagwert als Ebenennummer verwenden
*|z9-[layer] {
layer: eval(tag("layer"));
}
z-index
z-index legt die Zeichenreihenfolge gleichartiger Objekte innerhalb einer Ebene fest.
area|z10-[natural=wood] {
z-index: -3;
fill-color: @color_wood;
}
area[natural=oceanwater] {
z-index: -2;
fill-color: @color_water;
}
Polygonparameter
fill-color
Füllfarbe eines Polygons.
area|z5-[natural=water] {
fill-color: @color_water;
}
fill-image
Füllbild eines Polygons.
// Füllbild eines militärischen Gebiets über anderen Objekten
area|z11- {
[landuse=military],
[military=danger_area] {
z-index: 2;
fill-image:"forbiddenArea.png";
}
}
fill-image unterstützt eingebettete Base64-Daten:
// entspricht arrow.svg
fill-image: eval(data("PHN2ZyB3aWR0aD0iMTI4IiBoZWlnaHQ9IjgiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTI2IDNoMTBWMWw1IDMtNSAzVjVIMjZ6IiBmaWxsPSIjMDAwIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIG9wYWNpdHk9Ii40Ii8+PC9zdmc+Cg=="));
color und width für Polygone
Farbe und Breite des Polygonrands.
area|z15-[building] {
z-index: 3;
width: 1px;
color: @color_landuse_residential_stroke;
}
Linienparameter
color und width für Linien
Farbe und Breite einer Linie.
line|z13-[natural=tree_row] {
width: 3pt;
color: @color_wood;
z-index: -10;
}
casing-color und casing-width
Farbe und Breite der äußeren Linienkontur, meist für Straßen verwendet. Die Kontur wird auf jeder Seite der Linie hinzugefügt und braucht daher auch width.
line|z8-[highway=motorway],
line|z11-[highway=motorway_link] {
color: @color_motorway;
casing-color: @color_motorway_casing;
casing-width: 0.5pt;
}
dashes
Legt die Längen gezeichneter und leerer Segmente fest. Verwende bis zu 8 Zahlen mit einer Summe unter 64. Jede Zahl bezeichnet die Länge eines Liniensegments in Punkten.
line|z15-[highway=cycleway] {
dashes: 2,2,2,2;
dashes-color: @color_cycleway_dashes;
}
dashes-color und dashes-width
Farbe und Breite der Striche, beispielsweise für Pfade, Treppen und Grenzen. Striche werden nur gezeichnet, wenn dashes, dashes-color und dashes-width alle gesetzt sind.
line|z15-[highway=steps] {
dashes-color: @color_footway_dashes;
dashes-width: eval( zlinear( 16, 3pt, 4pt ) );
}
linecap
Form der Linienenden. Mögliche Werte: none, square, round.
linejoin
Form der Linienverbindungen. Mögliche Werte: round, bevel.
outline-color und outline-width
Eine zweite Linie entlang einer Linie oder eines Polygonrands, zum Beispiel ein durchscheinendes Band unter einer Route. Anders als die Kontur hängt die äußere Linie nicht von width ab: outline-width ist ihre volle Breite.
Eine durchscheinende äußere Linie markiert eine Wanderroute mit einem breiten Band, und der Pfad bleibt darunter sichtbar:
relation[type=route][route=hiking] {
line|z13- {
outline-width: 7pt;
outline-color: #1E88E570; // durchscheinendes Blau
}
}
offset
Verschiebt die Linie zur Seite: positive Werte nach links von der Wegrichtung, negative nach rechts. Die Verschiebung gilt für die Linie, ihre Kontur, die äußere Linie und die Striche. Meist wird sie mit per-relation verwendet, um mehrere Routen auf einem Weg nebeneinander zu zeichnen; siehe das Beispiel unten.
per-relation
per-relation: true zeichnet einen Weg einmal für jede Relation, zu der er gehört, mit den Parametern dieser Relation. Zusammen mit offset und der Funktion relationSlot zeichnet es Routen, die sich einen Weg teilen, nebeneinander:
relation[type=route][route=subway] {
line|z11- {
per-relation: true;
width: 2pt;
offset: eval(relationSlot() * 2pt);
color: eval(mapColor("red #E53935, green #43A047, blue #1E88E5", relationTag("colour"), #808080));
}
}
Textparameter
text
Text, der neben einem Punkt oder mittig auf einer Linie beziehungsweise einem Polygon gezeichnet wird.
node,area|z2-8[place=country] {
text: eval(locTag("name"));
// weitere Parameter ausgelassen
}
font-weight
Schriftgewicht. Mögliche Werte: lighter, light, normal, medium, semibold, bold, bolder.
node,area|z9-[place=town],
node,area|z10-[place=village],
node,area|z12-[place=hamlet] {
font-weight:light;
font-size:11;
font-stroke-width:2px;
font-stroke-color: @color_label_stroke;
}
font-style
normal oder italic. Für fetten Text verwende font-weight.
Gewässernamen werden auf Karten traditionell kursiv gesetzt, so unterscheiden sie sich von den Namen von Orten:
line|z15-[waterway=river] {
text: eval(locTag("name"));
font-style: italic;
text-color: #0F4F80;
}
font-size
Schriftgröße in Punkten. Die Größe kann sich mit der Zoomstufe ändern; schreibe einfache Zahlen in zlinear, dann wächst der Text gleichmäßig:
node|z10-[place=city] {
font-size: eval(zlinear(10, 13, 14, 15));
}
font-stroke-width und font-stroke-color
Breite und Farbe der Schriftkontur. Die Breite kann ein Ausdruck sein.
text-color
Textfarbe.
node,area|z2-8[place=country] {
text: eval(locTag("name"));
text-color: @color_name_text;
text-priority: 10;
// weitere Tags ausgelassen
}
text-letter-spacing
Zusätzlicher Abstand zwischen den Buchstaben, in Bruchteilen der Schriftgröße: 0.1 fügt ein Zehntel der Schriftgröße hinzu. Er kann sich über zlinear mit der Zoomstufe ändern.
Gesperrt gesetzte Großbuchstaben heben die Namen von Regionen von den Namen der Städte ab. Beim Hineinzoomen rücken die Buchstaben auseinander, und der Name überspannt mehr von seiner Region:
node|z6-[place=state] {
text: eval(uppercase(locTag("name")));
text-letter-spacing: eval(zlinear(6, 0.1, 0.18, 0.25));
}
text-priority
Wenn mehrere Beschriftungen um denselben Platz konkurrieren, bestimmt text-priority, welcher Text zuerst erscheint.
text-allow-overlap
Erlaubt die Überlappung von Beschriftungen, sodass mehrere Texte denselben Bereich belegen können.
text-big-padding
Reserviert doppelt so viel Abstand um den Text. Dies eignet sich für größere Siedlungen wie Städte und Vororte, damit Beschriftungen die Karte nicht überdecken.
Symbolparameter
icon-image
Name des Bilds, das an einem Punkt oder in der Mitte eines Polygons angezeigt wird.
node,area|z17-[amenity=library] {
icon-image: "library.svg";
icon-scale: 0.37;
icon-tint: @color_icon_tint;
}
icon-image unterstützt eingebettete Base64-Daten:
// entspricht poi_circle_small.svg
icon-image: eval(data("PHN2ZyB3aWR0aD0iOCIgaGVpZ2h0PSI4IiB2aWV3Qm94PSIwIDAgOCA4IiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8cGF0aCBkPSJNNyA0QzcgNS42NTY4NSA1LjY1Njg1IDcgNCA3QzIuMzQzMTUgNyAxIDUuNjU2ODUgMSA0QzEgMi4zNDMxNSAyLjM0MzE1IDEgNCAxQzUuNjU2ODUgMSA3IDIuMzQzMTUgNyA0WiIgZmlsbD0iIzgwODA4MCIvPgo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTggNEM4IDYuMjA5MTQgNi4yMDkxNCA4IDQgOEMxLjc5MDg2IDggMCA2LjIwOTE0IDAgNEMwIDEuNzkwODYgMS43OTA4NiAwIDQgMEM2LjIwOTE0IDAgOCAxLjc5MDg2IDggNFpNNCA3QzUuNjU2ODUgNyA3IDUuNjU2ODUgNyA0QzcgMi4zNDMxNSA1LjY1Njg1IDEgNCAxQzIuMzQzMTUgMSAxIDIuMzQzMTUgMSA0QzEgNS42NTY4NSAyLjM0MzE1IDcgNCA3WiIgZmlsbD0id2hpdGUiLz4KPC9zdmc+Cg=="));
icon-fallback
Ein kleineres Bild, das statt icon-image angezeigt wird, wenn das Symbol auf der Karte keinen Platz hat, zum Beispiel ein Punkt anstelle eines Geschäftslogos. In einer belebten Straße bleibt der Ort auf der Karte, und sein Logo erscheint beim Hineinzoomen:
node|z16-[brand:wikidata=Q38076] {
icon-image: "logo_mcdonalds.svg";
icon-fallback: "poi_circle_small.svg";
}
icon-scale
Skaliert das Bild gegenüber seiner Originalgröße.
icon-tint
icon-tint färbt das Bild um. #FFF bleibt weiß, #CCC erhält eine hellere Variante der gewählten Farbe, #888 entspricht ihr, #444 wird dunkler und #000 bleibt schwarz. Dazwischen gehen die Farben weich ineinander über.
icon-offset-x und icon-offset-y
Verschiebt das Bild relativ zu seinem Ankerpunkt. Standardmäßig ist das Bild über dem Kartenpunkt zentriert. icon-offset-y: 0; richtet beispielsweise die Unterkante einer Pin-Grafik am Zielpunkt aus. Die Werte reichen von 0 bis 1; 0 steht für die untere beziehungsweise linke Kante und 1 für die obere beziehungsweise rechte.
image-allow-overlap
Erlaubt die Überlappung von Symbolen.
Parameter für Straßenschilder
Ein Schild zeigt eine Straßennummer auf einer Tafel entlang der Straße. Es wird auf Linien gezeichnet, wenn sowohl shield-image als auch shield-text gesetzt sind.
Schilder in den Farben der Straßenschilder eines Landes lassen Hauptstraßen auf einen Blick von lokalen Straßen unterscheiden. In Belarus zum Beispiel sind die Nummern der Hauptstraßen weiß auf Rot und die der lokalen Straßen dunkel auf Weiß:
line|z11-[highway=primary][ref] {
shield-image: "shield.svg";
shield-text: eval(listItem(tag("ref"), 0)); // die erste Nummer von "М1;E30"
shield-color: #005387;
[ref^=М], [ref^=Р] {
shield-color: #C1121C;
}
[ref^=Н] {
shield-image: "shield_plate.svg";
shield-color: #FEFEFE;
}
}
shield-image
Das Bild der Tafel.
shield-text
Der Text auf der Tafel, meist die Straßennummer.
shield-color
Färbt das Tafelbild wie icon-tint um.
shield-text-color
Textfarbe. Ohne Angabe ist der Text auf hellen Tafeln dunkel und auf dunklen weiß.
shield-fit
Wie die Tafel zum Text passt. stretch (Standard) dehnt die Mitte des Bildes auf die Textbreite und behält seine Enden. fixed behält das Bild wie gezeichnet und verbreitert es nur, wenn der Text nicht hineinpasst; verwende es für Tafeln mit einer festen Form, etwa US-Straßenschilder. Um die eigenen Farben des Bildes zu behalten, setze shield-color: #00000000.
Routen in Kalifornien werden bei zwei Ziffern in einem Kreis und bei drei in einer Ellipse nummeriert. Die Nummer folgt auf das Netzpräfix, wie in CA 1:
line|z12-[highway=secondary][ref^="CA "] {
shield-fit: fixed;
shield-text: eval(listItem(listItem(tag("ref"), 0), 1, " "));
shield-image: eval(cond(length(listItem(listItem(tag("ref"), 0), 1, " ")) == 3,
"shield_state_3.svg", "shield_state_2.svg"));
shield-color: #00000000;
shield-text-color: #1E1E1E;
}
Detailparameter
Mit details-text und details-description legst du Name und Beschreibung von GeoJSON-Objekten fest. details-text erscheint als Titel, details-description als Beschreibung. Sind beide Werte leer, werden Berührungen des Objekts ignoriert. Die Parameter unterstützen Ausdrücke.
* {
details-text: eval(tag("name"));
details-description: eval(tag("description"));
}
details-enabled: false sorgt dafür, dass Antippen eines Objekts nichts bewirkt: Guru Maps öffnet seine Details nicht. Eine Relation mit diesem Parameter, etwa eine Route, erscheint auch nicht unter den Routen eines angetippten Wegs. Verwende ihn für Objekte, die nichts zu erzählen haben:
node|z15-[amenity=hunting_stand] {
icon-image: "poi_hunting_stand.svg";
details-enabled: false;
}
Ausdrücke
Filter und Darstellungsparameter können von äußeren Faktoren abhängen, durch Formeln berechnet werden oder sich mit der Zoomstufe ändern.
Funktionen
Berechnete Werte müssen immer mit der Funktion eval() beginnen. Darin sind folgende Funktionen verfügbar:
min und max
Geben den kleinsten beziehungsweise größten Parameterwert zurück. Die Anzahl der Parameter ist nicht begrenzt.
any
Gibt den ersten Parameterwert zurück, der nicht null ist. Die Anzahl der Argumente ist nicht begrenzt.
data
Dekodiert eine Base64-Zeichenfolge und kann für icon-image und fill-image verwendet werden.
tag
Gibt den Wert des angegebenen Tags zurück oder null, falls es fehlt.
locTag
Gibt abhängig von den Spracheinstellungen des Benutzers einen lokalisierten Tagwert zurück. Sind beispielsweise Englisch, Russisch und die Landessprache bevorzugt, prüft locTag("name") nacheinander name:en, name:ru und name und verwendet den ersten Treffer. Guru Maps unterstützt ar, be, cs, da, de, en, es, fr, it, ja, ko, nl, pl, pt, ru, sv, uk, zh. Verwende für diese Sprachen locTag() und für andere Sprachen ausdrücklich tag().
relationTag
Gibt den Wert eines Tags der Relation zurück, zu der das Objekt gehört, etwa die Farbe einer Route: relationTag("colour"). Mit per-relation liest sie die Relation, die gerade gezeichnet wird.
relationSlot
Gibt mit per-relation die Position der Relation unter den auf dem Weg gezeichneten Routen zurück, auf 0 zentriert: -0.5 und 0.5 bei zwei Routen, -1, 0 und 1 bei dreien. Multipliziere sie mit der Linienbreite, um die Routen mit offset nebeneinander zu platzieren, wie im Beispiel unter per-relation.
listItem
Gibt ein Element einer Liste zurück, gezählt ab 0. Die Elemente werden durch ; oder durch das Zeichen im dritten Parameter getrennt.
shield-text: eval(listItem(tag("ref"), 0)); // "E 50" für "E 50;E 65"
color: eval(listItem(tag("osmc:symbol"), 0, ":")); // "red" für "red:white:red_bar"
length
Gibt die Anzahl der Zeichen im Text zurück, zum Beispiel um für eine dreistellige Straßennummer ein breiteres Schild zu wählen, wie im Beispiel unter shield-fit.
uppercase, lowercase und capitalize
Ändert die Groß- und Kleinschreibung des Textes. Der optionale zweite Parameter ist eine Sprache für deren Schreibregeln, etwa uppercase(locTag("name"), "el").
mapColor
Wählt eine Farbe aus einer Palette. Der erste Parameter ist die Palette, "name color, name color, ..."; der zweite ist der nachzuschlagende Wert; der optionale dritte ist das Ergebnis bei leerem Wert. Ein Farbname aus der Palette gibt seine Farbe zurück; jede andere Farbe gibt die ähnlichste Palettenfarbe zurück.
color: eval(mapColor("red #E53935, green #43A047, blue #1E88E5", relationTag("colour"), #808080));
formatElevation
Formatiert eine Höhe in Metern als 1234 m oder in Fuß, entsprechend den in der App gewählten Einheiten. Ein Gipfel wird mit Namen und Höhe beschriftet, oder nur mit der Höhe, wenn er keinen Namen hat:
node|z13-[natural=peak] {
text: eval(cond(locTag("name"),
cond(tag("ele"), locTag("name") . " " . formatElevation(tag("ele")), locTag("name")),
formatElevation(tag("ele"))));
}
cond
Wertet einen logischen Ausdruck aus. Ist das erste Argument wahr, gibt die Funktion das zweite zurück, andernfalls das dritte.
// addr:housenumber prüfen
text: eval( cond( tag("addr:housenumber"),
// Bei vorhandener Hausnummer die nächste Bedingung anhängen
tag("addr:housenumber") . cond( any( locTag("name"), tag("addr:housename") ),
// Name oder addr:housename in Klammern setzen
" (" . any( locTag("name"), tag("addr:housename") ) . ")",
// andernfalls leere Zeichenfolge
""),
// Ohne Hausnummer name oder addr:housename verwenden
any( locTag("name"), tag("addr:housename") ) ) );
boolean
Wandelt einen Wert in einen booleschen Wert um. Fehlt er oder entspricht er ohne Beachtung der Großschreibung 0, No, Off oder False, gibt die Funktion false zurück, andernfalls true.
zlinear
Ändert einen Wert mit der Zoomstufe gleichmäßig. Der erste Parameter ist die anfängliche Zoomstufe; danach folgen die Werte für jede weitere Zoomstufe.
line|z13-[highway=residential] {
width: eval( zlinear( 13, 1px, 1pt, max(2pt, 4m) ) );
color: @color_small_road;
linecap: round;
}
In diesem Beispiel beträgt die Straßenbreite auf Zoomstufe 13 ein Pixel, auf Stufe 14 einen Punkt und ab Stufe 15 den größeren Wert aus zwei Punkten und vier Metern.
metric
Wandelt einen numerischen Parameter in Meter um.
line|z12-[highway=tertiary] {
width: eval( zlinear( 12, 1px, 1pt, 1pt, max(3pt, metric(any(tag("lanes"),2)*2)) ));
}
Hier wird die Anzahl der Fahrspuren mit zwei multipliziert und als Entfernung in Metern verwendet. max(3pt, metric()) gibt den größeren Wert aus der Breite in Metern und der Breite in Punkten zurück.
Ausdrucksoperatoren
Ausdrücke unterstützen die mathematischen Operatoren +, -, *, /, den Operator . zum Verketten von Zeichenfolgen, den Gleichheitsoperator == sowie ~=, der prüft, ob der Text eine Teilzeichenfolge enthält.