Pular para o conteúdo principal

Estilo do mapa

Um arquivo MapCSS contém regras aplicadas a cada objeto de cima para baixo.

Por exemplo:

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

Essa regra mostra a imagem tree.svg nos pontos em que a etiqueta natural tem o valor tree.

Cada regra tem duas partes: o filtro node[natural=tree] e os parâmetros de desenho icon-image: tree.svg;. O filtro define a quais objetos os parâmetros serão aplicados.

As regras podem ser aninhadas e definir parâmetros em cada nível:

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

Assim, parâmetros compartilhados são definidos uma vez, sem repetição em vários blocos.

Esta documentação descreve o dialeto MapCSS usado pelo Guru Maps. Alguns parâmetros da linguagem original não foram implementados, mas há macros de pré-processamento, regras aninhadas e novas funções de cálculo. O estilo do Guru Maps está disponível no repositório.

Filtros​

Considere este filtro:

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

Ele contém:

  1. Filtro de tipo node,area: use node para pontos, line para linhas e area para polígonos. Separe tipos por vírgulas ou use * quando o tipo não importar. canvas seleciona o fundo do mapa.
  2. Filtro de zoom z14-: define os níveis em que a regra é aplicada. Você pode indicar somente um mínimo, como z8-, somente um máximo, como z-9, um único nível, como z12, ou um intervalo, como z3-9. Os dois extremos do intervalo são incluídos: z3-9 vale para os níveis 3 a 9.
  3. Filtros de etiquetas [boundary=forest_compartment][ref]: mantêm objetos cuja etiqueta boundary seja forest_compartment e que tenham qualquer valor em ref. Para objetos sem ref, use [!ref].

Todas as partes são opcionais. Um filtro de zoom pode aparecer sozinho, como |z16- no exemplo acima.

Filtros de etiquetas​

FiltroMantém objetos em que
[ref]a etiqueta ref existe
[!ref]a etiqueta ref não existe
[highway=primary]o valor é igual a primary
[highway!=primary]o valor não é primary
[population>100000]o valor é maior; <, >= e <= funcionam do mesmo modo
[ele%100]o valor é múltiplo de 100
[ref^=E]o valor começa com E
[name$=Street]o valor termina com Street
[name*=Park]o valor contém Park
[cuisine~=pizza]pizza é um dos valores separados por ;, como em pizza;burger

As comparações >, <, >= e <= comparam números quando os dois valores são números e, caso contrário, comparam texto.

Coloque o valor entre aspas duplas quando ele contiver apóstrofo, aspas ou ], ou quando começar ou terminar com um espaço:

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

Um valor entre aspas não pode conter {, }, ;, @ nem //.

Agrupamento de filtros​

Vários filtros podem ser separados por vírgulas:

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

Os parâmetros compartilhados podem ser movidos para um nível superior:

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

}
}

Para agrupar filtros sem iniciar imediatamente um bloco, use parênteses:

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

Um filtro de zoom pode valer para um grupo inteiro:

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

Filtros de relação​

relation[...] mantém os objetos que pertencem a uma relação com as etiquetas indicadas. Por exemplo, os trechos de rotas de caminhada:

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

A função relationTag lê as etiquetas dessa relação, e per-relation desenha um trecho uma vez para cada uma das suas relações.

Macros de pré-processamento​

O pré-processador substitui valores e ativa ou desativa blocos de acordo com as configurações antes que o estilo seja analisado.

Macros de substituição​

@import​

Insere o conteúdo do arquivo indicado:

@import "polygons.mapcss";

@\{name\}​

Insere o valor de uma macro:

// Define a cor
@color_ground: #EAE3D3;

// Usa a cor
canvas
{
fill-color: @color_ground;
}

Uma macro insere o próprio texto como está, por isso pode conter parte de uma expressão:

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

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

Uma macro cujo valor começa com eval( é calculada uma vez, quando o estilo é carregado.

Condições​

@if​

Testa um parâmetro e inclui ou exclui um bloco:

@if Theme == Dark
@import "colors_dark.mapcss";
@else // Cores padrão
@import "colors.mapcss";
@endif

Uma condição pode comparar um parâmetro com ==, !=, <, >, <= ou >=. Um valor é uma única palavra formada por letras, dígitos e _. Um parâmetro sem comparação verifica se ele está ativado; ! verifica se está desativado:

@if Food
// exibido quando o interruptor Restaurantes e cafeterias está ativado
@endif
@if !Food
// exibido quando ele está desativado
@endif

O Guru Maps oferece estes parâmetros de pré-processamento:

  • Theme {Light, Dark} — tema atual do aplicativo. No tema escuro, o branco puro #FFFFFF nos ícones vira cinza-escuro; use #FEFEFE para o branco que deve continuar branco;
  • Style {City, Outdoor} — estilo atual do mapa;
  • SubStyle {Hike, Bike, Ski, Car}:
    • Hike, Bike e Ski são definidos pelas variantes Outdoor do mapa para caminhada, bicicleta e esqui;
    • Car é definido durante a navegação de carro, com qualquer estilo de mapa;
  • os interruptores de Objetos de mapa nas configurações: AllShops, Bar, Beauty, BuildingName, CityService, Culture, Education, Entertaiment, Financial, Food, Hotel, Medical, PistesAndLifts, Postal, PublicTransport, Railway, Shop, Sport. Um interruptor vale 1 quando está ativado e 0 quando está desativado. Durante a navegação de carro, todos os interruptores, exceto BuildingName, ficam desativados.

@else​

Define o bloco usado quando a primeira condição é falsa.

@elif​

Define outra condição caso as anteriores não correspondam.

@endif​

Encerra o bloco condicional.

Comentários​

// transforma o restante da linha em comentário; /* e */ delimitam um comentário de várias linhas.

Parâmetros de desenho​

Estes parâmetros controlam como os objetos são desenhados.

Valores dos parâmetros​

Largura​

A espessura de uma linha, ou width, pode ser indicada em pixels (1px), pontos (2pt), metros (3m) ou calculada, por exemplo, com eval( zlinear( 13, 1px,1pt,max(2pt, 4m)) );. Veja Expressões. Escreva sempre a unidade: um número sem unidade é medido em unidades internas do mapa.

Cor​

Use #RGB, #RRGGBB, #RRGGBBAA ou um nome da lista de cores CSS.

fill-color, casing-color, dashes-color, text-color e font-stroke-color aceitam somente uma cor. color, icon-tint, outline-color, shield-color e shield-text-color também aceitam uma expressão.

Texto e aspas​

Aspas simples e duplas têm o mesmo significado. Não há caracteres de escape, então um texto não pode conter a aspa que o delimita: escreva "McDonald's" entre aspas duplas e 'say "hi"' entre aspas simples. Os exemplos desta página usam aspas duplas.

Dentro de eval(), coloque todo texto entre aspas. O nome de uma tag formado apenas por letras latinas e dígitos funciona sem aspas, então tag(name) equivale a tag("name"), mas um nome com : ou _ precisa de aspas: tag("addr:street"). Números com unidades, como 2pt, e cores, como #808080, ficam sem aspas. Neste exemplo, a paleta é um único texto, relationTag("colour") lê uma tag e #808080 é uma cor:

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

Fora de eval(), as aspas são opcionais: o valor de um parâmetro é o texto até ;, então icon-image: tree.svg; e icon-image: "tree.svg"; são equivalentes. Espaços no início e no fim de um valor são descartados, mesmo entre aspas. @import funciona da mesma forma.

Em filtros de tags, coloque entre aspas um valor que contenha um apóstrofo, uma aspa ou ], ou que comece ou termine com espaço: [name="McDonald's"], [ref^="B "]. Nomes de tags em filtros e valores em condições @if nunca levam aspas.

Mesmo entre aspas, um valor não pode conter ;, { ou }, que encerram o parâmetro ou abrem um bloco, //, que inicia um comentário, nem @, que inicia uma macro.

Em breve

A próxima versão do Guru Maps remove esses limites. Uma barra invertida vai escapar uma aspa (\", \', \\), ;, {, }, // e @ vão virar caracteres comuns dentro de aspas, e um valor entre aspas vai manter seus espaços.

Números e interruptores​

text-priority, icon-scale, icon-offset-x, icon-offset-y e z-index aceitam um número simples, não uma expressão. Interruptores como text-allow-overlap aceitam true ou false.

Ordem de desenho​

layer​

O número da camada separa as diferentes camadas de renderização do mapa:

// Define a propriedade layer com o valor da etiqueta homônima
*|z9-[layer] {
layer: eval(tag("layer"));
}

z-index​

Define a ordem de desenho de objetos do mesmo tipo em uma camada:

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

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

Parâmetros de polígonos​

fill-color​

Cor de preenchimento:

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

fill-image​

Imagem de preenchimento:

// Preenche uma área militar acima dos outros objetos
area|z11- {
[landuse=military],
[military=danger_area] {
z-index: 2;
fill-image:"forbiddenArea.png";
}
}

fill-image aceita imagens inline em base64:

// Equivale a arrow.svg
fill-image: eval(data("PHN2ZyB3aWR0aD0iMTI4IiBoZWlnaHQ9IjgiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTI2IDNoMTBWMWw1IDMtNSAzVjVIMjZ6IiBmaWxsPSIjMDAwIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIG9wYWNpdHk9Ii40Ii8+PC9zdmc+Cg=="));

color e width para polígonos​

Cor e largura da borda:

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

Parâmetros de linhas​

color e width para linhas​

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

casing-color e casing-width​

Definem a cor e a largura do contorno, usados principalmente em vias. O contorno é adicionado em cada lado da linha, por isso width também é necessário:

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

dashes​

Define o comprimento dos segmentos desenhados e vazios, alternadamente. Use até 8 números com soma menor que 64. Cada número é o comprimento de um segmento da linha, em pontos.

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

dashes-color e dashes-width​

Cor e largura dos traços usados em trilhas, caminhos, escadas e limites. Os traços só são desenhados quando dashes, dashes-color e dashes-width estão todos definidos:

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

linecap​

Formato das extremidades: none, square ou round.

linejoin​

Formato das junções: round ou bevel.

outline-color e outline-width​

Uma segunda linha desenhada ao longo de uma linha ou da borda de um polígono, por exemplo uma faixa translúcida sob uma rota. Ao contrário do contorno (casing), outline não depende de width: outline-width é a sua largura total.

Um outline translúcido marca uma rota de trilha com uma faixa larga, e o caminho continua visível através dela:

relation[type=route][route=hiking] {
line|z13- {
outline-width: 7pt;
outline-color: #1E88E570; // azul translúcido
}
}

offset​

Desloca a linha para o lado: valores positivos para a esquerda do sentido do trecho e negativos para a direita. O deslocamento vale para a linha, o contorno, o outline e os traços. Costuma ser usado com per-relation, para desenhar várias rotas lado a lado em um mesmo trecho; veja o exemplo abaixo.

per-relation​

per-relation: true desenha um trecho uma vez para cada relação a que ele pertence, com os parâmetros dessa relação. Junto com offset e a função relationSlot, desenha lado a lado rotas que compartilham um trecho:

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

Parâmetros de texto​

text​

Texto desenhado ao lado de um ponto ou no centro de uma linha ou polígono:

node,area|z2-8[place=country] {
text: eval(locTag("name"));
// Outros parâmetros omitidos
}

font-weight​

Peso da fonte. Valores possíveis: 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 ou italic. Para texto em negrito, use font-weight.

Nos mapas, é tradição escrever os nomes de corpos d'água em itálico, o que os distingue dos nomes de lugares:

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

font-size​

Tamanho da fonte, em pontos. O tamanho pode variar com o zoom; escreva números simples em zlinear e o texto cresce suavemente:

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

font-stroke-width e font-stroke-color​

Largura e cor do contorno da fonte. A largura pode ser uma expressão.

text-color​

Cor do texto:

node,area|z2-8[place=country] {
text: eval(locTag("name"));
text-color: @color_name_text;
text-priority: 10;
// Outras etiquetas omitidas
}

text-letter-spacing​

Espaço extra entre as letras, em frações do tamanho da fonte: 0.1 acrescenta um décimo do tamanho da fonte. Pode variar com o zoom por meio de zlinear.

Letras maiúsculas espaçadas distinguem os nomes de regiões dos nomes de cidades. Conforme o mapa é ampliado, as letras se afastam e o nome ocupa mais da sua região:

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

text-priority​

Quando não há espaço para todas as etiquetas, define qual texto aparece primeiro.

text-allow-overlap​

Permite que as etiquetas ocupem a mesma área.

text-big-padding​

Reserva o dobro de espaço ao redor do texto. É útil para cidades e outros assentamentos importantes, evitando que as etiquetas encubram o mapa.

Parâmetros de ícones​

icon-image​

Nome da imagem exibida em um ponto ou no centro de um polígono:

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

icon-image aceita imagens inline em base64:

// Equivale a poi_circle_small.svg
icon-image: eval(data("PHN2ZyB3aWR0aD0iOCIgaGVpZ2h0PSI4IiB2aWV3Qm94PSIwIDAgOCA4IiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8cGF0aCBkPSJNNyA0QzcgNS42NTY4NSA1LjY1Njg1IDcgNCA3QzIuMzQzMTUgNyAxIDUuNjU2ODUgMSA0QzEgMi4zNDMxNSAyLjM0MzE1IDEgNCAxQzUuNjU2ODUgMSA3IDIuMzQzMTUgNyA0WiIgZmlsbD0iIzgwODA4MCIvPgo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTggNEM4IDYuMjA5MTQgNi4yMDkxNCA4IDQgOEMxLjc5MDg2IDggMCA2LjIwOTE0IDAgNEMwIDEuNzkwODYgMS43OTA4NiAwIDQgMEM2LjIwOTE0IDAgOCAxLjc5MDg2IDggNFpNNCA3QzUuNjU2ODUgNyA3IDUuNjU2ODUgNyA0QzcgMi4zNDMxNSA1LjY1Njg1IDEgNCAxQzIuMzQzMTUgMSAxIDIuMzQzMTUgMSA0QzEgNS42NTY4NSAyLjM0MzE1IDcgNCA3WiIgZmlsbD0id2hpdGUiLz4KPC9zdmc+Cg=="));

icon-fallback​

Uma imagem menor exibida no lugar de icon-image quando o ícone não tem espaço no mapa, por exemplo um ponto no lugar do logotipo de uma loja. Em uma rua movimentada, o lugar continua no mapa e o logotipo aparece quando você amplia:

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

icon-scale​

Aumenta ou reduz a imagem em relação ao tamanho original.

icon-tint​

Recolore a imagem. #FFF permanece branco; #CCC recebe um tom mais claro; #888 corresponde à cor escolhida; #444 recebe um tom mais escuro; e #000 permanece preto. As cores intermediárias são combinadas suavemente.

icon-offset-x e icon-offset-y​

Deslocam a imagem em relação ao ponto de ancoragem. Por padrão, ela fica centralizada. Por exemplo, icon-offset-y: 0; alinha a base de um alfinete ao ponto de destino. Os valores vão de 0 a 1: 0 representa a borda inferior ou esquerda e 1, a superior ou direita.

image-allow-overlap​

Permite que os ícones se sobreponham.

Parâmetros de placas de rodovia​

Uma placa mostra o número de uma via sobre uma chapa ao longo dela. É desenhada em linhas quando shield-image e shield-text estão definidos.

Placas nas cores das placas de sinalização de um país distinguem as vias principais das locais num relance. Na Belarus, por exemplo, os números das vias principais são brancos sobre vermelho, e os das vias locais são escuros sobre branco:

line|z11-[highway=primary][ref] {
shield-image: "shield.svg";
shield-text: eval(listItem(tag("ref"), 0)); // o primeiro número de "М1;E30"
shield-color: #005387;
[ref^=М], [ref^=Р] {
shield-color: #C1121C;
}
[ref^=Н] {
shield-image: "shield_plate.svg";
shield-color: #FEFEFE;
}
}

shield-image​

A imagem da chapa.

shield-text​

O texto da chapa, geralmente o número da via.

shield-color​

Recolore a imagem da chapa como icon-tint.

shield-text-color​

Cor do texto. Sem ela, o texto é escuro em chapas claras e branco em chapas escuras.

shield-fit​

Como a chapa se ajusta ao texto. stretch (o padrão) estica o meio da imagem até a largura do texto e mantém as extremidades. fixed mantém a imagem como foi desenhada e só a alarga quando o texto não cabe; use-o em chapas com formato próprio, como as placas de rodovias dos EUA. Para manter as cores originais da imagem, defina shield-color: #00000000.

As rotas da Califórnia são numeradas num círculo quando têm dois dígitos e numa elipse quando têm três. O número vem depois do prefixo da rede, como em 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;
}

Parâmetros dos detalhes​

Use details-text e details-description para definir o nome e a descrição de objetos GeoJSON. O primeiro aparece como título e o segundo como descrição. Se ambos estiverem vazios, os toques no objeto serão ignorados. Esses parâmetros aceitam expressões.

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

details-enabled: false faz com que os toques em um objeto não façam nada: o Guru Maps não abre os seus detalhes. Uma relação com esse parâmetro, como uma rota, também não aparece entre as rotas de um trecho tocado. Use-o em objetos que não têm nada a informar:

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

Expressões​

Filtros e parâmetros podem depender de fatores externos, ser calculados por fórmulas ou variar com o zoom. Valores calculados sempre começam com eval().

Funções​

Funções disponíveis:

min e max​

Retornam o menor ou o maior valor. A quantidade de parâmetros não é limitada.

any​

Retorna o primeiro valor que não seja null e aceita qualquer quantidade de argumentos.

data​

Decodifica uma string base64 para uso com icon-image e fill-image.

tag​

Retorna o valor da etiqueta indicada ou null se ela não existir.

locTag​

Retorna o valor localizado de acordo com as preferências de idioma. Se a ordem for inglês, russo e idioma local, por exemplo, locTag("name") procura name:en, depois name:ru e por fim name, usando o primeiro valor disponível. O Guru Maps oferece suporte a ar, be, cs, da, de, en, es, fr, it, ja, ko, nl, pl, pt, ru, sv, uk e zh. Use locTag() para esses idiomas e tag() diretamente para os demais.

relationTag​

Retorna o valor de uma etiqueta da relação a que o objeto pertence, como a cor de uma rota: relationTag("colour"). Com per-relation, lê a relação que está sendo desenhada.

relationSlot​

Com per-relation, retorna a posição da relação entre as rotas desenhadas no trecho, centrada em 0: -0.5 e 0.5 para duas rotas, -1, 0 e 1 para três. Multiplique-a pela largura da linha para posicionar as rotas lado a lado com offset, como no exemplo de per-relation.

listItem​

Retorna um item de uma lista, contando a partir de 0. Os itens são separados por ; ou pelo caractere indicado no terceiro parâmetro.

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

length​

Retorna o número de caracteres do texto, por exemplo para escolher uma chapa mais larga para um número de via com três dígitos, como no exemplo de shield-fit.

uppercase, lowercase e capitalize​

Altera a caixa do texto. O segundo parâmetro, opcional, é um idioma cujas regras de caixa serão usadas, como em uppercase(locTag("name"), "el").

mapColor​

Escolhe uma cor de uma paleta. O primeiro parâmetro é a paleta, "nome cor, nome cor, ..."; o segundo é o valor a procurar; o terceiro, opcional, é o resultado quando o valor está vazio. O nome de uma cor da paleta retorna essa cor; qualquer outra cor retorna a cor mais próxima da paleta.

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

formatElevation​

Formata uma altura em metros como 1234 m ou em pés, de acordo com as unidades escolhidas no aplicativo. Um pico é rotulado com o nome e a altura, ou só com a altura quando não tem nome:

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

cond​

Avalia uma condição lógica. Se o primeiro argumento for verdadeiro, retorna o segundo; caso contrário, retorna o terceiro.

// Verifica addr:housenumber
text: eval( cond( tag("addr:housenumber"),
// Se houver número, concatena a próxima condição
tag("addr:housenumber") . cond( any( locTag("name"), tag("addr:housename") ),
// Se houver nome, coloca-o entre parênteses
" (" . any( locTag("name"), tag("addr:housename") ) . ")",
// Caso contrário, usa uma string vazia
""),
// Sem número, usa name ou addr:housename
any( locTag("name"), tag("addr:housename") ) ) );

boolean​

Converte o valor em booleano. Se estiver ausente ou for igual a 0, No, Off ou False, sem diferenciar maiúsculas de minúsculas, retorna false; nos outros casos, retorna true.

zlinear​

Altera um valor suavemente com o zoom. O primeiro parâmetro é o nível inicial; os demais são os valores de cada nível seguinte.

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

Nesse exemplo, a via tem 1 pixel no zoom 13, 1 ponto no zoom 14 e o maior valor entre 2 pontos e 4 metros a partir do zoom 15.

metric​

Converte um parâmetro numérico em metros.

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

O número de faixas é multiplicado por 2 para obter a distância em metros. max(3pt, metric()) retorna o maior valor entre a largura em metros e em pontos.

Operadores de expressões​

As expressões aceitam os operadores matemáticos +, -, * e /, o operador de concatenação de strings ., o operador de igualdade == e ~=, que verifica se o texto contém uma substring.