Styl mapy
Plik stylu MapCSS składa się z reguł stosowanych kolejno do każdego obiektu, od góry do dołu.
Przykładowy styl:
node[natural=tree] {
icon-image: "tree.svg";
}
wyświetli obraz tree.svg dla punktów, w których znacznik natural ma wartość tree.
Każda reguła stylu składa się z dwóch części: filtra node[natural=tree] oraz parametrów rysowania icon-image: tree.svg;. Filtr określa, do których obiektów zostaną zastosowane parametry.
Reguły można zagnieżdżać i ustawiać parametry na każdym poziomie.
|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";
}
}
Zagnieżdżone reguły pozwalają zachować zwięzłą i uporządkowaną strukturę stylu. Wspólne parametry można zdefiniować raz, bez powtarzania ich w wielu blokach.
Ta dokumentacja opisuje odmianę MapCSS używaną w aplikacji Guru Maps. Niektóre oryginalne parametry rysowania nie zostały zaimplementowane, ale dostępne są makra preprocesora, zagnieżdżone reguły i nowe funkcje obliczeniowe. Styl używany w Guru Maps znajduje się w repozytorium.
Filtry
Przyjrzyjmy się złożonemu filtrowi:
node,area|z14-[boundary=forest_compartment][ref]
Składa się on z:
- Filtra typu
node,area. Użyjnodedla punktów,linedla linii,areadla wielokątów albo rozdziel kilka typów przecinkami. Użyj*, jeśli typ nie ma znaczenia.canvaswybiera tło mapy. - Filtra powiększenia
z14-. Określa poziomy powiększenia, na których reguła ma zadziałać. Można podać tylko minimalny poziom, np.z8-, tylko maksymalny, np.z-9, pojedynczy poziom, np.z12, albo zakres, np.z3-9. Oba końce zakresu są wliczone:z3-9działa na poziomach powiększenia od 3 do 9. - Filtrów znaczników
[boundary=forest_compartment][ref]. Pozostawiają one wyłącznie obiekty ze znacznikiemboundaryo wartościforest_compartmenti dowolną wartością znacznikaref. Aby wybrać obiekty bez znacznikaref, użyj filtra[!ref].
Każda część jest opcjonalna. Filtr powiększenia może występować samodzielnie, jak |z16- w powyższym przykładzie.
Filtry znaczników
| Filtr | Pozostawia obiekty, w których |
|---|---|
[ref] | znacznik ref istnieje |
[!ref] | znacznika ref brakuje |
[highway=primary] | wartość jest równa primary |
[highway!=primary] | wartość nie jest równa primary |
[population>100000] | wartość jest większa; <, >= i <= działają tak samo |
[ele%100] | wartość jest wielokrotnością 100 |
[ref^=E] | wartość zaczyna się od E |
[name$=Street] | wartość kończy się na Street |
[name*=Park] | wartość zawiera Park |
[cuisine~=pizza] | pizza jest jedną z wartości rozdzielonych znakiem ;, jak w pizza;burger |
Porównania >, <, >= i <= porównują liczby, gdy obie wartości są liczbami, a w przeciwnym razie tekst.
Umieść wartość w cudzysłowie, gdy zawiera apostrof, cudzysłów lub ] albo gdy zaczyna się lub kończy spacją:
[name="McDonald's"],
[ref^="B "] {
icon-image: "logo.svg";
}
Wartość w cudzysłowie nie może zawierać {, }, ;, @ ani //.
Grupowanie filtrów
Kilka filtrów można rozdzielić przecinkami:
node,area|z14-[boundary=forest_compartment][ref],
node,area|z14-[boundary=forestry_compartment][ref]
W tym przykładzie wspólne parametry można przenieść na wyższy poziom:
node,area|z14-[ref] {
[boundary=forest_compartment],
[boundary=forestry_compartment] {
}
}
Czasami trzeba połączyć kilka reguł w grupę. Umieść filtry w nawiasach ( i ), aby je zgrupować bez natychmiastowego rozpoczynania bloku reguły.
node,area|z14-[ref](
[boundary=forest_compartment],
[boundary=forestry_compartment]) {
}
Filtr powiększenia może dotyczyć całej grupy:
|z11-([highway=trunk], [highway=primary]) {
shield-image: "shield.svg";
}
Filtry relacji
relation[...] pozostawia obiekty należące do relacji o podanych znacznikach. Na przykład odcinki dróg szlaków pieszych:
relation[type=route][route=hiking] {
line|z9- {
color: #0000ff80;
width: 2pt;
}
}
Funkcja relationTag odczytuje znaczniki tej relacji, a per-relation rysuje odcinek drogi osobno dla każdej z jego relacji.
Makra preprocesora
Preprocesor przygotowuje styl do analizy, podstawiając wartości oraz włączając lub wyłączając bloki zależnie od ustawień.
Makra podstawiania
@import
Wstawia zawartość wskazanego pliku:
@import "polygons.mapcss";
@{name}
Wstawia wartość makra w każdym miejscu jego użycia:
// Zdefiniuj kolor za pomocą
@color_ground: #EAE3D3;
// następnie użyj go jako
canvas
{
fill-color: @color_ground;
}
Makro wstawia swój tekst bez zmian, więc może zawierać część wyrażenia:
@route_band_width: zlinear(13, 5pt, 7pt, 9pt, 11pt);
line|z13- {
outline-width: eval(@route_band_width);
}
Makro, którego wartość zaczyna się od eval(, jest obliczane raz, podczas wczytywania stylu.
Warunki
@if
Sprawdza parametr i dołącza blok do stylu albo go pomija:
@if Theme == Dark
@import "colors_dark.mapcss";
@else // Kolory domyślne
@import "colors.mapcss";
@endif
Warunek może porównywać parametr za pomocą ==, !=, <, >, <= lub >=. Wartość to pojedyncze słowo złożone z liter, cyfr i _. Parametr bez porównania sprawdza, czy jest włączony; ! sprawdza, czy jest wyłączony:
@if Food
// pokazywane, gdy przełącznik Restauracje i kawiarnie jest włączony
@endif
@if !Food
// pokazywane, gdy jest wyłączony
@endif
Guru Maps używa następujących parametrów preprocesora:
- Theme {Light, Dark} — bieżący motyw aplikacji. W ciemnym motywie czysta biel
#FFFFFFw ikonach staje się ciemnoszara; użyj#FEFEFEdla bieli, która ma pozostać biała. - Style {City, Outdoor} — bieżący styl mapy,
- SubStyle {Hike, Bike, Ski, Car}
- Hike, Bike i Ski są ustawiane przez warianty mapy Outdoor do pieszych wędrówek, jazdy na rowerze i narciarstwa,
- Car jest ustawiany podczas nawigacji samochodowej, przy dowolnym stylu mapy.
- Przełączniki z ustawień Obiekty mapy:
AllShops,Bar,Beauty,BuildingName,CityService,Culture,Education,Entertaiment,Financial,Food,Hotel,Medical,PistesAndLifts,Postal,PublicTransport,Railway,Shop,Sport. Przełącznik ma wartość1, gdy jest włączony, i0, gdy jest wyłączony. Podczas nawigacji samochodowej wszystkie przełączniki pozaBuildingNamesą wyłączone.
@else
Określa blok kodu wykonywany, gdy pierwszy warunek jest fałszywy.
@elif
Zawiera warunek sprawdzany, jeśli wcześniejsze warunki nie zostały spełnione.
@endif
Zamyka blok bieżącego warunku.
Komentarze
// zamienia w komentarz resztę wiersza, a /* i */ obejmują komentarz złożony z kilku wierszy.
Parametry rysowania
Te parametry określają sposób rysowania obiektów na mapie.
Wartości parametrów
Szerokość
Grubość linii, czyli width, można podać w pikselach 1px, punktach 2pt, metrach 3m albo obliczyć za pomocą wyrażenia, np. eval( zlinear( 13, 1px,1pt,max(2pt, 4m)) );. Więcej informacji znajduje się w sekcji o wyrażeniach. Zawsze podawaj jednostkę: liczba bez jednostki jest mierzona w wewnętrznych jednostkach mapy.
Kolor
Kolor można zapisać jako #RGB, #RRGGBB, #RRGGBBAA albo podać jego nazwę z listy kolorów CSS.
fill-color, casing-color, dashes-color, text-color i font-stroke-color przyjmują wyłącznie kolor. color, icon-tint, outline-color, shield-color i shield-text-color przyjmują także wyrażenie.
Tekst i cudzysłowy
Apostrofy i cudzysłowy znaczą to samo. Nie ma znaków ucieczki, więc tekst nie może zawierać znaku, w który jest ujęty: "McDonald's" zapisz w cudzysłowach, a 'say "hi"' w apostrofach. Przykłady na tej stronie używają cudzysłowów.
Wewnątrz eval() każdy tekst umieszczaj w cudzysłowach. Nazwa tagu złożona wyłącznie z łacińskich liter i cyfr działa bez nich, więc tag(name) to to samo co tag("name"), ale nazwa z : lub _ wymaga cudzysłowów: tag("addr:street"). Liczby z jednostkami, takie jak 2pt, oraz kolory, takie jak #808080, zapisuje się bez cudzysłowów. W tym przykładzie paleta to jeden tekst, relationTag("colour") odczytuje tag, a #808080 jest kolorem:
color: eval(mapColor("red #E53935, green #43A047, blue #1E88E5", relationTag("colour"), #808080));
Poza eval() cudzysłowy są opcjonalne: wartość parametru to tekst do ;, więc icon-image: tree.svg; i icon-image: "tree.svg"; są równoważne. Spacje na początku i na końcu wartości są pomijane, nawet w cudzysłowach. @import działa tak samo.
W filtrach tagów ujmij w cudzysłowy wartość, która zawiera apostrof, cudzysłów lub ] albo zaczyna się lub kończy spacją: [name="McDonald's"], [ref^="B "]. Nazwy tagów w filtrach i wartości w warunkach @if nigdy nie przyjmują cudzysłowów.
Nawet w cudzysłowach wartość nie może zawierać ;, { ani }, które kończą parametr lub otwierają blok, //, które zaczyna komentarz, ani @, które zaczyna makro.
Następna wersja Guru Maps znosi te ograniczenia. Ukośnik wsteczny będzie poprzedzał cudzysłów, który ma być częścią tekstu (\", \', \\), znaki ;, {, }, // i @ staną się zwykłymi znakami wewnątrz cudzysłowu, a wartość w cudzysłowie zachowa swoje spacje.
Liczby i przełączniki
text-priority, icon-scale, icon-offset-x, icon-offset-y i z-index przyjmują zwykłą liczbę, a nie wyrażenie. Przełączniki, takie jak text-allow-overlap, przyjmują true lub false.
Parametry kolejności rysowania
layer
Numer warstwy służy do rozdzielania różnych poziomów na mapie.
// dla każdego obiektu ze znacznikiem „layer” ustaw właściwość „layer” na wartość znacznika
*|z9-[layer] {
layer: eval(tag("layer"));
}
z-index
z-index określa kolejność rysowania obiektów tego samego typu w obrębie warstwy.
area|z10-[natural=wood] {
z-index: -3;
fill-color: @color_wood;
}
area[natural=oceanwater] {
z-index: -2;
fill-color: @color_water;
}
Parametry wielokątów
fill-color
Kolor wypełnienia wielokąta.
area|z5-[natural=water] {
fill-color: @color_water;
}
fill-image
Obraz wypełniający wielokąt.
// obraz wypełnienia obszaru wojskowego wyświetlanego nad innymi obiektami
area|z11- {
[landuse=military],
[military=danger_area] {
z-index: 2;
fill-image:"forbiddenArea.png";
}
}
fill-image obsługuje osadzony styl z danymi base64.
// tak samo jak arrow.svg
fill-image: eval(data("PHN2ZyB3aWR0aD0iMTI4IiBoZWlnaHQ9IjgiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTI2IDNoMTBWMWw1IDMtNSAzVjVIMjZ6IiBmaWxsPSIjMDAwIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIG9wYWNpdHk9Ii40Ii8+PC9zdmc+Cg=="));
color i width dla wielokąta
Kolor i szerokość obrysu wielokąta.
area|z15-[building] {
z-index: 3;
width: 1px;
color: @color_landuse_residential_stroke;
}
Parametry linii
color i width dla linii
Kolor i szerokość linii.
line|z13-[natural=tree_row] {
width: 3pt;
color: @color_wood;
z-index: -10;
}
casing-color i casing-width
Kolor i szerokość obwódki linii, używane głównie dla dróg. Obwódka jest dodawana po każdej stronie linii, więc wymaga także width.
line|z8-[highway=motorway],
line|z11-[highway=motorway_link] {
color: @color_motorway;
casing-color: @color_motorway_casing;
casing-width: 0.5pt;
}
dashes
Określa kolejno długości rysowanych i pustych odcinków. Użyj do 8 liczb o sumie mniejszej niż 64. Każda liczba oznacza długość odcinka linii w punktach.
line|z15-[highway=cycleway] {
dashes: 2,2,2,2;
dashes-color: @color_cycleway_dashes;
}
dashes-color i dashes-width
Kolor i szerokość kresek używanych dla szlaków, ścieżek, schodów i granic. Kreski są rysowane tylko wtedy, gdy ustawione są wszystkie trzy parametry: dashes, dashes-color i dashes-width.
line|z15-[highway=steps] {
dashes-color: @color_footway_dashes;
dashes-width: eval( zlinear( 16, 3pt, 4pt ) );
}
linecap
Kształt zakończeń linii. Dostępne wartości: none, square, round.
linejoin
Kształt połączeń linii. Dostępne wartości: round, bevel.
outline-color i outline-width
Druga linia rysowana wzdłuż linii lub obrysu wielokąta, na przykład półprzezroczysty pas pod trasą. W odróżnieniu od obwódki, kontur nie zależy od width: outline-width to jego pełna szerokość.
Półprzezroczysty kontur oznacza szlak turystyczny szerokim pasem, a ścieżka pozostaje przez niego widoczna:
relation[type=route][route=hiking] {
line|z13- {
outline-width: 7pt;
outline-color: #1E88E570; // półprzezroczysty niebieski
}
}
offset
Przesuwa linię na bok: wartości dodatnie w lewo względem kierunku drogi, ujemne w prawo. Przesunięcie dotyczy linii, jej obwódki, konturu i kresek. Najczęściej używa się go z per-relation, aby rysować obok siebie kilka tras na jednym odcinku drogi; zobacz przykład poniżej.
per-relation
per-relation: true rysuje odcinek drogi osobno dla każdej relacji, do której należy, z parametrami tej relacji. Razem z offset i funkcją relationSlot pozwala rysować obok siebie trasy, które dzielą ten sam odcinek drogi:
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));
}
}
Parametry tekstu
text
Tekst rysowany obok punktu albo wyśrodkowany na linii lub wielokącie.
node,area|z2-8[place=country] {
text: eval(locTag("name"));
// pominięto pozostałe parametry
}
font-weight
Grubość kroju pisma. Dostępne wartości: 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 lub italic. Dla pogrubionego tekstu użyj font-weight.
Na mapach nazwy wód tradycyjnie składa się kursywą, co odróżnia je od nazw miejscowości:
line|z15-[waterway=river] {
text: eval(locTag("name"));
font-style: italic;
text-color: #0F4F80;
}
font-size
Rozmiar czcionki w punktach. Rozmiar może zmieniać się wraz z powiększeniem; podaj zwykłe liczby w zlinear, a tekst będzie rósł płynnie:
node|z10-[place=city] {
font-size: eval(zlinear(10, 13, 14, 15));
}
font-stroke-width i font-stroke-color
Szerokość i kolor obrysu czcionki. Szerokość może być wyrażeniem.
text-color
Kolor tekstu.
node,area|z2-8[place=country] {
text: eval(locTag("name"));
text-color: @color_name_text;
text-priority: 10;
// pominięto pozostałe znaczniki
}
text-letter-spacing
Dodatkowy odstęp między literami, w ułamkach rozmiaru czcionki: 0.1 dodaje jedną dziesiątą rozmiaru czcionki. Może zmieniać się wraz z powiększeniem za pomocą zlinear.
Rozstrzelone wersaliki odróżniają nazwy regionów od nazw miast. Wraz z przybliżaniem mapy litery się rozsuwają, a nazwa obejmuje coraz większą część swojego regionu:
node|z6-[place=state] {
text: eval(uppercase(locTag("name")));
text-letter-spacing: eval(zlinear(6, 0.1, 0.18, 0.25));
}
text-priority
Gdy etykiety konkurują o miejsce, text-priority określa, który tekst pojawi się jako pierwszy.
text-allow-overlap
Pozwala etykietom nakładać się na siebie, dzięki czemu kilka tekstów może zajmować ten sam obszar.
text-big-padding
Rezerwuje dwukrotnie większy odstęp wokół tekstu. Używaj tego parametru dla dużych miejscowości (miast, przedmieść itd.), aby etykiety nie zasłaniały mapy.
Parametry ikon
icon-image
Nazwa obrazu wyświetlanego w punkcie albo na środku wielokąta.
node,area|z17-[amenity=library] {
icon-image: "library.svg";
icon-scale: 0.37;
icon-tint: @color_icon_tint;
}
icon-image obsługuje osadzony styl z danymi base64.
// tak samo jak poi_circle_small.svg
icon-image: eval(data("PHN2ZyB3aWR0aD0iOCIgaGVpZ2h0PSI4IiB2aWV3Qm94PSIwIDAgOCA4IiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8cGF0aCBkPSJNNyA0QzcgNS42NTY4NSA1LjY1Njg1IDcgNCA3QzIuMzQzMTUgNyAxIDUuNjU2ODUgMSA0QzEgMi4zNDMxNSAyLjM0MzE1IDEgNCAxQzUuNjU2ODUgMSA3IDIuMzQzMTUgNyA0WiIgZmlsbD0iIzgwODA4MCIvPgo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTggNEM4IDYuMjA5MTQgNi4yMDkxNCA4IDQgOEMxLjc5MDg2IDggMCA2LjIwOTE0IDAgNEMwIDEuNzkwODYgMS43OTA4NiAwIDQgMEM2LjIwOTE0IDAgOCAxLjc5MDg2IDggNFpNNCA3QzUuNjU2ODUgNyA3IDUuNjU2ODUgNyA0QzcgMi4zNDMxNSA1LjY1Njg1IDEgNCAxQzIuMzQzMTUgMSAxIDIuMzQzMTUgMSA0QzEgNS42NTY4NSAyLjM0MzE1IDcgNCA3WiIgZmlsbD0id2hpdGUiLz4KPC9zdmc+Cg=="));
icon-fallback
Mniejszy obraz pokazywany zamiast icon-image, gdy ikona nie mieści się na mapie, na przykład kropka zamiast logo sklepu. Na ruchliwej ulicy miejsce pozostaje na mapie, a jego logo pojawia się po przybliżeniu:
node|z16-[brand:wikidata=Q38076] {
icon-image: "logo_mcdonalds.svg";
icon-fallback: "poi_circle_small.svg";
}
icon-scale
Skaluje obraz tak, aby był większy lub mniejszy od oryginału.
icon-tint
icon-tint zmienia kolor obrazu. #FFF pozostaje białe, #CCC przyjmuje jaśniejszy odcień wybranego koloru, #888 odpowiada kolorowi docelowemu, #444 staje się jego ciemniejszym odcieniem, a #000 pozostaje czarne. Między tymi punktami kolory przechodzą płynnie.
icon-offset-x i icon-offset-y
Przesuwają obraz względem punktu zakotwiczenia. Domyślnie obraz jest wyśrodkowany na punkcie mapy. Na przykład icon-offset-y: 0; wyrównuje dolną krawędź ikony pinezki z punktem docelowym. Wartości mieszczą się w zakresie od 0 do 1, gdzie 0 oznacza dolną lub lewą krawędź, a 1 — górną lub prawą.
image-allow-overlap
Pozwala ikonom nakładać się na siebie.
Parametry tablic drogowych
Tablica pokazuje numer drogi na płytce wzdłuż drogi. Jest rysowana na liniach, gdy ustawione są zarówno shield-image, jak i shield-text.
Tablice w kolorach znaków drogowych danego kraju pozwalają od razu odróżnić drogi główne od lokalnych. Na Białorusi na przykład numery dróg głównych są białe na czerwonym tle, a lokalnych ciemne na białym:
line|z11-[highway=primary][ref] {
shield-image: "shield.svg";
shield-text: eval(listItem(tag("ref"), 0)); // pierwszy numer z "М1;E30"
shield-color: #005387;
[ref^=М], [ref^=Р] {
shield-color: #C1121C;
}
[ref^=Н] {
shield-image: "shield_plate.svg";
shield-color: #FEFEFE;
}
}
shield-image
Obraz płytki.
shield-text
Tekst na płytce, zwykle numer drogi.
shield-color
Koloruje obraz płytki tak samo jak icon-tint.
shield-text-color
Kolor tekstu. Bez niego tekst jest ciemny na jasnych płytkach i biały na ciemnych.
shield-fit
Sposób dopasowania płytki do tekstu. stretch (domyślnie) rozciąga środek obrazu do szerokości tekstu i zachowuje jego końce. fixed zachowuje obraz w oryginalnej postaci i poszerza go tylko wtedy, gdy tekst się nie mieści; używaj go dla płytek o określonym kształcie, takich jak amerykańskie znaki drogowe. Aby zachować własne kolory obrazu, ustaw shield-color: #00000000.
Trasy w Kalifornii są numerowane w kółku przy dwóch cyfrach i w elipsie przy trzech. Numer następuje po prefiksie sieci, jak w 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;
}
Parametry szczegółów
Użyj details-text i details-description, aby ustawić nazwę i opis obiektów GeoJSON. Wartość details-text jest wyświetlana jako tytuł, a details-description jako opis. Jeśli obie wartości są puste, dotknięcia obiektu są ignorowane. W tych parametrach można używać wyrażeń.
* {
details-text: eval(tag("name"));
details-description: eval(tag("description"));
}
details-enabled: false sprawia, że dotknięcia obiektu nic nie robią: Guru Maps nie otwiera jego szczegółów. Relacja z tym parametrem, na przykład trasa, również nie pojawia się wśród tras dotkniętego odcinka drogi. Używaj go dla obiektów, które nie mają nic do powiedzenia:
node|z15-[amenity=hunting_stand] {
icon-image: "poi_hunting_stand.svg";
details-enabled: false;
}
Wyrażenia
Filtry i parametry rysowania mogą zależeć od czynników zewnętrznych, być obliczane za pomocą wzorów albo zmieniać się wraz z poziomem powiększenia.
Obliczane wartości muszą zawsze rozpoczynać się od funkcji eval().
Funkcje
Wewnątrz można używać następujących funkcji:
min i max
Zwracają najmniejszą albo największą wartość spośród parametrów. Liczba parametrów nie jest ograniczona.
any
Zwraca pierwszą wartość parametrów różną od null. Można przekazać dowolną liczbę argumentów.
data
Dekoduje ciąg base64. Może być używana przez icon-image i fill-image.
tag
Zwraca wartość wskazanego znacznika albo null, jeśli znacznik nie istnieje.
locTag
Zwraca zlokalizowaną wartość znacznika zgodnie z ustawieniami języka użytkownika. Jeśli preferowane języki to na przykład angielski, rosyjski i język ojczysty, locTag("name") sprawdza kolejno name:en, name:ru i name, a następnie używa pierwszej znalezionej wartości. Guru Maps obsługuje ar, be, cs, da, de, en, es, fr, it, ja, ko, nl, pl, pt, ru, sv, uk, zh. Dla tych języków używaj locTag(), a dla pozostałych wywołuj bezpośrednio tag().
relationTag
Zwraca wartość znacznika relacji, do której należy obiekt, na przykład kolor trasy: relationTag("colour"). Z per-relation odczytuje relację, która jest właśnie rysowana.
relationSlot
Z per-relation zwraca pozycję relacji wśród tras rysowanych na odcinku drogi, wyśrodkowaną na 0: -0.5 i 0.5 dla dwóch tras, -1, 0 i 1 dla trzech. Pomnóż ją przez szerokość linii, aby za pomocą offset ułożyć trasy obok siebie, jak w przykładzie przy per-relation.
listItem
Zwraca element listy, licząc od 0. Elementy są rozdzielone znakiem ; albo znakiem podanym w trzecim parametrze.
shield-text: eval(listItem(tag("ref"), 0)); // "E 50" for "E 50;E 65"
color: eval(listItem(tag("osmc:symbol"), 0, ":")); // "red" for "red:white:red_bar"
length
Zwraca liczbę znaków tekstu, na przykład aby wybrać szerszą płytkę dla trzycyfrowego numeru drogi, jak w przykładzie przy shield-fit.
uppercase, lowercase i capitalize
Zmieniają wielkość liter tekstu. Opcjonalny drugi parametr to język, według którego stosowane są reguły wielkości liter, na przykład uppercase(locTag("name"), "el").
mapColor
Wybiera kolor z palety. Pierwszy parametr to paleta, "name color, name color, ..."; drugi to wartość do wyszukania; opcjonalny trzeci to wynik, gdy wartość jest pusta. Nazwa koloru z palety zwraca jej kolor; każdy inny kolor zwraca najbliższy kolor z palety.
color: eval(mapColor("red #E53935, green #43A047, blue #1E88E5", relationTag("colour"), #808080));
formatElevation
Formatuje wysokość w metrach jako 1234 m lub w stopach, zgodnie z jednostkami wybranymi w aplikacji. Szczyt jest opisany nazwą i wysokością, a gdy nie ma nazwy, samą wysokością:
node|z13-[natural=peak] {
text: eval(cond(locTag("name"),
cond(tag("ele"), locTag("name") . " " . formatElevation(tag("ele")), locTag("name")),
formatElevation(tag("ele"))));
}
cond
Oblicza wyrażenie logiczne. Jeśli pierwszy argument jest prawdziwy, funkcja zwraca drugi argument; w przeciwnym razie zwraca trzeci.
// sprawdź addr:housenumber
text: eval( cond( tag("addr:housenumber"),
// jeśli istnieje addr:housenumber, dołącz następny warunek
tag("addr:housenumber") . cond( any( locTag("name"), tag("addr:housename") ),
// jeśli istnieje name lub addr:housename, umieść wartość w nawiasach ()
" (" . any( locTag("name"), tag("addr:housename") ) . ")",
// w przeciwnym razie użyj pustego ciągu
""),
// jeśli nie ma housenumber, użyj dowolnej wartości z name lub addr:housename
any( locTag("name"), tag("addr:housename") ) ) );
boolean
Konwertuje wartość na typ logiczny. Jeśli wartość nie istnieje albo jest równa 0, No, Off lub False (bez rozróżniania wielkości liter), funkcja zwraca false; w przeciwnym razie zwraca true.
zlinear
Płynnie zmienia wartość wraz ze zmianą powiększenia. Pierwszy parametr to początkowy poziom powiększenia, a po nim podawane są wartości dla kolejnych poziomów.
line|z13-[highway=residential] {
width: eval( zlinear( 13, 1px, 1pt, max(2pt, 4m) ) );
color: @color_small_road;
linecap: round;
}
W tym przykładzie szerokość drogi wynosi 1 piksel na 13. poziomie powiększenia, 1 punkt na poziomie 14., a na poziomie 15. i wyższych — większą z wartości: 2 punkty lub 4 metry.
metric
Przelicza parametr liczbowy na metry.
line|z12-[highway=tertiary] {
width: eval( zlinear( 12, 1px, 1pt, 1pt, max(3pt, metric(any(tag("lanes"),2)*2)) ));
}
W tym przykładzie liczba pasów jest mnożona przez 2, co daje odległość w metrach. max(3pt, metric()) zwraca większą wartość: szerokość w metrach albo szerokość w punktach.
Operatory wyrażeń
Wyrażenia obsługują operatory matematyczne +, -, *, /, operator łączenia ciągów ., operator równości == oraz ~=, który sprawdza, czy tekst zawiera podciąg.