Перайсці да асноўнага змесціва

Стыль карты

Файл стылю 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]

Ён складаецца з трох частак:

  1. Фільтр тыпу node,area. node пазначае кропкі, line — лініі, area — палігоны. Некалькі тыпаў раздзяляюцца коскамі, а * азначае любы тып.
  2. Фільтр маштабу z14-. Ён задае ўзроўні, на якіх дзейнічае правіла. Можна пазначыць толькі мінімальны ўзровень, напрыклад z8-, або дыяпазон z3-9. У апошнім выпадку правіла дзейнічае на ўзроўнях ад 3 да 8 уключна.
  3. Фільтры тэгаў [boundary=forest_compartment][ref]. Застаюцца толькі аб'екты, дзе boundary роўны forest_compartment, а ref мае любое значэнне. Каб выбраць аб'екты без тэга ref, выкарыстоўвайце [!ref].

Некалькі фільтраў можна раздзяліць коскай:

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]) {
}

Макрасы перадпрацэсара

Перадпрацэсар падстаўляе значэнні і ўключае або выключае блокі паводле налад перад разборкай стылю.

Макрасы падстаноўкі

@import

Устаўляе змесціва зададзенага файла:

@import "polygons.mapcss";

@\{name\}

Устаўляе значэнне макраса ў месцы яго выкарыстання:

// Define color using
@color_ground: #EAE3D3;

// then use it as
canvas
{
fill-color: @color_ground;
}

Умовы

@if

Правярае параметр і дадае або выключае блок са стылю:

@if Theme == Dark
@import "colors_dark.mapcss";
@else // Default colors
@import "colors.mapcss";
@endif

Guru Maps перадае перадпрацэсару наступныя параметры:

  • Theme {Light, Dark} — бягучая тэма праграмы;
  • Style {Default, Outdoor} — бягучы стыль карты;
  • SubStyle {Car, Hike, Bike}:
    • Car — язда на аўтамабілі;
    • Hike і Bike — пешыя і веласіпедныя актыўнасці адпаведна.

@else

Задае блок кода, які выконваецца, калі першая ўмова непраўдзівая.

@elif

Змяшчае наступную ўмову, якая правяраецца, калі папярэднія не спрацавалі.

@endif

Закрывае бягучы ўмоўны блок.

Параметры малявання

Гэтыя параметры вызначаюць, як аб'екты выглядаюць на карце.

Значэнні параметраў

Шырыня

Таўшчыню лініі width можна задаць у пікселях 1px, пунктах 2pt, метрах 3m або вылічыць выразам, напрыклад eval( zlinear( 13, 1px,1pt,max(2pt, 4m)) );. Падрабязней глядзіце ў раздзеле пра выразы.

Колер

Колер задаецца як #RGB, #RRGGBB, #RRGGBBAA або назвай з пераліку колераў CSS.

Тэкст

Любая паслядоўнасць сімвалаў паміж адзінарнымі або падвойнымі двукоссямі лічыцца тэкстам:

'string'
"another string"

Параметры парадку малявання

layer

Нумар слоя раздзяляе розныя ўзроўні аб'ектаў на карце.

// for any object with tag 'layer', set its 'layer' property to the value of the tag
*|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

Выява для запаўнення палігона.

// fill image of a military area displayed on top of other objects
area|z11- {
[landuse=military],
[military=danger_area] {
z-index: 2;
fill-image:"forbiddenArea.png";
}
}

fill-image падтрымлівае ўбудаваны стыль з данымі base64.

// same as 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

Колер і шырыня вонкавага контуру лініі, найчасцей дарогі.

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

dashes

Задае даўжыні намаляваных і пустых адрэзкаў. Сума лікаў павінна быць ступенню двойкі: 4, 8, 16, 32, 64 і гэтак далей. Кожны лік — даўжыня адрэзка ў пунктах.

line|z15-[highway=cycleway] {
dashes: 2,2,2,2;
dashes-color: @color_cycleway_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, miter, bevel, auto.

Параметры тэксту

text

Тэкст каля кропкі або па цэнтры лініі ці палігона.

node,area|z2-8[place=country] {
text: eval(locTag('name'));
// other params skipped
}

font-weight

Таўшчыня шрыфту. Магчымыя значэнні: 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

Памер шрыфту.

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;
// other tags skipped
}

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.

// same as poi_circle_small.svg
icon-image: eval(data("PHN2ZyB3aWR0aD0iOCIgaGVpZ2h0PSI4IiB2aWV3Qm94PSIwIDAgOCA4IiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8cGF0aCBkPSJNNyA0QzcgNS42NTY4NSA1LjY1Njg1IDcgNCA3QzIuMzQzMTUgNyAxIDUuNjU2ODUgMSA0QzEgMi4zNDMxNSAyLjM0MzE1IDEgNCAxQzUuNjU2ODUgMSA3IDIuMzQzMTUgNyA0WiIgZmlsbD0iIzgwODA4MCIvPgo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTggNEM4IDYuMjA5MTQgNi4yMDkxNCA4IDQgOEMxLjc5MDg2IDggMCA2LjIwOTE0IDAgNEMwIDEuNzkwODYgMS43OTA4NiAwIDQgMEM2LjIwOTE0IDAgOCAxLjc5MDg2IDggNFpNNCA3QzUuNjU2ODUgNyA3IDUuNjU2ODUgNyA0QzcgMi4zNDMxNSA1LjY1Njg1IDEgNCAxQzIuMzQzMTUgMSAxIDIuMzQzMTUgMSA0QzEgNS42NTY4NSAyLjM0MzE1IDcgNCA3WiIgZmlsbD0id2hpdGUiLz4KPC9zdmc+Cg=="))

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

Дазваляе значкам перакрывацца.

Параметры падрабязнасцяў

details-text і details-description задаюць назву і апісанне аб'ектаў GeoJSON. Першы паказваецца як загаловак, другі — як апісанне. Калі абодва значэнні пустыя, націск на аб'ект ігнаруецца. У гэтых параметрах можна выкарыстоўваць выразы.

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

Выразы

Фільтры і параметры малявання могуць залежаць ад знешніх фактараў, вылічвацца паводле формул або мяняцца разам з маштабам.

Вылічанае значэнне заўсёды павінна пачынацца з функцыі eval().

Унутры даступныя наступныя функцыі.

min і max

Вяртаюць найменшае або найбольшае значэнне сярод неабмежаванай колькасці параметраў.

any

Вяртае першае значэнне, якое не роўнае null. Колькасць аргументаў не абмежавана.

data

Дэкадуе радок base64. Можна выкарыстоўваць у icon-image і fill-image.

tag

Вяртае значэнне зададзенага тэга або null, калі яго няма.

locTag

Вяртае лакалізаванае значэнне тэга паводле моўных налад карыстальніка. Напрыклад, калі выбраны англійская, руская і мясцовая мова, locTag('name') паслядоўна правярае name:en, name:ru і name, а затым выкарыстоўвае першае знойдзенае значэнне. Guru Maps падтрымлівае be, cs, da, de, en, es, fr, it, ja, ko, nl, pl, ru, sv, uk, zh. Для гэтых моў выкарыстоўвайце locTag(), для астатніх — яўны выклік tag().

cond

Вылічвае лагічны выраз. Калі першы аргумент праўдзівы, вяртае другі, інакш — трэці.

// check addr:housenumber
text: eval( cond( tag('addr:housenumber'),
// if there is addr:housenumber, then concatenate next condition
tag('addr:housenumber') . cond( any( locTag('name'), tag('addr:housename') ),
// if there is name or addr:housename - put them between ()
' (' . any( locTag('name'), tag('addr:housename') ) . ')',
// empty line otherwise
''),
// if there is no housenumber just use any from name or 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()) вяртае большае з двух значэнняў: шырыню ў метрах або пунктах.

Аператары выразаў

Выразы падтрымліваюць матэматычныя аператары +, -, *, /, аператар злучэння радкоў . і аператары параўнання <, >, ==, ~= для пошуку падрадка.