Перейти к основному содержимому

Стиль карты

Файл стиля состоит из правил, которые применяются к каждому объекту сверху-вниз.

Например стиль:

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

Вложенные правила делают стиль лаконичным, с четко видной структурой. Так общие параметры можно установить заранее и не копировать по нескольку раз.

Эта документация описывает стиль карты, используемый в приложении Guru Maps. Изначально он был похож на MapCSS, но по мере разработки приложения и усложнения стиля было решено добавить в него некоторые уникальные черты. Была добавлена вложенность правил, команды препроцессора для подстановки и условий, добавлены новые функций для вычисляемых операций. В то же время часть параметров прорисовки и функций из спецификации MapCSS не была реализована.

Стиль и иконки, используемые в Guru Maps, вы можете найти в публичном репозитории https://github.com/GuruMaps/MapStyle.

Фильтры​

Рассмотрим сложный фильтр:

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 // Default colors
@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​

Иногда, нужно проверить несколько вариантов условия. Для этого используется блок else if.

@endif​

Закрывает блок текущего условия.

Комментарии​

// превращает в комментарий остаток строки, /* и */ обрамляют комментарий из нескольких строк.

Параметры прорисовки​

Параметры управляют отображением объектов на карте.

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

Толщина​

Толщина линий может быть задана в пикселях 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' задаём одноимённому свойству значение тега
*|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-allow-overlap​

Позволяет разрешить отображение текста с наложением. Несколько надписей одна поверх другой.

text-big-padding​

Указывает, что этому тексту надо в 2 раза больше свободного места вокруг. Используется для названий населенных пунктов, чтобы они не заслоняли всю карту.

Параметры иконок​

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​

Тинт позволяет перекрасить картинку в другой цвет. Цвета картинки меняются следующим образом. #FFF белый цвет остается белым, #ССС - станет осветленным tint-color, #888 - станет идентичным цвету в tint-color, #444 - затемненный tint-color и #000 черный останется черным. На всех промежутках цвет будет плавно меняться между указанными цветами.

icon-offset-x и icon-offset-y​

Позволяет сдвинуть картинку относительно точки привязки. По умолчанию центр картинки совпадает с точкой на карте, для которой картинка была показана. icon-offset-y: 0; позволяет показать пин на карте иголкой в точке, для которой он показан. Используются значения от 0 до 1. Где 0 это низ для icon-offset-y и левая сторона для icon-offset-x, а 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 будет показн как имя, а текст установленный в details-description будет показан как описание. Если details-text или details-description не заполнен, то нажатие по таким объектам не обрабатывается. В этих параметрых можно использовать выражения.

* {
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:ru, name и использованно первое найденное значение. Поддерживаемые языки: 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") ) . ")",
// иначе ничего не добавляем
""),
// если addr: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;
}

В этом примере толщина дороги на 13 зуме 1 пиксель, на 14 зуме 1 поинт, на 15+ будет использована большая из толщин 2 поинта или 4 метра.

metric​

Число, переданное в эту функцию, считается в метрах.

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

В этом примере число полос умножается на 2 - результат умножения считается расстоянием в метрах. max(3pt, metric()) вернет большее значение, ширину в метрах или в поинтах.

Операторы выражений​

В выражениях могут быть использованы следующие математические операторы: +, -, *, /, оператор слияния строк - ., оператор равенства == и ~=, который проверяет наличие подстроки в тексте.