Style de carte
Un fichier de style MapCSS est composé de règles appliquées à chaque objet de haut en bas.
Par exemple, ce style :
node[natural=tree] {
icon-image: "tree.svg";
}
affiche l’image tree.svg aux points dont la balise natural vaut tree.
Chaque règle comporte deux parties : le filtre node[natural=tree] et les paramètres d’affichage icon-image: tree.svg;. Le filtre détermine les objets auxquels les paramètres s’appliquent.
Les règles peuvent être imbriquées et définir des paramètres à chaque niveau.
|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";
}
}
Les règles imbriquées gardent le style court et structuré : les paramètres communs ne sont définis qu’une fois au lieu d’être répétés dans plusieurs blocs.
Cette documentation décrit le dialecte MapCSS de Guru Maps. Certains paramètres du langage d’origine ne sont pas implémentés ; en revanche, des macros de préprocesseur, des règles imbriquées et des fonctions supplémentaires pour les expressions calculées sont disponibles. Le style utilisé par Guru Maps se trouve dans son dépôt.
Filtres
Prenons un filtre complexe :
node,area|z14-[boundary=forest_compartment][ref]
Il est composé de :
- Le filtre de type
node,area: utiliseznodepour les points,linepour les lignes etareapour les polygones. Séparez plusieurs types par une virgule. Avec*, le type n’a pas d’importance. - Le filtre de zoom
z14-: il définit les niveaux de zoom auxquels la règle s’applique. Vous pouvez indiquer uniquement un niveau minimal, commez8-, ou un intervalle, commez3-9. Dans le second cas, la règle s’applique aux niveaux 3 à 8 inclus. - Les filtres de balises
[boundary=forest_compartment][ref]: ils ne conservent que les objets dont la baliseboundaryvautforest_compartmentet dont la baliserefpossède une valeur quelconque.[!ref]sélectionne au contraire les objets sans baliseref.
Plusieurs filtres peuvent être séparés par des virgules :
node,area|z14-[boundary=forest_compartment][ref],
node,area|z14-[boundary=forestry_compartment][ref]
Les paramètres communs peuvent être déplacés vers un niveau supérieur :
node,area|z14-[ref] {
[boundary=forest_compartment],
[boundary=forestry_compartment] {
}
}
Pour regrouper plusieurs règles sans ouvrir immédiatement un bloc, placez les filtres entre parenthèses :
node,area|z14-[ref](
[boundary=forest_compartment],
[boundary=forestry_compartment]) {
}
}
Macros du préprocesseur
Le préprocesseur prépare le style avant son analyse. Il remplace des valeurs et active ou désactive des blocs selon les paramètres.
Macros de substitution
@import
Insère le contenu d’un fichier :
@import "polygons.mapcss";
@{name}
Insère la valeur d’une macro à chaque endroit où elle est utilisée :
// Définir la couleur
@color_ground: #EAE3D3;
// puis l’utiliser
canvas
{
fill-color: @color_ground;
}
Conditions
@if
Évalue un paramètre et inclut ou exclut un bloc du style selon le résultat :
@if Theme == Dark
@import "colors_dark.mapcss";
@else // couleurs par défaut
@import "colors.mapcss";
@endif
Guru Maps fournit les paramètres suivants au préprocesseur :
- Theme {Light, Dark} – thème actuel de l’application ;
- Style {Default, Outdoor} – style de carte actuel ;
- SubStyle {Car, Hike, Bike}
- Car est utilisé en voiture ;
- Hike pour la randonnée ;
- Bike pour le vélo.
@else
Définit le bloc exécuté lorsque la première condition est fausse.
@elif
Ajoute une autre condition lorsque les précédentes ne sont pas remplies.
@endif
Ferme le bloc conditionnel actuel.
Paramètres d’affichage
Ces paramètres contrôlent la façon dont les objets sont dessinés sur la carte.
Valeurs des paramètres
Largeur
Une largeur de ligne peut être exprimée en pixels (1px), en points (2pt) ou en mètres (3m), ou être calculée par une expression telle que eval( zlinear( 13, 1px,1pt,max(2pt, 4m)) );. Consultez la section Expressions pour en savoir plus.
Couleur
Les couleurs sont indiquées sous la forme #RGB, #RRGGBB, #RRGGBBAA ou par un nom issu de la liste des couleurs CSS.
Texte
Une chaîne placée entre guillemets simples ou doubles est considérée comme du texte :
'string'
"another string"
Paramètres d’ordre de dessin
layer
Le numéro de couche sépare les différents niveaux d’altitude de la carte.
// Pour chaque objet portant la balise 'layer', utiliser sa valeur comme numéro de couche
*|z9-[layer] {
layer: eval(tag(layer));
}
z-index
z-index définit l’ordre de dessin des objets du même type au sein d’une couche.
area|z10-[natural=wood] {
z-index: -3;
fill-color: @color_wood;
}
area[natural=oceanwater] {
z-index: -2;
fill-color: @color_water;
}
Paramètres des polygones
fill-color
Couleur de remplissage d’un polygone.
area|z5-[natural=water] {
fill-color: @color_water;
}
fill-image
Image de remplissage d’un polygone.
// Image de remplissage d’une zone militaire au-dessus des autres objets
area|z11- {
[landuse=military],
[military=danger_area] {
z-index: 2;
fill-image:"forbiddenArea.png";
}
}
fill-image prend en charge les données Base64 intégrées :
// correspond à arrow.svg
fill-image: eval(data("PHN2ZyB3aWR0aD0iMTI4IiBoZWlnaHQ9IjgiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTI2IDNoMTBWMWw1IDMtNSAzVjVIMjZ6IiBmaWxsPSIjMDAwIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIG9wYWNpdHk9Ii40Ii8+PC9zdmc+Cg=="))
color et width pour les polygones
Couleur et largeur du contour d’un polygone.
area|z15-[building] {
z-index: 3;
width: 1px;
color: @color_landuse_residential_stroke;
}
Paramètres des lignes
color et width pour les lignes
Couleur et largeur d’une ligne.
line|z13-[natural=tree_row] {
width: 3pt;
color: @color_wood;
z-index: -10;
}
casing-color et casing-width
Couleur et largeur du contour extérieur de la ligne, généralement utilisé pour les routes.
line|z8-[highway=motorway],
line|z11-[highway=motorway_link] {
color: @color_motorway;
casing-color: @color_motorway_casing;
casing-width: 0.5pt;
}
dashes
Définit la longueur des segments dessinés et des espaces. La somme des nombres doit être une puissance de deux, par exemple 4, 8, 16, 32 ou 64. Chaque nombre indique la longueur d’un segment en points.
line|z15-[highway=cycleway] {
dashes: 2,2,2,2;
dashes-color: @color_cycleway_dashes;
}
dashes-color et dashes-width
Couleur et largeur des tirets, notamment pour les sentiers, escaliers et limites.
line|z15-[highway=steps] {
dashes-color: @color_footway_dashes;
dashes-width: eval( zlinear( 16, 3pt, 4pt ) );
}
linecap
Forme des extrémités de ligne. Valeurs possibles : none, square, round.
linejoin
Forme des jointures de ligne. Valeurs possibles : round, miter, bevel, auto.
Paramètres du texte
text
Texte dessiné à côté d’un point ou au milieu d’une ligne ou d’un polygone.
node,area|z2-8[place=country] {
text: eval(locTag('name'));
// autres paramètres omis
}
font-weight
Graisse de la police. Valeurs possibles : bolder, bold, normal, light, lighter.
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-size
Taille de la police.
font-stroke-width et font-stroke-color
Largeur et couleur du contour de la police.
text-color
Couleur du texte.
node,area|z2-8[place=country] {
text: eval(locTag('name'));
text-color: @color_name_text;
text-priority: 10;
// autres balises omises
}
text-priority
Lorsque plusieurs libellés se disputent le même espace, text-priority indique lequel est affiché en premier.
text-allow-overlap
Autorise le chevauchement des libellés afin que plusieurs textes puissent occuper la même zone.
text-big-padding
Réserve deux fois plus d’espace autour du texte. Ce paramètre convient aux grandes agglomérations, comme les villes et les banlieues, afin que leurs libellés ne surchargent pas la carte.
icon-image
Nom de l’image affichée sur un point ou au centre d’un polygone.
node,area|z17-[amenity=library] {
icon-image: "library.svg";
icon-scale: 0.37;
icon-tint: @color_icon_tint;
}
icon-image prend en charge les données Base64 intégrées :
// correspond à poi_circle_small.svg
icon-image: eval(data("PHN2ZyB3aWR0aD0iOCIgaGVpZ2h0PSI4IiB2aWV3Qm94PSIwIDAgOCA4IiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8cGF0aCBkPSJNNyA0QzcgNS42NTY4NSA1LjY1Njg1IDcgNCA3QzIuMzQzMTUgNyAxIDUuNjU2ODUgMSA0QzEgMi4zNDMxNSAyLjM0MzE1IDEgNCAxQzUuNjU2ODUgMSA3IDIuMzQzMTUgNyA0WiIgZmlsbD0iIzgwODA4MCIvPgo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTggNEM4IDYuMjA5MTQgNi4yMDkxNCA4IDQgOEMxLjc5MDg2IDggMCA2LjIwOTE0IDAgNEMwIDEuNzkwODYgMS43OTA4NiAwIDQgMEM2LjIwOTE0IDAgOCAxLjc5MDg2IDggNFpNNCA3QzUuNjU2ODUgNyA3IDUuNjU2ODUgNyA0QzcgMi4zNDMxNSA1LjY1Njg1IDEgNCAxQzIuMzQzMTUgMSAxIDIuMzQzMTUgMSA0QzEgNS42NTY4NSAyLjM0MzE1IDcgNCA3WiIgZmlsbD0id2hpdGUiLz4KPC9zdmc+Cg=="))
icon-scale
Redimensionne l’image par rapport à sa taille d’origine.
icon-tint
icon-tint recolore l’image. #FFF reste blanc, #CCC prend une variante plus claire de la couleur choisie, #888 lui correspond, #444 devient plus sombre et #000 reste noir. Les couleurs intermédiaires sont mélangées progressivement.
icon-offset-x et icon-offset-y
Décale l’image par rapport à son point d’ancrage. Par défaut, elle est centrée au-dessus du point de la carte. Par exemple, icon-offset-y: 0; aligne le bord inférieur d’une épingle sur le point cible. Les valeurs vont de 0 à 1 ; 0 correspond au bord inférieur ou gauche et 1 au bord supérieur ou droit.
image-allow-overlap
Autorise le chevauchement des icônes.
Paramètres des détails
details-text et details-description définissent le nom et la description des objets GeoJSON. details-text apparaît comme titre et details-description comme description. Si les deux valeurs sont vides, les interactions avec l’objet sont ignorées. Ces paramètres prennent en charge les expressions.
* {
details-text: eval(tag('name'));
details-description: eval(tag('description'));
}
Expressions
Les filtres et paramètres d’affichage peuvent dépendre de facteurs externes, être calculés par une formule ou varier selon le niveau de zoom.
Les valeurs calculées doivent toujours commencer par la fonction eval(). Les fonctions suivantes sont disponibles à l’intérieur :
min et max
Renvoient respectivement la plus petite ou la plus grande valeur. Le nombre de paramètres est illimité.
any
Renvoie la première valeur de paramètre qui n’est pas null. Le nombre d’arguments est illimité.
data
Décode une chaîne Base64 et peut être utilisé avec icon-image et fill-image.
tag
Renvoie la valeur de la balise indiquée, ou null si elle est absente.
locTag
Renvoie une valeur de balise localisée selon les préférences linguistiques de l’utilisateur. Par exemple, si l’anglais, le russe et la langue locale sont préférés, locTag('name') vérifie successivement name:en, name:ru et name, puis utilise la première valeur trouvée. Guru Maps prend en charge be, cs, da, de, en, es, fr, it, ja, ko, nl, pl, ru, sv, uk, zh. Utilisez locTag() pour ces langues et explicitement tag() pour les autres.
cond
Évalue une expression logique. Si le premier argument est vrai, la fonction renvoie le deuxième ; sinon, elle renvoie le troisième.
// vérifier addr:housenumber
text: eval( cond( tag('addr:housenumber'),
// si le numéro existe, ajouter la condition suivante
tag('addr:housenumber') . cond( any( locTag('name'), tag('addr:housename') ),
// placer name ou addr:housename entre parenthèses
' (' . any( locTag('name'), tag('addr:housename') ) . ')',
// sinon, chaîne vide
''),
// sans numéro, utiliser name ou addr:housename
any( locTag('name'), tag('addr:housename') ) ) );
boolean
Convertit une valeur en booléen. Si elle est absente ou correspond, sans tenir compte de la casse, à 0, No, Off ou False, la fonction renvoie false ; sinon, elle renvoie true.
zlinear
Fait varier une valeur de manière régulière selon le niveau de zoom. Le premier paramètre est le niveau initial ; les suivants indiquent la valeur de chaque niveau supplémentaire.
line|z13-[highway=residential] {
width: eval( zlinear( 13, 1px, 1pt, max(2pt, 4m) ) );
color: @color_small_road;
linecap: round;
}
Dans cet exemple, la route mesure un pixel de large au niveau 13, un point au niveau 14 et, à partir du niveau 15, prend la plus grande valeur entre deux points et quatre mètres.
metric
Convertit un paramètre numérique en mètres.
line|z12-[highway=tertiary] {
width: eval( zlinear( 12, 1px, 1pt, 1pt, max(3pt, metric(any(tag(lanes),2)*2)) ));
}
Ici, le nombre de voies est multiplié par deux et utilisé comme distance en mètres. max(3pt, metric()) renvoie la plus grande valeur entre la largeur en mètres et celle en points.
Opérateurs d’expression
Les expressions prennent en charge les opérateurs mathématiques +, -, *, /, l’opérateur . pour concaténer des chaînes et les opérateurs de comparaison <, >, == et ~= pour rechercher une sous-chaîne.