Стиль карти
Файл стилю 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]
Він складається з трьох частин:
- Фільтр типу
node,area.nodeпозначає точки,line— лінії,area— полігони. Кілька типів розділяються комами, а*означає будь-який тип.canvasвибирає тло карти. - Фільтр масштабу
z14-. Він задає рівні, на яких діє правило. Можна зазначити лише мінімальний рівеньz8-, лише максимальнийz-9, один рівеньz12або діапазон, наприкладz3-9. Обидва кінці діапазону включено:z3-9діє на рівнях від 3 до 9. - Фільтри тегів
[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()) повертає більше з двох значень: ширину в метрах або пунктах.
Оператори виразів
Вирази підтримують математичні оператори +, -, *, /, оператор з’єднання рядків ., оператор рівності == та ~=, який перевіряє, чи містить текст підрядок.