Стиль карты
Файл стиля состоит из правил, которые применяются к каждому объекту сверху-вниз.
Например стиль:
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]
Он состоит из:
- фильтра по типу
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 // 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()) вернет большее значение, ширину в метрах или в поинтах.
Операторы выражений
В выражениях могут быть использованы следующие математические операторы: +, -, *, /, оператор слияния строк - ., оператор равенства == и ~=, который проверяет наличие подстроки в тексте.