Перейти до основного вмісту

Стиль карти

Файл стилю MapCSS складається з правил, які послідовно згори вниз застосовуються до кожного об’єкта.

Наприклад, стиль:

node[natural=tree] {
icon-image: "tree.svg";
}

покаже зображення tree.svg для точок, у яких тег natural має значення tree.

Кожне правило має дві частини: фільтр node[natural=tree] і параметри малювання icon-image: tree.svg;. Фільтр визначає, до яких об’єктів застосовуються параметри.

Правила можна вкладати одне в одне й задавати параметри на кожному рівні:

|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";
}
}

Вкладені правила роблять стиль коротшим і структурованішим: спільні параметри задаються один раз, а не повторюються в кожному блоці.

Ця документація описує діалект MapCSS, який використовує Guru Maps. Деякі параметри малювання з оригінального MapCSS не реалізовано, натомість доступні макроси препроцесора, вкладені правила й додаткові функції для обчислень. Стиль Guru Maps міститься в репозиторії.

Фільтри​

Розгляньмо складний фільтр:

node,area|z14-[boundary=forest_compartment][ref]

Він складається з трьох частин:

  1. Фільтр типу node,area. node позначає точки, line — лінії, area — полігони. Кілька типів розділяються комами, а * означає будь-який тип. canvas вибирає тло карти.
  2. Фільтр масштабу z14-. Він задає рівні, на яких діє правило. Можна зазначити лише мінімальний рівень z8-, лише максимальний z-9, один рівень z12 або діапазон, наприклад z3-9. Обидва кінці діапазону включено: z3-9 діє на рівнях від 3 до 9.
  3. Фільтри тегів [boundary=forest_compartment][ref]. Залишаються лише об’єкти, де boundary дорівнює forest_compartment, а ref має будь-яке значення. Щоб вибрати об’єкти без тегу ref, використовуйте [!ref].

Кожна частина необов’язкова. Фільтр масштабу може стояти окремо, як |z16- у прикладі вище.

Фільтри тегів​

ФільтрЗалишає об’єкти, де
[ref]тег ref є
[!ref]тегу ref немає
[highway=primary]значення дорівнює primary
[highway!=primary]значення не дорівнює primary
[population>100000]значення більше; <, >= і <= працюють так само
[ele%100]значення кратне 100
[ref^=E]значення починається з E
[name$=Street]значення закінчується на Street
[name*=Park]значення містить Park
[cuisine~=pizza]pizza є одним зі значень, розділених ;, як у pizza;burger

Порівняння >, <, >= і <= порівнюють числа, якщо обидва значення є числами, і текст в інших випадках.

Беріть значення в подвійні лапки, якщо воно містить апостроф, лапку або ], а також якщо воно починається чи закінчується пробілом:

[name="McDonald's"],
[ref^="B "] {
icon-image: "logo.svg";
}

Значення в лапках не може містити {, }, ;, @ і //.

Групування фільтрів​

Кілька фільтрів можна розділити комою:

node,area|z14-[boundary=forest_compartment][ref],
node,area|z14-[boundary=forestry_compartment][ref]

Спільні параметри в цьому прикладі можна винести на вищий рівень:

node,area|z14-[ref] {
[boundary=forest_compartment],
[boundary=forestry_compartment] {

}
}

Щоб об’єднати кілька фільтрів у групу без негайного відкриття блоку правила, обгорніть їх круглими дужками ( і ):

node,area|z14-[ref](
[boundary=forest_compartment],
[boundary=forestry_compartment]) {
}

Фільтр масштабу може стосуватися цілої групи:

|z11-([highway=trunk], [highway=primary]) {
shield-image: "shield.svg";
}

Фільтри відношень​

relation[...] вибирає об’єкти, що належать до відношення із заданими тегами. Наприклад, відрізки пішохідних маршрутів:

relation[type=route][route=hiking] {
line|z9- {
color: #0000ff80;
width: 2pt;
}
}

Функція relationTag читає теги цього відношення, а per-relation малює відрізок один раз для кожного з його відношень.

Макроси препроцесора​

Препроцесор підставляє значення та вмикає або вимикає блоки відповідно до налаштувань перед розбором стилю.

Макроси підстановки​

@import​

Вставляє вміст заданого файлу:

@import "polygons.mapcss";

@\{name\}​

Вставляє значення макросу в місці його використання:

// Визначаємо колір
@color_ground: #EAE3D3;

// Потім використовуємо його так
canvas
{
fill-color: @color_ground;
}

Макрос вставляє свій текст як є, тож він може містити частину виразу:

@route_band_width: zlinear(13, 5pt, 7pt, 9pt, 11pt);

line|z13- {
outline-width: eval(@route_band_width);
}

Макрос, значення якого починається з eval(, обчислюється один раз, під час завантаження стилю.

Умови​

@if​

Перевіряє параметр і додає або виключає блок зі стилю:

@if Theme == Dark
@import "colors_dark.mapcss";
@else // Стандартні кольори
@import "colors.mapcss";
@endif

Умова може порівнювати параметр зі значенням через ==, !=, <, >, <= або >=. Значення — це одне слово з літер, цифр і _. Параметр без порівняння перевіряє, що він увімкнений; ! перевіряє, що він вимкнений:

@if Food
// Показується, коли перемикач «Ресторани, кав'ярні, бістро» увімкнено
@endif
@if !Food
// Показується, коли його вимкнено
@endif

Guru Maps передає препроцесору такі параметри:

  • Theme {Light, Dark} — поточна тема застосунку. У темній темі чисто білий #FFFFFF у значках стає темно-сірим; щоб білий залишився білим, використовуйте #FEFEFE;
  • Style {City, Outdoor} — поточний стиль карти;
  • SubStyle {Hike, Bike, Ski, Car}:
    • Hike, Bike і Ski задаються варіантами карти Outdoor для піших, велосипедних і лижних активностей;
    • Car задається під час навігації автомобілем, з будь-яким стилем карти;
  • перемикачі з розділу Об'єкти на карті в налаштуваннях: AllShops, Bar, Beauty, BuildingName, CityService, Culture, Education, Entertaiment, Financial, Food, Hotel, Medical, PistesAndLifts, Postal, PublicTransport, Railway, Shop, Sport. Перемикач дорівнює 1, коли він увімкнений, і 0, коли вимкнений. Під час навігації автомобілем усі перемикачі, крім BuildingName, вимкнені.

@else​

Задає блок коду, який виконується, якщо перша умова хибна.

@elif​

Містить наступну умову, яка перевіряється, якщо попередні не спрацювали.

@endif​

Закриває поточний умовний блок.

Коментарі​

// коментує решту рядка, а /* і */ обрамляють коментар з кількох рядків.

Параметри малювання​

Ці параметри визначають, як об’єкти виглядають на карті.

Значення параметрів​

Ширина​

Товщину лінії width можна задати в пікселях 1px, пунктах 2pt, метрах 3m або обчислити виразом, наприклад eval( zlinear( 13, 1px,1pt,max(2pt, 4m)) );. Докладніше дивіться в розділі про вирази. Завжди вказуйте одиницю: число без одиниці вимірюється у внутрішніх одиницях карти.

Колір​

Колір задається як #RGB, #RRGGBB, #RRGGBBAA або назвою з переліку кольорів CSS.

fill-color, casing-color, dashes-color, text-color і font-stroke-color приймають лише колір. color, icon-tint, outline-color, shield-color і shield-text-color приймають також вираз.

Текст і лапки​

Одинарні й подвійні лапки означають те саме. Екранування немає, тому текст не може містити лапку того виду, якою він обрамлений: пишіть "McDonald's" у подвійних лапках і 'say "hi"' в одинарних. У прикладах на цій сторінці використано подвійні лапки.

Усередині eval() кожен текст беріть у лапки. Назва тега, що складається лише з латинських літер і цифр, працює й без них, тож tag(name) — те саме, що tag("name"), але назва з : або _ потребує лапок: tag("addr:street"). Числа з одиницями, як-от 2pt, і кольори, як-от #808080, пишуть без лапок. У цьому прикладі палітра — один текст, relationTag("colour") читає тег, а #808080 — колір:

color: eval(mapColor("red #E53935, green #43A047, blue #1E88E5", relationTag("colour"), #808080));

Поза eval() лапки необов’язкові: значення параметра — це текст до ;, тож icon-image: tree.svg; і icon-image: "tree.svg"; рівнозначні. Пробіли на початку й у кінці значення відкидаються, навіть у лапках. @import працює так само.

У фільтрах тегів значення, що містить апостроф, лапку або ], чи починається або закінчується пробілом, беріть у лапки: [name="McDonald's"], [ref^="B "]. Назви тегів у фільтрах і значення в умовах @if лапок не потребують.

Навіть у лапках значення не може містити ;, { або }, які завершують параметр чи відкривають блок, //, що починає коментар, і @, що починає макрос.

Незабаром

У наступній версії Guru Maps цих обмежень не буде. Зворотна скісна риска екрануватиме лапку (\", \', \\), ;, {, }, // і @ стануть звичайними символами всередині лапок, а значення в лапках збереже свої пробіли.

Числа та перемикачі​

text-priority, icon-scale, icon-offset-x, icon-offset-y і z-index приймають просте число, а не вираз. Перемикачі, як-от text-allow-overlap, приймають true або false.

Параметри порядку малювання​

layer​

Номер шару розділяє різні рівні об’єктів на карті.

// Для кожного об’єкта з тегом 'layer' задаємо властивості 'layer' значення цього тегу
*|z9-[layer] {
layer: eval(tag("layer"));
}

z-index​

z-index задає порядок малювання об’єктів одного типу в межах шару.

area|z10-[natural=wood] {
z-index: -3;
fill-color: @color_wood;
}

area[natural=oceanwater] {
z-index: -2;
fill-color: @color_water;
}

Параметри полігонів​

fill-color​

Колір заповнення полігона.

area|z5-[natural=water] {
fill-color: @color_water;
}

fill-image​

Зображення для заповнення полігона.

// Зображення заливки військової зони, яке відображається поверх інших об’єктів
area|z11- {
[landuse=military],
[military=danger_area] {
z-index: 2;
fill-image:"forbiddenArea.png";
}
}

fill-image підтримує вбудований стиль із даними base64.

// Те саме, що arrow.svg
fill-image: eval(data("PHN2ZyB3aWR0aD0iMTI4IiBoZWlnaHQ9IjgiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTI2IDNoMTBWMWw1IDMtNSAzVjVIMjZ6IiBmaWxsPSIjMDAwIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIG9wYWNpdHk9Ii40Ii8+PC9zdmc+Cg=="));

color і width для полігона​

Колір і ширина межі полігона.

area|z15-[building] {
z-index: 3;
width: 1px;
color: @color_landuse_residential_stroke;
}

Параметри ліній​

color і width для лінії​

Колір і ширина лінії.

line|z13-[natural=tree_row] {
width: 3pt;
color: @color_wood;
z-index: -10;
}

casing-color і casing-width​

Колір і ширина зовнішнього контуру лінії, найчастіше дороги. Контур додається з кожного боку лінії, тому потрібен також width.

line|z8-[highway=motorway],
line|z11-[highway=motorway_link] {
color: @color_motorway;
casing-color: @color_motorway_casing;
casing-width: 0.5pt;
}

dashes​

Задає довжини намальованих і порожніх відрізків по черзі. Використовуйте до 8 чисел із сумою менше 64. Кожне число — довжина відрізка в пунктах.

line|z15-[highway=cycleway] {
dashes: 2,2,2,2;
dashes-color: @color_cycleway_dashes;
}

dashes-color і dashes-width​

Колір і ширина штрихів для стежок, доріжок, сходів та меж. Штрихи малюються, лише коли задано всі три параметри: dashes, dashes-color і dashes-width.

line|z15-[highway=steps] {
dashes-color: @color_footway_dashes;
dashes-width: eval( zlinear( 16, 3pt, 4pt ) );
}

linecap​

Форма кінців лінії. Можливі значення: none, square, round.

linejoin​

Форма з’єднань лінії. Можливі значення: round, bevel.

outline-color і outline-width​

Друга лінія вздовж лінії або межі полігона, наприклад напівпрозора смуга під маршрутом. На відміну від зовнішнього контуру, обведення не залежить від width: outline-width — це його повна ширина.

Напівпрозоре обведення позначає туристичний маршрут широкою смугою, і стежка залишається видимою крізь неї:

relation[type=route][route=hiking] {
line|z13- {
outline-width: 7pt;
outline-color: #1E88E570; // напівпрозорий синій
}
}

offset​

Зсуває лінію вбік: додатні значення — ліворуч від напрямку відрізка, від’ємні — праворуч. Зсув стосується лінії, її зовнішнього контуру, обведення та штрихів. Здебільшого його використовують разом із per-relation, щоб малювати кілька маршрутів на одному відрізку поруч; див. приклад нижче.

per-relation​

per-relation: true малює відрізок один раз для кожного відношення, до якого він належить, з параметрами цього відношення. Разом з offset і функцією relationSlot це дає змогу малювати маршрути, що ділять один відрізок, поруч:

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));
}
}

Параметри тексту​

text​

Текст біля точки або по центру лінії чи полігона.

node,area|z2-8[place=country] {
text: eval(locTag("name"));
// Інші параметри пропущено
}

font-weight​

Товщина шрифту. Можливі значення: 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 або italic. Для жирного тексту використовуйте font-weight.

На картах назви водойм традиційно набирають курсивом, щоб відрізнити їх від назв населених пунктів:

line|z15-[waterway=river] {
text: eval(locTag("name"));
font-style: italic;
text-color: #0F4F80;
}

font-size​

Розмір шрифту в пунктах. Розмір може змінюватися разом із масштабом; пишіть у zlinear прості числа, і текст зростатиме плавно:

node|z10-[place=city] {
font-size: eval(zlinear(10, 13, 14, 15));
}

font-stroke-width і font-stroke-color​

Ширина й колір обведення шрифту. Ширина може бути виразом.

text-color​

Колір тексту.

node,area|z2-8[place=country] {
text: eval(locTag("name"));
text-color: @color_name_text;
text-priority: 10;
// Інші теги пропущено
}

text-letter-spacing​

Додатковий проміжок між літерами в частках розміру шрифту: 0.1 додає десяту частину розміру шрифту. Може змінюватися разом із масштабом через zlinear.

Назви регіонів, набрані великими літерами з розрядкою, відрізняються від назв міст. Коли карту наближають, літери розсуваються, і назва охоплює більшу частину свого регіону:

node|z6-[place=state] {
text: eval(uppercase(locTag("name")));
text-letter-spacing: eval(zlinear(6, 0.1, 0.18, 0.25));
}

text-priority​

Якщо написам бракує місця, text-priority визначає, який із них показати першим.

text-allow-overlap​

Дає змогу написам перекриватися, щоб кілька текстів займали одну область.

text-big-padding​

Залишає навколо тексту вдвічі більше вільного місця. Використовуйте для великих населених пунктів — міст, містечок, передмість і подібних об’єктів, — щоб написи не перекривали карту.

Параметри значків​

icon-image​

Назва зображення, яке показується в точці або в центрі полігона.

node,area|z17-[amenity=library] {
icon-image: "library.svg";
icon-scale: 0.37;
icon-tint: @color_icon_tint;
}

icon-image підтримує вбудований стиль із даними base64.

// Те саме, що poi_circle_small.svg
icon-image: eval(data("PHN2ZyB3aWR0aD0iOCIgaGVpZ2h0PSI4IiB2aWV3Qm94PSIwIDAgOCA4IiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8cGF0aCBkPSJNNyA0QzcgNS42NTY4NSA1LjY1Njg1IDcgNCA3QzIuMzQzMTUgNyAxIDUuNjU2ODUgMSA0QzEgMi4zNDMxNSAyLjM0MzE1IDEgNCAxQzUuNjU2ODUgMSA3IDIuMzQzMTUgNyA0WiIgZmlsbD0iIzgwODA4MCIvPgo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTggNEM4IDYuMjA5MTQgNi4yMDkxNCA4IDQgOEMxLjc5MDg2IDggMCA2LjIwOTE0IDAgNEMwIDEuNzkwODYgMS43OTA4NiAwIDQgMEM2LjIwOTE0IDAgOCAxLjc5MDg2IDggNFpNNCA3QzUuNjU2ODUgNyA3IDUuNjU2ODUgNyA0QzcgMi4zNDMxNSA1LjY1Njg1IDEgNCAxQzIuMzQzMTUgMSAxIDIuMzQzMTUgMSA0QzEgNS42NTY4NSAyLjM0MzE1IDcgNCA3WiIgZmlsbD0id2hpdGUiLz4KPC9zdmc+Cg=="));

icon-fallback​

Менше зображення, яке показується замість icon-image, коли для значка немає місця на карті, наприклад крапка замість логотипа магазину. На жвавій вулиці місце залишається на карті, а його логотип з’являється, коли наблизити карту:

node|z16-[brand:wikidata=Q38076] {
icon-image: "logo_mcdonalds.svg";
icon-fallback: "poi_circle_small.svg";
}

icon-scale​

Змінює розмір зображення відносно оригінального.

icon-tint​

icon-tint перефарбовує зображення: #FFF залишається білим, #CCC стає світлішим відтінком заданого кольору, #888 збігається з ним, #444 стає темнішим, а #000 залишається чорним. Між цими точками кольори змішуються плавно.

icon-offset-x і icon-offset-y​

Зсувають зображення відносно точки прив’язки. Типово центр зображення збігається з точкою на карті. Наприклад, icon-offset-y: 0; суміщає низ значка-шпильки з потрібною точкою. Значення лежать у межах від 0 до 1: 0 означає нижній або лівий край, 1 — верхній або правий.

image-allow-overlap​

Дає змогу значкам перекриватися.

Параметри дорожніх щитів​

Щит показує номер дороги на табличці вздовж дороги. Він малюється на лініях, коли задано і shield-image, і shield-text.

Щити в кольорах дорожніх знаків країни дають змогу з першого погляду відрізнити головні дороги від місцевих. У Білорусі, наприклад, номери головних доріг білі на червоному, а місцевих — темні на білому:

line|z11-[highway=primary][ref] {
shield-image: "shield.svg";
shield-text: eval(listItem(tag("ref"), 0)); // перший номер із "М1;E30"
shield-color: #005387;
[ref^=М], [ref^=Р] {
shield-color: #C1121C;
}
[ref^=Н] {
shield-image: "shield_plate.svg";
shield-color: #FEFEFE;
}
}

shield-image​

Зображення таблички.

shield-text​

Текст на табличці, зазвичай номер дороги.

shield-color​

Тонує зображення таблички так само, як icon-tint.

shield-text-color​

Колір тексту. Без нього текст темний на світлих табличках і білий на темних.

shield-fit​

Те, як табличка підлаштовується під текст. stretch (типово) розтягує середину зображення до ширини тексту й зберігає його краї. fixed залишає зображення таким, як воно намальоване, й розширює його, лише коли текст не вміщується; використовуйте для табличок із формою, як-от американські дорожні знаки. Щоб зберегти власні кольори зображення, задайте shield-color: #00000000.

Маршрути Каліфорнії нумеруються в колі для двох цифр і в еліпсі для трьох. Номер іде після префікса мережі, як-от 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;
}

Параметри подробиць​

details-text і details-description задають назву й опис об’єктів GeoJSON. Перший показується як заголовок, другий — як опис. Якщо обидва значення порожні, дотик до об’єкта ігнорується. У цих параметрах можна використовувати вирази.

* {
details-text: eval(tag("name"));
details-description: eval(tag("description"));
}

details-enabled: false робить так, що дотики до об’єкта нічого не роблять: Guru Maps не відкриває його подробиць. Відношення з ним, наприклад маршрут, також не з’являється серед маршрутів відрізка, до якого торкнулися. Використовуйте його для об’єктів, яким нічого розповісти:

node|z15-[amenity=hunting_stand] {
icon-image: "poi_hunting_stand.svg";
details-enabled: false;
}

Вирази​

Фільтри й параметри малювання можуть залежати від зовнішніх чинників, обчислюватися за формулами або змінюватися разом із масштабом.

Обчислене значення завжди має починатися з функції eval().

Функції​

Усередині доступні такі функції.

min і max​

Повертають найменше або найбільше значення серед необмеженої кількості параметрів.

any​

Повертає перше значення, яке не дорівнює null. Кількість аргументів не обмежена.

data​

Декодує рядок base64. Можна використовувати в icon-image і fill-image.

tag​

Повертає значення заданого тегу або null, якщо його немає.

locTag​

Повертає локалізоване значення тегу відповідно до мовних налаштувань користувача. Наприклад, якщо вибрано англійську, українську та місцеву мову, locTag("name") послідовно перевіряє name:en, name:uk і name, а потім використовує перше знайдене значення. Guru Maps підтримує ar, be, cs, da, de, en, es, fr, it, ja, ko, nl, pl, pt, ru, sv, uk, zh. Для цих мов використовуйте locTag(), для решти — явний виклик tag().

relationTag​

Повертає значення тегу відношення, до якого належить об’єкт, наприклад колір маршруту: relationTag("colour"). З per-relation читає відношення, яке малюється.

relationSlot​

З per-relation повертає позицію відношення серед маршрутів, намальованих на відрізку, з центром у 0: -0.5 і 0.5 для двох маршрутів, -1, 0 і 1 для трьох. Помножте її на ширину лінії, щоб за допомогою offset розмістити маршрути поруч, як у прикладі з per-relation.

listItem​

Повертає елемент списку, рахуючи від 0. Елементи розділяються ; або символом із третього параметра.

shield-text: eval(listItem(tag("ref"), 0)); // "E 50" для "E 50;E 65"
color: eval(listItem(tag("osmc:symbol"), 0, ":")); // "red" для "red:white:red_bar"

length​

Повертає кількість символів у тексті, наприклад щоб вибрати ширшу табличку для трицифрового номера дороги, як у прикладі з shield-fit.

uppercase, lowercase і capitalize​

Змінює регістр тексту. Необов’язковий другий параметр — мова, за правилами якої змінюється регістр, наприклад uppercase(locTag("name"), "el").

mapColor​

Вибирає колір із палітри. Перший параметр — палітра, "name color, name color, ..."; другий — значення для пошуку; необов’язковий третій — результат, коли значення порожнє. Назва кольору з палітри повертає цей колір; будь-який інший колір повертає найближчий колір палітри.

color: eval(mapColor("red #E53935, green #43A047, blue #1E88E5", relationTag("colour"), #808080));

formatElevation​

Форматує висоту в метрах як 1234 m або у футах відповідно до одиниць, вибраних у застосунку. Вершину підписано назвою та висотою, а якщо назви немає — лише висотою:

node|z13-[natural=peak] {
text: eval(cond(locTag("name"),
cond(tag("ele"), locTag("name") . " " . formatElevation(tag("ele")), locTag("name")),
formatElevation(tag("ele"))));
}

cond​

Обчислює логічний вираз. Якщо перший аргумент істинний, повертає другий, інакше — третій.

// Перевіряємо addr:housenumber
text: eval( cond( tag("addr:housenumber"),
// Якщо є addr:housenumber, додаємо результат наступної умови
tag("addr:housenumber") . cond( any( locTag("name"), tag("addr:housename") ),
// Якщо є name або addr:housename, додаємо його в дужках
" (" . any( locTag("name"), tag("addr:housename") ) . ")",
// Інакше використовуємо порожній рядок
""),
// Якщо housenumber немає, використовуємо name або addr:housename
any( locTag("name"), tag("addr:housename") ) ) );

boolean​

Перетворює значення на логічне. Якщо значення немає або воно дорівнює 0, No, Off чи False без урахування регістру, функція повертає false; у всіх інших випадках — true.

zlinear​

Плавно змінює значення разом із масштабом. Перший параметр — початковий рівень масштабу, далі йдуть значення для кожного наступного рівня.

line|z13-[highway=residential] {
width: eval( zlinear( 13, 1px, 1pt, max(2pt, 4m) ) );
color: @color_small_road;
linecap: round;
}

У цьому прикладі ширина дороги дорівнює 1 пікселю на рівні 13, 1 пункту на рівні 14 і найбільшому з 2 пунктів або 4 метрів на рівні 15 і вище.

metric​

Перетворює числовий параметр на метри.

line|z12-[highway=tertiary] {
width: eval( zlinear( 12, 1px, 1pt, 1pt, max(3pt, metric(any(tag("lanes"),2)*2)) ));
}

Кількість смуг у прикладі множиться на 2, що дає відстань у метрах. max(3pt, metric()) повертає більше з двох значень: ширину в метрах або пунктах.

Оператори виразів​

Вирази підтримують математичні оператори +, -, *, /, оператор з’єднання рядків ., оператор рівності == та ~=, який перевіряє, чи містить текст підрядок.