wiki:Eo:Help/Styles/MapCSSImplementation

MapCSS-Implementado

La implementado de JOSM de MapCSS estas uzata por la sekvaj trajtoj:

Konsideru instali la MapCSS-Sintaksa Kolorigilo en VS Code por aldoni videblan kolorigon por MapCSS-pentrado kaj validatora sintakso.

Ĝenerala Strukturo

MapCSS-stilfolio havas regulojn de la formo

elektilo {
    prop: value;
    /* ... */
    prop: value;
    /* kaj/aŭ */
    set: class;
    set: .class;
    /* notu ke validatoraj reguloj ne uzas la dupunkton post set */
}

La algoritmo por trovi la stilojn por donita objekto estas jena:

 - por ĉiu regulo:
     se la elektilo aplikeblas, agordu la propraĵojn el la { } bloko
 - analizu la finan liston de propraĵoj kaj generu stilojn el ĝi

MapCSS uzas la komentan formaton de CSS (/* ... */). Notu ke kiam vi komentas grandajn partojn de MapCSS-dosiero, iuj konstruoj povas kaŭzi neatenditan finon de la komento, ekzemple:

/*
*[highway][name =~ /^R(\.|:)? .*/] { /* la fino de la regula esprimo difinas la neatenditan finon de la komento */
        throwWarning: tr("foo");
}
*/

Elektiloj

Elektiloj indikas la filtrajn esprimojn de MapCSS-regulo. La regulo estas aplikata nur al mapobjekto, se ĝiaj elektiloj kongruas kun la objekto.

Elektiloj en MapCSS estas malsamaj de la norma CSS por la reto. MapCSS nur subtenas subaron de la normaj CSS-elektiloj, sed etendas ilin per aldonaĵoj necesaj por OSM-datumoj.

Iuj bazaj ekzemploj:

/* aplikata al vojoj kun etikedo highway=residential */
way[highway=residential] {  /*  la stiloj */}

/* aplikata al novaj, fermitaj vojoj sur tavolo 1, kondiĉe ke ili havas la etikedojn amenity=parking kaj access=customers, kaj kondiĉe 
 * ke la zoma nivelo estas inter 11 kaj 14 
 */
way|z11-14[amenity=parking][access=customers]:closed:new::layer_1 {...}


area[amenity=parking][access=customers], area[amenity=parking][!access] {...}
relation[type=route][route=foot] > way::relation_underlay {..}

La malsamaj elementoj (tipo-, zomo- , kondiĉo elektilo, pseŭdoklasoj, tavolo-identigilo, grupiĝo kaj infana kombinatoro) estas klarigitaj sube.

Tipo-elektilo

Elektilo

Priskribo

*

Kongruas kun iu ajn objekto

node, way, relation

Kongruas kun la OSM-objektoj de la donita tipo.

area

Kongruas kun iu ajn areo sendepende de tio, ĉu la areo-rando estas modelita nur per unu vojo aŭ per aro de vojoj kunigitaj per rilato.

area[natural=beach] {...} 
/* ... egalas al ... */
way[natural=beach], relation[type=multipolygon][natural=beach] {...} 

Notu ke area elektas ankaŭ nefermitajn vojojn, do povas esti utile aldoni la :closed pseŭdoklason. La JOSM-Validilo donos averton por nefermitaj vojoj, kiuj havas arean stilon.

meta

La meta elektilo komencas specialan regulon, kiu devus stari ĉe la komenco de la dosiero. Ĝi donas iujn ĝeneralajn informojn pri la stila folio. Ĉiu programaro, kiu subtenas MapCSS, devus povi analizi ĉi tiujn sekciojn sen eraroj, do ne uzu ekzotajn sintaksajn etendaĵojn en ĉi tiu parto.

meta {
    title: "Parking lanes";   /* titolo montrata en la menuo */
    icon: "logo_16x16x8.png"; /* malgranda ikono montrata en la menuo apud la titolo */
    version: "1.2";           /* la versio de la stilo */
    description: "...";       /* unu aŭ du frazoj priskribantaj la stilon */
    author: "...";            /* la aŭtoro(j) de la stilo */
    link: "https://...";      /* URL al la retpaĝo de la stilo */
    min-josm-version: 6789;   /* la minimuma JOSM-versio, kie ĉi tiu stilo funkcias */
}

canvas

Iuj stilaj informoj ne specifaj al nodoj, vojoj aŭ rilatoj.

canvas {
    fill-color: #ffffea; /* la antaŭa background-color estas malrekomendita ekde r7110 */
    default-points: false;
    default-lines: false;
}

Ŝlosilo

Priskribo

Valora Formato

Defaŭlta Valoro

fill-color

Specifas la ĝeneralan plenigan/fonan koloron (background-color estas malrekomendita ekde r7110).

Koloro

black

default-points

Ĉu defaŭlta punkta stilo devus esti aldonita al nodoj, kie neniu stilo aplikeblas.

Bulea

true

default-lines

Ĉu defaŭlta linia stilo devus esti aldonita al vojoj, kie neniu stilo aplikeblas.

Bulea

true

Infana Elektilo

Se nodo estas parto de vojo, ni diras, ke ĝi estas infano de ĉi tiu vojo. Simile, se nodo, vojo aŭ rilato estas membro de rilato, ni diras, ke ĝi estas infano de ĉi tiu rilato.

En MapCSS vi povas uzi infanan elektilon, kiu kongruas nur se ambaŭ la patro kaj la infana objekto kongruas.

Ekzemplo:

/*
 * nur kongruas por vojo, kiu estas infano de rilato kun etikedoj 
 * type=route kaj route=foot
 */
relation[type=route][route=foot] > way {...}

Notoj:

  • Zomo-elektilo kaj Tavolo-identigilo estas nur gravaj por la parto dekstre de la > signo.
  • La funkcioj prop() kaj is_prop_set() estas nur subtenataj dekstre de la > signo.
  • La funkcioj parent_tag kaj parent_tags (vidu sube) povas esti uzataj por aliri etikedojn de la patro(j).
  • Por kongrueco kun la MapCSS 0.2-standardo, relation[type=route][route=foot] way {/*...*/}, sen la pli-granda-ol-signo > estas subtenata ankaŭ. Tamen, neniu Ligila Elektilo povas esti specifita en ĉi tiu kazo.

Patra Elektilo

Krom infanaj elektiloj, JOSM subtenas la nocion de patra elektilo. Notu, ke patraj elektiloj estas JOSM-specifa etendaĵo de MapCSS, kiu ne ekzistas en aliaj MapCSS-implementoj.

Simile al infana elektilo, patra elektilo kongruas nur se ambaŭ la patro kaj la infana objekto kongruas. Kontraste al la infana elektilo, la karaktero < estas uzata.

Kontraste al la infana elektilo, la patra objekto estos "elektita". Alivorte, la propraĵoj en la {{{...}}}-Deklara Bloko aplikiĝas al la objekto dekstre de la "<" signo.

Ekzemplo:

/*
 * kongruas por vojo kun etikedo highway, kiu havas almenaŭ unu nodon kun etikedo traffic_calming=*
 */
node[traffic_calming] < way[highway] {...}

Kondiĉa Elektilo

Elektiloj povas inkluzivi aron de kondiĉoj. Se iu el ĉi tiuj kondiĉoj taksas al malvera, la elektilo ne kongruas kaj la stila regulo ne estas aplikata.

Atributa kondiĉo specifas kondiĉon sur etikedo de OSM-objekto.

Operacilo

Priskribo

Ekzemplo

=

Ekzakta kongruo de la valoro.

way[highway=residential]                    /* estas usklecodistinga, t.e. NE kongruas ekz. kun highway=Residential aŭ Highway=residential   */
node[name="My name"]                        /* uzu citilojn, se la ŝlosilo aŭ valoro inkluzivas spacojn                                               */
node["name:pl"="Królewiec"]                 /* uzu citilojn, se la ŝlosilo aŭ valoro inkluzivas specialajn signojn kiel dupunktoj aŭ unikodaj signoj */

!=

Valoro ne egalas

way[highway!=residential]
node[name!="My name"]
node["name:pl"!="Królewiec"]

<, >, <=, >=

Komparo por nombraj valoroj.

node[population >= 50000]                   /* loĝantaro pli granda ol aŭ egala al 50000 */
node[ele = 3000]                            /* alteco kun ekzakte 3000 metroj        */

^=

Prefiksa kongruo

node[name ^= "myprefix"]                    /* valoro komenciĝas per 'myprefix' */

$=

Sufiksa kongruo

node[name $= "mypostfix"]                   /* valoro finiĝas per 'mypostfix' */

*=

Subĉena kongruo

node[name *= "my substring"]                 /* valoro enhavas la subĉenon 'my substring' */

~=

Lista membreco

*[vending~=stamps]                          /* la etikeda valoro por la etikedo 'vending' konsistas el listo de ;-apartigitaj valoroj */
                                            /* kaj unu el ĉi tiuj valoroj estas 'stamps'                                          */

=~

Regula esprimo kongruo

*[name=~/^My_pattern.*/]                    /* la valoro de la etikedo 'name' kongruas kun la regula esprimo '^My_pattern.*' */
                                            /* Notu, ke regulaj esprimoj devas esti ĉirkaŭitaj per /.../                     */

Uskleco-sentiva kongruo povas esti ebligita per la enigita flago-esprimo (?i) (vidu Pattern.CASE_INSENSITIVE).

*[name =~ /^(?i)(parking)$/]                 /* kongruas kun parking, Parking, PARKING, PaRkInG,...      */
*[name =~ /^(?U)(\p{Lower})+$/]              /* nomo konsistas nur el minusklaj unikodaj signoj */

!~ (ekde r6455)

negita Regula esprimo kongruo

*[surface!~/paved|unpaved/]

(U+2208, ekde r6609)

elemento de

Kongruas kiam objekto kongruas kun la dekstra(j) elektilo(j) enhavas almenaŭ unu elementon, kiu kongruas kun la maldekstra(j) elektilo(j).

*[amenity=parking]  area[amenity=parking] {
  throwWarning: tr("{0} inside {1}", "amenity=parking", "amenity=parking");
}

Trovas areojn kun amenity=parking, kiuj enhavas almenaŭ unu nodon aŭ areon kun amenity=parking. Ekde r15064 ĉi tiu regulo produktas unu averton por ĉiu elemento maldekstre, kiam estas multaj kongruoj.

(U+2286, ekde r15102)

Subaro de aŭ Egala Al

Sinonimo por .

*[amenity=parking]  area[amenity=parking] {
  throwWarning: tr("{0} inside {1}", "amenity=parking", "amenity=parking");
}

(U+2287, ekde r15102)

Superaro de aŭ Egala Al

Kongruas kiam objekto kongruas kun la dekstra(j) elektilo(j) kaj estas enhavata en unu aŭ pli da elementoj, kiuj kongruas kun la maldekstra(j) elektilo(j).

area[amenity=parking]  *[amenity=parking]

trovas nodojn aŭ areojn kun amenity=parking ene de areoj kun amenity=parking. Malpli rapida ol kaj tial ne utila en validatoraj reguloj, sed povas esti utila en la serĉa dialogo.

(U+2288, ekde r15102)

Nek Subaro de nek Egala Al

Kongruas kiam objekto kongruas kun la dekstra(j) elektilo(j) kaj ne enhavas iun ajn elementon, kiu kongruas kun la maldekstra(j) elektilo(j).

*[highway=street_lamp]  area:closed2[amenity=parking][lit=yes]

trovas areojn amenity=parking, kiuj havas lit=yes sed ne enhavas lampon. Ĉiam aldonu :closed2 por eviti falsajn pozitivojn, ĉar nefermitaj areoj neniam enhavas ion.

(U+2289, ekde r15102)

Nek Superaro de nek Egala Al

Kongruas kiam objekto kongruas kun la dekstra(j) elektilo(j) kaj ne estas enhavata en iu ajn areo, kiu kongruas kun la maldekstra(j) elektilo(j).

area[landuse=residential]  *[building]

trovas konstruaĵojn, kiuj ne estas ene de iu ajn landuse=residential areo. Notu, ke ĉi tiu operacilo verŝajne produktos falsajn pozitivojn, kiam vi havas landuse=residentialareojn, kiuj ne kongruas kun :closed2.

(U+29C9, ekde r6613)

kruciĝo

area:closed:areaStyle  area:closed:areaStyle {
  throwOther: tr("Overlapping Areas");
}

prenas layer etikedon en konsidero, se ĝi estas agordita (ekde r12986)

Ekde r6554, eblas prefiksi la "valoron" (t.e., esprimon post la operacilo) per * por "malreferenci" ĝin (t.e., konsideri ĝin kiel alian ŝlosilon kaj akiri ĝian valoron). Tiel, [key1 = *key2][key1=*key2] komparas la valoron de key1 kun la valoro de key2, kaj [key =~ */pattern/] konsideras la valoron de la ŝlosilo pattern kiel regulan esprimon kaj kongruas ĝin kun la valoro de key.

Krome, vi povas testi, ĉu etikedo estas ĉeesta aŭ ne:

Kondiĉo

Ekzemplo

Ĉeesto de etikedo

way[highway]                     /* kongruas kun iu ajn vojo kun etikedo 'highway' (estas usklecodistinga)                                              */
way["name:fr"]                   /* uzu citilojn, se la etikednomo inkluzivas specialajn signojn (spacoj, dupunktoj, unikodaj signoj, ktp.) */

Manke de etikedo

way[!highway]                     /* kongruas kun iu ajn vojo, kiu ne havas etikedon 'highway' (estas usklecodistinga)                               */
way[!"name:fr"]                   /* uzu citilojn, se la etikednomo inkluzivas specialajn signojn (spacoj, dupunktoj, unikodaj signoj, ktp.) */

Ĉeesto de etikedo per Regula esprimo kongruo (ekde r6547)

way[/^addr:/]                     /* kongruas kun iu ajn `addr:*` ŝlosilo */

Manke de etikedo per Regula esprimo kongruo

way[!/^addr:/]                    /* kongruas kun iu ajn vojo, kiu ne havas etikedon 'addr:*' */

Vi povas testi, ĉu la valoro de etikedo estas logika vera valoro. La valoro estas taksata al vera, se ĝi estas aŭ "jes", "vera", aŭ "1". Ĉiuj aliaj valoroj estas taksataj al malvera.

Kondiĉo

Ekzemplo

Testado por vera valoro

way[oneway?]                   /* kongruas kun iu ajn vojo kun vera valoro en la etikedo 'oneway' */

Testado por malvera valoro (ekde r6513)

way[oneway?!]                  /* kongruas kun iu ajn vojo kun malvera valoro en la etikedo 'oneway' */

Teritoria Elektilo

Vi povas testi, ĉu objekto situas ene aŭ ekster specifa teritorio. JOSM havas internan datumbazon por ĉi tio. La teritoria dosiero povas esti elŝutita kaj malfermita en JOSM por esplori ĝin (ekrankopio antaŭrigardo). Ĝi enhavas limojn de ĉiuj landoj de la mondo. Pro performaj kialoj la limoj estas simpligitaj. Ili povas esti rafinitaj por specialaj kazoj laŭ peto. La teritorioj estas "etikeditaj" per siaj ISO_3166-1_alpha-2 kodoj. Usono, Kanado, Ĉinio, Barato kaj Aŭstralio havas aldonaĵajn limojn por siaj subdividoj. Vidu la sekvajn ekzemplojn pri kiel uzi la teritoriajn elektilojn. Teritoriaj elektiloj estas malpli utilaj en mapaj stiloj kaj povas esti tre resurso-pezaj tie. Tamen ili estas multe pli utilaj por mapcss-bazitaj validatoraj reguloj. Por elekti teritoriojn kun maldekstra-traflanko aŭ dekstra-traflanko, ekzistas pli simpla maniero, vidu Pseŭdoklasoj. Vidu #10387 por ĉefa implementado de ĉi tiu trajto.

                                      /* kongruas kun iu ajn nodo situanta …                             */
node[inside("FR")]                    /* … ene de Francio (inkluzivas la transmarajn teritoriojn) */
node[inside("FX")]                    /* … ene de Metropola Francio (t.e. nur la 
                                         ĉeftera parto kun ĝiaj proksimaj insuloj inkluzive de Korsiko)   */
node[inside("EU")]                    /* … ene de la Eŭropa Unio                         */
node[inside("FR,DE")]                 /* … ene de Francio __AŬ__ ene de Germanio            */
node[inside("US-FL")]                 /* … ene de la usona ŝtato Florido                       */

node[outside("FR")]                   /* … ekster Francio                                    */
node[outside("FR,DE")]                /* … ekster Francio __KAJ__ ekster Germanio         */
node[inside("US")][outside("US-FL")]  /* … ene de Usono krom la ŝtato Florido           */

Ligila Elektilo

En infana elektilo, vi povas formuli kondiĉojn pri la ligo inter patra kaj infana objekto.

Se la patro estas rilato, vi povas formuli kondiĉojn por la rolo, kiun membro-objekto havas en ĉi tiu rilato.

relation[type=route] >[role="link"] way {  /* kongruas kun iu ajn vojo, kiu estas membro de voja rilato kun rolo 'link' */ 
   color: blue;
}

Operacilo

Priskribo

Ekzemplo

=

Ekzakta kongruo de la rola nomo. La nomo role estas deviga en ĉi tiu kunteksto.

relation >[role=residential] way           
relation >[role="My name"]   way           /* uzu citilojn, se la rola valoro inkluzivas spacojn aŭ aliajn specialajn signojn */

La operaciloj !=, ^=, $=, *= kaj ~= estas subtenataj ankaŭ. Bonvolu referenci al kondiĉa elektilo-operaciloj.

Nodoj en vojoj kaj membroj en rilatoj estas ordigitaj. Vi povas formuli kondiĉojn pri la pozicio de nodo en vojo aŭ membro-objekto en rilato. Pozitivaj nombroj kalkulas de la unua ĝis la lasta elemento, negativaj nombroj (ekde r8236) kalkulas de la lasta ĝis la unua elemento.

relation[type=route] >[index=1] way {  /* kongruas kun la unua vojo, kiu estas membro de voja rilato  */ 
   color: blue;
}

way >[index=-1] node {  /* kongruas kun la lasta nodo de vojo  */ 
   symbol-stroke-color: green;
}

way!:closed >[index=1] node!:connection,
way!:closed >[index=-1] node!:connection {  /* kongruas kun ĉiuj unuopaj finaj nodoj de vojo */ 
   symbol-stroke-color: green;
}

Zomo-elektilo

Vi povas ornami tipan elektilon per zomo-elektilo. La zomo-elektilo limigas la gamon de zomaj niveloj, ĉe kiuj la respektiva MapCSS-regulo estas aplikata.

Ekzemplo 1 Ekzemplo 2 Ekzemplo 3 Priskribo
way|z12 {...} node|z12 {...} node|z12[...] {...} Ĉe zoma nivelo 12
way|z13-15 {...} node|z13-15 {...} way|z13-15[...] {...} De 13 ĝis 15
way|z16- {...} node|z16- {...} node|z16-[...] {...} 16 kaj pli
way|z-12 {...} node|z-12 {...} node|z-12[...] {...} 12 kaj malpli
way {...} node{...} way[...] {...} iu ajn zoma nivelo

La preciza difino de skala gamo por ĉiu zoma nivelo povas ŝanĝiĝi en la estonteco. Laŭ regulo de dikfingro vi povas atendi esti proksimume ĉe zoma nivelo n, kiam bildaro montras glitmapajn kahelojn de nivelo n.

Pseŭdoklasoj

Vidu Javadoc por la ĝisdatigita listo de pseŭdoklasoj subtenataj de JOSM-a MapCSS-implementado.

Klaso Priskribo
:closed vera por vojoj, kie la unua nodo estas la sama kiel la lasta kaj por iu ajn (tute elŝutita) multpoligona rilato
:closed2 sama kiel supre, sed ĉi tiu ignoras, ĉu multpoligono estas tute elŝutita (ekde r9099)
:completely_downloaded vera por rilato, kies membroj estas ĉiuj elŝutitaj (ekde r9099)
:new ĉiuj novaj objektoj
:connection vera por nodoj, kiuj estas uzataj de pli ol unu vojo
:unconnected vera por nodoj, kiuj ne estas uzataj de iu ajn vojo (ekde r6687)
:tagged Kion JOSM konsideras etikedita, t.e. objekto kun etikeda ŝlosilo alia ol la sekvaj: source*, source_ref, note, comment, converted_by, created_by, watch*, fixme, FIXME, description, attribution (versio r4008; en ĉi tiu listo, * estas globo)
:area-style vera se la objekto havas arean stilon
:righthandtraffic vera se estas dekstra-traflanko ĉe la aktuala loko (ekde r7193); vidu maldekstra-dekstra-traflanko por ekrankopio de areoj
:clockwise Ĉu la vojo estas fermita kaj orientita laŭhorloĝe, aŭ nefermita kaj la 1a, 2a kaj lasta nodo estas en laŭhorloĝa ordo.
:anticlockwise Ĉu la vojo estas fermita kaj orientita kontraŭhorloĝe, aŭ nefermita kaj la 1a, 2a kaj lasta nodo estas en kontraŭhorloĝa ordo.
:unclosed_multipolygon vera por tute ŝutitaj nefermitaj multpoligonaj rilatoj (ekde r8252)
:open_end por elekti finajn nodojn de nefermitaj multpoligonaj rilatoj kun relation:unclosed_multipolygon >:open_end node (ekde r8252)
:in-downloaded-area vera se objekto estas ene de fonta areo kaj malvera se en la strekita areo (ekde r8495).
:selected vera se objekto estas elektita en la redaktilo (ekde r9341).
:highlighted vera se la objekto estas emfazita
:modified ŝanĝitaj kaj novaj objektoj (ekde r7193).

Vi povas ankaŭ nei pseŭdoklasojn. Ekz. !:new por ĉiuj malnovaj objektoj.

Tavolo-Identigilo

Tavoloj povas esti uzataj por krei pli ol unu stilon por unuopa objekto. Jen ekzemplo:

way[highway=secondary] {
    width: 3;
    color: yellow;
}

way[highway=tertiary] {
    width: 2;
    color: orange;
}

way[access][access!=yes]::non_public_access_layer {
    width: +2; 
    color:red; 
    dashes: 2; 
    object-z-index:-1.0;
}

way[bridge]::bridge_layer {
    width: +3; 
    color:#000080;
    opacity:0.5;
    object-z-index:1.0; 
}

Ĉi tiu desegnas ĉiujn sekundarajn kaj terciarajn vojojn en flava kaj oranĝa respektive. Iu ajn vojo kun aliro-etikedo alia ol jes ricevos ekstran linian stilon sube (object-z-index:-1.0;) la ĉefa linio. Se tiu parto de la strato hazarde estas ponto, ĝi ankaŭ ricevos duontravideblan bluan supermeton. La relativa larĝa valoro (width: +2;) referencas al la larĝo sur la defaŭlta tavolo (2 aŭ 3 en ĉi tiu kazo).

La nomo por la tavolo povas esti iu ajn identigilo.

Se vi preterlasas la tavolon en la elektilo, ĉi tio estas la sama kiel uzi ::default.

Plia ekzemplo:

node[amenity=parking] {
    icon-image: "presets/vehicle/parking/parking.svg";    /* montras la internan parkadan ikonon de JOSM en la defaŭlta tavolo */
    text: ref;                                            /* montras la valoron de la ŝlosilo ref kiel tekston en la defaŭlta tavolo */
}

node[amenity=parking][fee=yes]::fee {
    icon-image: "presets/money/exchange.svg";             /* montras la internan interŝanĝan ikonon de JOSM en la paga tavolo */
    icon-offset-x: 14;                                    /* ŝovas la ikonon */
    icon-offset-y: -12;                                   /* ŝovas la ikonon */
    text: charge;                                         /* montras la valoron de la ŝlosilo charge kiel tekston en la paga tavolo */
    text-offset-x: 16;                                    /* ŝovas la tekston */
    text-offset-y: 17;                                    /* ŝovas la tekston */
}

La rezulto aspektas jene:

No image "multiple_icons_and_texts.png" attached to Eo:Help/Styles/MapCSSImplementation

Krome, vi povas uzi la * tavolon por anstataŭigi kaj pravalorizi ĉiujn tavolojn.
Ĝi anstataŭigas ĉiujn ekzistantajn subpartojn, do

way::A { a; } 
way::B { b; } 
way::* { c; }  /* anstataŭigas ĉiujn ekzistantajn subpartojn */

egalas al

way::A { a; } 
way::B { b; } 
way::A { c; } /* anstataŭigas a per c ĉiujn ekzistantajn subpartojn */
way::B { c; } /* anstataŭigas b per c ĉiujn ekzistantajn subpartojn */

Kaj ĝi pravalorizas novajn subpartojn. Alivorte:

way::* { a; } 
way::A { b; } 

egalas al

way::A {} 
way::* { a; } 
way::A { b; } 

kio siavice estas la sama kiel

way::A { a; } 
way::A { b; } 

way::A { a; b; }

Grupiĝo

Reguloj kun komuna deklara bloko povas esti grupigitaj en unu:

area[landuse=forest] { color: green;   width: 2; }
area[natural=wood] { color: green;   width: 2; }

estas la sama kiel

area[landuse=forest], area[natural=wood] { color: green;   width: 2; }

Klasoj

Vi povas asigni klasojn al kongruaj elementoj, kaj difini aliajn elektilojn uzante tiujn klasojn:

/* asigni klasojn */
elektilo {
  set klaso;
  /* aŭ ekvivalente */
  set .klaso;
}

/* kongrui klasojn */
way.klaso, node[foo=bar].klaso {
  /* ... */
}

Ekzemplo por asigni/kongrui klason nomatan path:

way[highway=footway] { set path; color: #FF6644; width: 2; }
way[highway=path]    { set path; color: brown; width: 2; }
way.path { text:auto; text-color: green; text-position: line; text-offset: 5; }

Vi povas ankaŭ nei klasojn. Ekz. way!.path por ĉiuj vojoj, kiuj ne estas parto de la klaso .path.

Klasoj kaj Tavolo kune

Se vi volas uzi tavolon kaj klasojn kune, bonvolu noti, ke vi devas identigi la klason per is_prop_set.

node[railway=signal] { set sgnl; }

/* ĝi ne funkcias */
node.sgnl::layer_signal_icon  { z-index: 1000; ... icon: icon/signal-icon.svg; ... }
node.sgnl::layer_signal_text  { z-index: 1010; ... text: concat("Name of signal: ", tag("ref")); ..... )

/* uzu anstataŭe: is_prop_set("...", "default") */
node[is_prop_set("sgnl", "default")]::layer_signal_icon  { z-index: 1000; ... icon: icon/signal-icon.svg; ... }
node[is_prop_set("sgnl", "default")]::layer_signal_text  { z-index: 1010; ... text: concat("Name of signal: ", tag("ref")); ..... )

@supports Kondiĉa Procezo

@supports reguloj estas uzataj por preterlasi sekcion de la stilo sub certaj kondiĉoj. Kutime vi volas uzi trajton, kiu estas enkondukita en pli nova versio de JOSM, sed havi rezervan stilon por uzantoj de malnovaj JOSM-klientoj. Ĉi tiu trajto venis kun r8087. Ekzemplo:

@supports (min-josm-version: 9789) {
    way[highway] {
        width: 4;
        color: orange;
    }
    /* fancy new stuff */
    /* ... */
}

@supports (max-josm-version: 9788) {
    way[highway] {
        width: 4;
        color: blue;
    }
    /* fall back mode, using more simple features */
    /* ... */
}

@supports (icon-offset-x) {
    /* only if icon-offset-x property is supported */
    node[amenity] {
        icon-offset-x: 5;
    }
}

La sintakso proksime kongruas kun la oficiala css sintakso. La sekvaj kondiĉoj estas subtenataj:

Kondiĉo

Priskribo

(<mapcsskey>)

Kontrolu, ĉu certa mapcss-ŝlosilo estas subtenata, ekz. repeat-imageicon-offset-x.

(min-josm-version: <number>)

Nur inkluzivi @supports sekcion, kiam la aktuala versio de JOSM estas pli granda ol aŭ egala al la specifita nombro.

(max-josm-version: <number>)

Nur inkluzivi @supports sekcion, kiam la aktuala versio de JOSM estas malpli granda ol aŭ egala al la specifita nombro.

(user-agent: <string>)

Nur inkluzivi @supports sekcion, kiam la nomo de la redaktilo / prezentilo kongruas kun la donita ĉeno. En JOSM, la sola akceptata valoro estas josm.

Kondiĉoj povas esti kombinitaj kun and:

@supports (min-josm-version: 8087) and (max-josm-version: 8200) {
 /* nur por JOSM-versioj 8087 ĝis 8200 */
}

Aliaj logikaj operaciloj kiel or kaj not povas ankaŭ esti uzataj. Krampoj estas necesaj, se vi volas kombini malsamajn logikajn operacilojn:

@supports ((min-josm-version: 8087) and (max-josm-version: 8200)) or (user-agent: myEditor) {
  /* por JOSM-versio 8087 ĝis 8200 kaj por la redaktilo nomata "myEditor" */
}

Ĉar @supports reguloj estas nur subtenataj en JOSM r8087 kaj poste, vi devus ankaŭ specifi ĉi tion kiel minimuman JOSM-version en la meta-elektilo:

meta {
    min-josm-version: "8087"; /* Ĉi tiu stilo uzas @supports regulojn */
    /* ... */
}

Stilaj Agordoj

Stilaj agordoj estas uzataj por provizi al la uzanto agordojn por adapti mapan stilon. La uzanto povas uzi ilin en la MapPaint dialogo. La sekvaj type de agordoj estas haveblaj:

Agordoj de tipo boolean

Krei agordon de tipo boolean:

setting::highway_casing {
  type: boolean;
  label: tr("Draw highway casing");
  default: true;
}

Uzi agordon de tipo boolean:

way[highway][setting("highway_casing")] {
  casing-width: 2;
  casing-color: white;
}

Agordoj de tipo double

Krei agordon de tipo double:

setting::place_font_size {
  type: double;
  label: tr("Set place name font size...");
  default: 11;
}

Uzi agordon de tipo double:

node.place, way.place, area.place {
  font-size: setting("place_font_size");
}

Agordoj de tipo string

Krei agordon de tipo string:

setting::textdisplay {
  type: string;
  label: tr("key used for displaying");
  default: "name"; /* ekzemploj por uzo: alt_name, old_name, addr:housename, ref, operator, ... */
}

Uzi agordon de tipo string:

way {
  text: tag(setting("textdisplay"));
}

Agordoj de tipo color

Krei agordon de tipo color. La default koloro povas esti iu ajn koloro kiel komprenata sub Priskribo de propraĵaj valoroj:

setting::colordisplay {
  type: color;
  label: tr("key used for displaying");
  default: colorDisplayCustomPref#FF00FF;
}

Uzi agordon de tipo color:

way {
  color: setting("colordisplay");
}

Grupiĝo de agordoj

Similaj agordoj povas esti grupigitaj kune per difini agordajn grupojn (ekde r15289):

settings::my_group {
  label: tr("my wonderful group");
  icon: "my_beautiful_icon";
}

Etikedo estas deviga, ikono estas nedeviga.

Iam agorda grupo estas difinita, ĝi povas esti referencata de ĉiuj agordoj apartenantaj al ĝi:

setting::hide_icons {
  type: boolean;
  label: tr("Hide icons at low zoom");
  default: true;
  group: "my_group";
}

Agordaj grupoj estas montrataj kiel submenuoj de la stila agorda menuo. Se almenaŭ du agordoj apartenas al grupo, speciala "Ŝalti ĉiujn agordojn" menuero permesas rapide ŝalti/malŝalti ĉiujn agordojn de ĉi tiu grupo samtempe. Uzada ekzemplo: MapWithAI (en).

Propraĵoj

Ĝeneralaj propraĵoj

Ŝlosilo Priskribo Valora Formato Defaŭlta Valoro
z-index Specifu la ordon, en kiu la objektoj estas desegnitaj: La objektoj kun pli alta z-index estas desegnitaj supre de objektoj kun pli malalta z-index Nombro (povas esti negativa) 0
major-z-index Simila al z-index, sed ĝi havas pli altan prioritaton ol z-index. Do se unu objekto havas pli altan major-z-index ol la alia, ĝi estas desegnita supre. Se la major-z-index estas la sama, z-index decidas. Nombro (povas esti negativa) Dependas de stila elemento: area: 1, casing: 2, left-/right-casing: 2.1, line-pattern: 2.9, line: 3, point: 4, default-point: 4.1, line-text: 4.9, point-text: 5
object-z-index Simila al z-index, sed havas pli malaltan prioritaton. Kontrolas la desegnan ordon por supermetitaj objektoj. Ekz. por du kruciĝantaj vojoj kun teksto: Uzu z-indexmajor-z-index se vi unue volas desegni la du liniojn kaj poste la du surskribojn. Uzu object-z-index se unu el la vojoj devus esti tute supre de la alia. Nombro (povas esti negativa) 0
modifier Pli bona kontrolo, ĉu defaŭlta linio / noda simbolo estas generita de JOSM. Ĉi tio okazas, kiam ne estas taŭga stilo (modifier=false) trovita sur iu ajn tavolo. falsetrue false por la defaŭlta tavolo kaj true por iu ajn alia tavolo

Notu, ke pro performaj kialoj la valoroj por la tri z-indeksoj estas limigitaj al 24 bitaj glitkomaj valoroj kun maks. 5 decimalaj ciferoj. Nuntempe la interna mapstila stilo uzas valorojn kun maks. 2 ciferoj antaŭ kaj post la dekuma apartigilo. Por eviti problemojn uzu valorojn de z-indeksoj inter -99.999 kaj +99.999. (Vidu ankaŭ #14485)

Ikonaj kaj simbolaj stiloj

Ŝlosilo Priskribo Valora Formato Defaŭlta Valoro
icon-image La ikono ĉe noda pozicio. Vidu ankaŭ Bildoj. Bildo -
icon-opacity Travidebleco de la ikona bildo Travidebleco 1.0
icon-width Larĝo de la ikono. Se nur unu el la propraĵoj icon-width kaj icon-height estas donita, la bildo estos skalita proporcie. La ikono konservos la originan grandecon, se nek icon-width nek icon-height estas agordita. Nombro -
icon-height Alto de la ikono. (Vidu icon-width) Nombro -
icon-offset-x Ŝovu la ikonon en horizontala direkto (pozitivaj valoroj dekstren) (ekde r8085) Nombro 0
icon-offset-y Ŝovu la ikonon en vertikala direkto (pozitivaj valoroj malsupren) (ekde r8085) Nombro 0
icon-rotation Rotaciu la ikonon laŭhorloĝe aŭ kontraŭhorloĝe (negativa valoro)(ekde r8260) [rad], [rad]rad, [deg]°, [deg]deg, [grad]grad, [turn]turn (difino)
aŭ kardinala direkto (ekz. northeastsw);
way por rotacii la ikonon en la direkto de la patra vojo.
Vidu ankaŭ la funkciojn degree_to_radians, cardinal_to_radians.
Ekde versio 18678 funkcio parent_way_angle() estas alternativo al way: ekz. way > node[...]::layer_x { ... icon-rotation: parent_way_angle(); ... }
-
icon-position Difinu la pozicion de la ikono por areoj. Samkiel text-position (ekde r11730). center, inside, line center
symbol-shape Montru simbolon ĉe la pozicio de la nodo square, circle, triangle, pentagon, hexagon, heptagon, octagon, nonagon, decagon -
symbol-size Grandeco de la simbolo Nombro, povas esti relativa ("+4") 10
symbol-stroke-width kontura larĝo Larĝo 1.0 se symbol-stroke-color estas agordita
symbol-stroke-color linia koloro Koloro #FFC800 se symbol-stroke-width estas agordita
symbol-stroke-opacity linia travidebleco Travidebleco 1.0
symbol-fill-color pleniga koloro por la formo Koloro blue, krom se aŭ symbol-stroke-widthsymbol-stroke-color estas agordita
symbol-fill-opacity pleniga travidebleco Travidebleco 1.0
text-..., font-... vidu ĝeneralajn Tekstajn & Tiparajn propraĵojn

Ne fidu je la defaŭltaj valoroj por symbol-... propraĵoj (krom por opacity). Ili estas intencitaj por "rapida & malpura" stilaj folioj kaj devus esti agorditaj al eksplicita valoro.

Liniaj stiloj

Ŝlosilo Priskribo Valora Formato Defaŭlta Valoro
width Linia larĝo Larĝo -
color Linia koloro Koloro valoro de fill-color
(se ne agordita) JOSM-a defaŭlta
sennoma koloro (#808080)
opacity Kiel travidebla la linio estas. Travidebleco 1.0
dashes Tabelo de alternaj ŝaltitaj/malŝaltitaj longoj listo de nombroj, ekz.
> 15, 5

povas esti skribita kiel esprimo:
> list(3, 4, 5, 6)

aŭ la ŝlosilvorto none
por malŝalti strekojn
-
dashes-offset ŝovu la strekan modelon per certa kvanto Nombro (>= 0) 0
dashes-background-color La koloro uzata inter la strekoj (nedeviga) Koloro -
dashes-background-opacity Travidebleca valoro por la streka fono Travidebleco valoro de opacity
linecap Formo ĉe la fino de la linio (vidu ĉi tie) none, round, square none
linejoin Formo ĉe la liniaj anguloj round, miter, bevel round
miterlimit Aplikebla por linejoin: miter.
Agordas la maksimuman transpaŝon, kiam liniaj segmentoj renkontiĝas ĉe tre malgranda angulo
Nombro (>= 1.0) 10.0
offset Movu linion maldekstren aŭ dekstren (kiam rigardante en voja direkto).
Ĉi tio povus esti uzata por desegni multajn liniojn por unu vojo aŭ marki la maldekstran kaj dekstran flankojn de vojo malsame.
Nombro (pozitiva valoro movas linion maldekstren,
negativa dekstren)
0
text-position agordu al line, se teksto devus esti desegnita laŭ la linio line, center -
text-...,
font-...
vidu ĝeneralajn Tekstajn & Tiparajn propraĵojn
repeat-image ripetata bildo laŭ linio (ekde r5801) Bildo -
repeat-image-width Larĝo de la bildo (nedeviga, vidu icon-width) (ekde r5811) Nombro -
repeat-image-height Alto de la bildo (nedeviga) (ekde r5811) Nombro -
repeat-image-align Vicigo de la bildo.
Supra-, malsupra rando aŭ la (horizontala) centra linio de la bildo estos laŭ la linio (ekde r5801)
top, center, bottom center
repeat-image-offset Deŝovo de la linio (ekde r5801) Nombro 0
repeat-image-spacing Spaco inter ripetataj bildoj (ekde r5801) Nombro 0
repeat-image-phase Komenca spaco ĉe la komenco de la linio (ekde r5812) Nombro 0
repeat-image-opacity Travidebleco de la ripetata bildo (ekde r16700) Nombro 1.0

Ĉiuj ĉi tiuj propraĵoj (krom por text-... kaj font-...) ekzistas ankaŭ kun la casing- prefikso. La kovraĵo estas dua sendependa linia elemento, kiu estas desegnita sub la normala linio kaj povas esti uzata por desegni maldikan kadron ĉirkaŭ la linio en alia koloro.

Ŝlosilo Priskribo Valora Formato Defaŭlta Valoro
casing-width Larĝo de la kadro ambaŭflanke de la ĉefa linio.
En JOSM < 5214: Tuta larĝo de la kovraĵo
Larĝo (inversas al width se relativa larĝo estas specifita) -
casing-color Kovraĵa koloro Koloro valoro de fill-color aŭ (se ne agordita)
JOSM-a defaŭlta sennoma koloro (#808080)
casing-opacity Kiel travidebla la kovraĵo estas. Travidebleco 1.0
casing-... ... ... ...

Simile al casing-, ekzistas ankaŭ la left-casing- kaj right-casing- prefikso. Ĝi desegnas aldonaĵajn liniojn maldekstren kaj dekstren de la ĉefa linio.

Areaj stiloj

Ŝlosilo Priskribo Valora Formato Defaŭlta Valoro
fill-color Koloro, per kiu plenigi la areon. Ĝis 11700, la alfa komponanto estis agordita al 50 por krei travideblecan efekton. Koloro -
fill-image Bilda modelo Bildo -
fill-extent Agordu ĉi tiun propraĵon, por desegni nur la konturon de la areo. La nombro specifas, kiom for plenigi de la rando de la areo al la centro. (Se ne agordita, la areo estos tute plenigita) (ekde r9008) Nombro -
fill-extent-threshold Agordu ĉi tiun propraĵon, por desegni plenan areon, kiam la donita procento de kovro estas atingita. Povas esti pli granda ol 100%, ĉar la kovrita areo estas taksata kiel perimetro * extent. Nombro -
fill-opacity Kiel travidebla la plenigo estas; aplikebla al ambaŭ koloro kaj bildo Travidebleco 0.2 (ekde r11700, 1.0 antaŭ tio)
(povas esti ŝanĝita per la preferoj mappaint.fillalpha kaj
mappaint.fill-image-alpha)
text-position agordu al center, se teksto devus esti desegnita en la centro de la areo. Agordu al inside por meti la tekston tute ene de la areo. (ekde r11722) line, center, inside -
text-..., font-... vidu ĝeneralajn tekstajn & tiparajn propraĵojn

Devigaj propraĵoj por krei Arean stilon: fill-colorfill-image

Tekstaj & Tiparaj propraĵoj

Ŝlosilo

Priskribo

Valora Formato

Defaŭlta Valoro

text

Kiel trovi la etikedan tekston.
Neniu etikedo estas montrata, krom se ĉi tiu instrukcio estas ĉeesta.

auto

Derivu la tekston aŭtomate. La defaŭltaj nomaj etikedoj estas: "name:"+<LANG>,
"name", "int_name", "ref", "operator", "brand" kaj "addr:housenumber".

Agordu liston de etikedaj nomoj en la prefero "mappaint.nameOrder" por
ŝanĝi ĉi tiun liston. (Post ŝanĝi la liston, restartigo de JOSM estas necesa.)

Ĉeno

Indikas la ŝlosilon de la etikedo, kies valoro estas uzata kiel teksto.

Esprimoj

Vi povas enigi esprimon por kalkuli la tekston, kiu estos montrata. Ekzemploj:

  • eval("this is a static text") - montras statikan tekston
  • eval(concat(tag("first"), "-", tag("second"))) - montras
    la kunmetitajn etikedojn "first" kaj "second"

""

Por forigi antaŭe agorditan tekston.

-

text-color la teksta koloro Koloro white por linioj kaj nodoj,
#c0c0c0 por areoj
(JOSM "text" kaj "areatext"
koloraj preferoj)
text-opacity kiel travidebla la teksto estas Travidebleco 1.0
text-offset-x ŝovu la tekston horizontale,
(ne subtenata por teksto laŭ linio)
Nombro 0
text-offset-y
(povas ankaŭ esti skribita kiel
text-offset)
ŝovu la tekston vertikale, pozitivaj valoroj ŝovas la tekston supren Nombro 0
text-halo-radius grandeco de teksta fona kadro
(por fari tekston videbla sur fono
kun simila koloro)
Nombro -
text-halo-color koloro de la teksta halo Koloro komplemento de la teksta koloro
text-halo-opacity travidebleco por la teksta halo Travidebleco 1.0
text-anchor-horizontal horizontala teksta etikedado left, center, right right
text-anchor-vertical vertikala teksta etikedado above, top, center, bottom, below bottom
text-rotation Rotaciu la tekston laŭhorloĝe aŭ kontraŭhorloĝe (negativa valoro)
(ekde r16253)
[rad], [rad]rad, [deg]°, [deg]deg, [grad]grad, [turn]turn
(difino) aŭ kardinala direkto (ekz. northeastsw);
way por rotacii la tekston en la direkto de la patra vojo.
Vidu ankaŭ la funkciojn degree_to_radians, cardinal_to_radians.
Ekde versio 18678 funkcio parent_way_angle() estas alternativo al way: ekz. way > node[...]::layer_x { ... text-rotation: parent_way_angle(); ... }
(Notu, ke la direkto signifas, kie la supra rando de la teksto frontas.
Tio signifas, ke kun la defaŭlta direkto de nordo la teksto fluas orienten
(kun maldekstre-al-dekstre lingvo).
Do se vi volas fluigi ĝin al ekz. sudo, vi devas agordi orienten.)
-
text-position vidu Areaj stiloj kaj Liniaj stiloj
font-family tipara familio Ĉeno "Droid Sans"
(JOSM prefero "mappaint.font")
font-size tipara grandeco Nombro 8
(JOSM prefero "mappaint.fontsize")
font-weight grasa aŭ ne bold, normal normal
font-style kursiva aŭ ne italic, normal normal

Uzant-difinitaj propraĵoj

  • En Mapaj stiloj vi povas difini iun ajn propran propraĵon, ekz.: crc: CRC32_checksum(tag(name))/429496.7296;
  • En Validatoraj reguloj ili devas esti prefiksitaj per -, ekz.: -osmoseItemClassLevel: "1210/1/1";

Priskribo de propraĵaj valoroj

Larĝo

  • 14.0 (iu ajn pozitiva nombro)
  • default (uzu JOSM-an defaŭltan linian larĝon, kiu estas 2, sed povas esti agordita)
  • thinnest (desegnas la linion kiel eble plej maldika)
  • +3 (kun pluso antaŭe) aldonas la kvanton al la larĝo sur la defaŭlta tavolo. Ĉi tio aplikiĝas nur por stiloj, kiuj ne estas sur la defaŭlta tavolo, ekz. emfazoj. Alia maniero skribi ĉi tion estus prop("width","default")+3. Por casing-width, ĉi tio referencas al la width valoro sur la sama tavolo.

Bildo

Vidu Help/Styles/Images.

Koloro

  • nomita koloro kiel trovita en ĉi tiu listo
  • html-stilo: #RRGGBB, #RGB, #RRGGBBAA
  • rgb(/*r*/, /*g*/, /*b*/) - rgb valoro kun argumentoj de 0.0 ĝis 1.0
  • rgba(/*r*/, /*g*/, /*b*/, /*alpha*/) - rgb valoro kun alfa
  • hsb_color(/*hue*/, /*saturation*/, /*brightness*/) - koloro el HSB kolorospaco
  • se la koloro estas prefiksita per nomo kaj #, ekz. color: highway_track#6e541c; ĝi aperos en la Kolorprefero kaj finaj uzantoj povas adapti la koloron tie mem

Travidebleco

  • de 0.0 (travidebla) ĝis 1.0 (opaka)

Ĉeno

  • iu ajn signoĉeno, en citiloj, ekz. "images/fill.png". Se la ĉeno estas identigilo, citiloj estas nedevigaj. (Citilo kaj retroklina signo povas esti eskapitaj.)

Nombro

  • entjero aŭ glitkomo (en simpla formo ekz. 0.3). Ĝenerale povas esti negativa, sed plejmultaj propraĵoj ne subtenas negativajn nombrojn
  • havas specialan signifon, se vi metas "+" signon antaŭe (relativa larĝo)

Eval-esprimoj

Vidu Javadoc de Funkcioj por la ĝisdatigita listo de funkcioj subtenataj de JOSM-a MapCSS-implementado.

+, -, *, /
aritmetikaj operacioj
||, &&, !
buleaj operacioj
<, >, <=, >=, ==, !=
komparaj operaciloj
asin, atan, atan2, ceil, cos, cosh, exp, floor, log, max, min, mod (ekde r17759), random, round, signum, sin, sinh, sqrt, tan, tanh
la kutima signifo, detaloj
cond(b, fst, snd)
b ? fst : snd
se (b) tiam fst alie snd
list(a, b, ...)
krei liston de valoroj, ekz. por la dashes propraĵo
get(lst, n)
akiri la n-an elementon de la listo lst (kalkulado komenciĝas je 0) [ekde r5699]
split(sep, str)
dividas ĉenon str ĉe okazoj de la apartigilo sep, redonas liston [ekde r5699]
prop(p_name)
valoro de la propraĵo p_name de la aktuala tavolo, ekz. prop("width")
prop(p_name, layer_name)
propraĵo de la tavolo layer_name
is_prop_set(p_name)
vera, se propraĵo p_name estas agordita por la aktuala tavolo
is_prop_set(p_name, layer_name)
vera, se propraĵo p_name estas agordita por la tavolo layer_name
tag(key_name)
akiri la valoron de la ŝlosilo key_name de la objekto en demando
parent_tag(key_name)
akiri la valoron de la ŝlosilo key_name de la patra objekto
parent_tags(key_name)
redonas ĉiujn patrajn valorojn por la ŝlosilo key_name kiel liston ordigitan laŭ natura ordo [ekde r8775]
has_tag_key(key_name)
vera, se la objekto havas etikedon kun la donita ŝlosilo
rgb(r, g, b)
krei koloran valoron (argumentoj de 0.0 ĝis 1.0)
hsb_color(h, s, b)
krei koloron el hue, saturation kaj brightness (argumentoj de 0.0 ĝis 1.0) [ekde r6899]
red(clr), green(clr), blue(clr)
akiri valoron de koloraj kanaloj en rgb koloromodelo
alpha(clr)
akiri la alfan valoron de la donita koloro [ekde r6749]
length(str)
longo de ĉeno
count(lst)
longo de listo, t.e., kalkulas ĝiajn elementojn [ekde r7162]
length(lst)
longo de listo ([ekde r5699] – malrekomendita ekde r7162
any(obj1, obj2, ...)
redonas la unuan objekton, kiu ne estas nula (antaŭe coalesce, [ekde r7164])
concat(str1, str2, ...)
kunmeti la ĉenojn al unu
join(sep, str1, str2, ...)
kunigi ĉenojn, kun sep kiel apartigilo [ekde r6737]
join_list(sep, list_name)
kunigas la elementojn de la listo list_name al unu ĉeno apartigita per la apartigilo sep [ekde r8775]
upper(str)
konverti ĉenon al majusklo [ekde r11756]
lower(str)
konverti ĉenon al minusklo [ekde r11756]
title(str)
konverti ĉenon al titola kazo [ekde r17613] ("i am FINE""I Am Fine")
trim(str)
forigi komencajn kaj finajn blankajn spacojn de ĉeno [ekde r11756]
trim_list(list_name)
forigi komencajn kaj finajn blankajn spacojn de listo de ĉenoj, forigos erojn, kiuj estas malplenaj poste [ekde r15591]
JOSM_search("...")
vera, se JOSM-serĉo aplikiĝas al la objekto
tr(str, arg0, arg1, ...)
traduki de la angla al la aktuala lingvo (nur por ĉenoj en la JOSM-uzantinterfaco) [ekde r6506]
regexp_test(regexp, string)
testi, ĉu string kongruas kun modelo regexp [ekde r5699]
regexp_test(regexp, string, flags)
testi, ĉu string kongruas kun modelo regexp; flags estas ĉeno, kiu povas enhavi "i" (uskleco-sentiva), "m" (multlinia) kaj "s" ("dot all") [ekde r5699]
regexp_match(regexp, string)
Provas kongrui string kun modelo regexp. Redonas liston de kaptaj grupoj en kazo de sukceso. La unua elemento (indekso 0) estas la kompleta kongruo (t.e. string). Pliaj elementoj respondas al la krampitaj partoj de la regula esprimo. [ekde r5701]
regexp_match(regexp, string, flags)
Provas kongrui string kun modelo regexp. Redonas liston de kaptaj grupoj en kazo de sukceso. La unua elemento (indekso 0) estas la kompleta kongruo (t.e. string). Pliaj elementoj respondas al la krampitaj partoj de la regula esprimo. Flags estas ĉeno, kiu povas enhavi "i" (uskleco-sentiva), "m" (multlinia) kaj "s" ("dot all") [ekde r5701]
substring(str, idx)
redoni la subĉenon de str, komencante ĉe indekso idx (0-indeksita) [ekde r6534]
substring(str, start, end)
redoni la subĉenon de str, komencante ĉe indekso start (inkluziva) ĝis end (ekskluziva) (0-indeksita) [ekde r6534], negativa fina indekso kalkulas de la ĉena fino [ekde r19259]
replace(string, old, new)
Anstataŭigi iun ajn okazon de la subĉeno old ene de la ĉeno string per la teksto new
osm_id()
redonas la OSM-idon de la aktuala objekto [ekde r5699]
osm_user_name()
redonas la OSM-uzantnomon, kiu lastatempe tuŝis la aktualan objekton [ekde r15246]
osm_user_id()
redonas la OSM-uzant-idon, kiu lastatempe tuŝis la aktualan objekton [ekde r15246]
osm_version()
redonas la OSM-version numeron de la aktuala objekto [ekde r15246]
osm_changeset_id()
redonas la idon de la ŝanĝaro, al kiu la aktuala objekto estis lastatempe alŝutita [ekde r15246]
osm_timestamp()
redonas la tempon de lasta modifo al la aktuala objekto, kiel tempindiko [ekde r15246]
parent_osm_id()
redonas la OSM-idon de la patra objekto (kongruita per infana elektilo) [ekde r13094]
URL_encode(str)
procento-kodigi ĉenon. Povas esti utila por datumaj URL-oj [ekde r6805]
URL_decode(str)
procento-malkodigi ĉenon. [ekde r11756]
XML_encode(str)
eskapigi specialajn signojn en xml. Ekz. < iĝas &lt;, aliaj specialaj signoj: >, ", ', &, \n, \t kaj \r [ekde r6809]
CRC32_checksum(str)
kalkuli la CRC32 kontrolsumon de ĉeno (rezulto estas entjero de 0 ĝis 232-1) [ekde r6908]
siunit_length(str)
konverti longecajn unuojn al metroj (tolerema, ignorante blankajn spacojn) [ekde r19089]
is_right_hand_traffic()
Kontroli, ĉu estas maldekstra-traflanko aŭ dekstra-traflanko ĉe la aktuala loko. [ekde r7193]
number_of_tags()
redonas la nombron de etikedoj por la aktuala OSM-objekto [ekde r7237]
print(o)
presi ĉenan reprezenton de o al la komandlinio (por sencimigo) [ekde r7237]
println(o)
presi ĉenan reprezenton de o al la komandlinio, sekvitan de nova linio (por sencimigo) [ekde r7237]
JOSM_pref(key, default)
Akiri valoron de la JOSM-advanced preferoj. Tiel vi povas oferti certajn opciojn al la uzanto kaj fari la stilon adaptebla. Ĝi funkcias kun ĉenoj, nombroj, koloroj kaj buleaj valoroj.
[Ĉi tiu funkcio ekzistas ekde versio r3856, sed kun iuj limigoj. JOSM_pref ĉiam redonas ĉenon, sed en versio r7237 kaj antaŭe, la aŭtomata konverto de ĉeno al bulea kaj koloro ne funkciis. Vi povas uzi la sekvajn solvojn por buleaj valoroj kaj koloro en versio r7237 kaj antaŭe: cond(JOSM_pref("myprefkey", "true")="true", "X", "O") kaj html2color(JOSM_pref("mycolor", "#FF345611")). Ĉi tiuj eksplicitaj konvertoj ne plu estu necesaj en versio r7238 kaj poste. Aŭtomata konverto al nombro funkcias en iu ajn versio. Krome, en versio r16590, povas esti uzata por agordi kolorajn propraĵojn. Do * { set_color: JOSM_pref("pref", #000000); } kreas koloran propraĵon nun.]
setting()
por uzi stilan agordon [ekde r7450]
degree_to_radians()
redonas en gradoj donitan direkton en radianoj [ekde r8260]
cardinal_to_radians()
redonas kardinalan direkton en radianoj [ekde r8260]
waylength()
redonas la longon de la vojo en metroj [ekde r8253]
areasize()
redonas la areon de fermita vojo en kvadratmetroj [ekde r8253]
at(lat,lon)
redonas veran, se la objekta centroido situas ĉe donitaj lat/lon koordinatoj, ekz. por kontroli nodojn ĉe "nula insulo" node[at(0.0,0.0)] [ekde r12514]
is_similar(str1, str2)
redonas veran, se la du ĉenoj estas similaj, sed ne identaj, t.e., havas Levenshtein-distancon de 1 aŭ 2. Ekzemplo: way[highway][name][is_similar(tag(name), "Main Street")] kontrolas stratojn kun ebla tajperaro en la nomo (ekz. Main Streeg). [ekde r14371]
gpx_distance()
redonas la plej malaltan distancon inter la OSM-objekto kaj GPX-punkto [ekde r14802]
count_roles()
redonas la nombron de primitivoj en rilato kun la specifitaj roloj [ekde r15275]
sort(str1, str2, str3, ...)
ordigas tabelon de ĉenoj [ekde r15279]
sort_list(list_name)
ordigas liston de ĉenoj [ekde r15279]
tag_regex(regex)
redonas liston enhavantan la valorojn de ŝlosiloj, kiuj kongruas kun la regex [ekde r15317]
to_boolean(str)
redonas la ĉenan argumenton kiel bulean [ekde r16110]
to_byte(str)
redonas la ĉenan argumenton kiel bajton [ekde r16110]
to_short(str)
redonas la ĉenan argumenton kiel mallongan [ekde r16110]
to_int(str)
redonas la ĉenan argumenton kiel int [ekde r16110]
to_long(str)
redonas la ĉenan argumenton kiel longan [ekde r16110]
to_float(str)
redonas la ĉenan argumenton kiel flosantan [ekde r16110]
to_double(str)
redonas la ĉenan argumenton kiel duoblan [ekde r16110]
uniq(str1, str2, str3, ...)
redonas liston de ĉenoj, kiuj nur havas unikajn valorojn de tabelo de ĉenoj [ekde r15323]
uniq_list(list_name)
redonas liston de ĉenoj, kiuj nur havas unikajn valorojn de listo de ĉenoj [ekde r15323]
parent_way_angle()
redonas la angulon de la patra vojo kiel duoblan en rad [ekde r18664] (vidu: text-rotation aŭ icon-rotation)
convert_primitive_to_string(PrimitiveId)
redonas la primitivan idon kiel ĉenon [ekde r18829]
convert_primitives_to_string(PrimitiveId, PrimitiveId, ...)
redonas liston de primitivaj idoj konvertitaj al ĉenoj [ekde r18829]
parent_osm_primitives(optional key, optional value)
redonas liston de primitivaj idoj, kiuj kongruas kun la ŝlosilo kaj valoro (se ĉeestas) [ekde r18829]

Ekzemploj

  • cirkla simbolo por domnumero kun grandeco dependanta de la nombro de ciferoj
    node[addr:housenumber] { 
        symbol-shape: circle; 
        symbol-size: eval((min(length(tag("addr:housenumber")), 3) * 5) + 3); 
        symbol-fill-color: #B0E0E6; 
    
        text: "addr:housenumber"; 
        text-anchor-horizontal: center; 
        text-anchor-vertical: center; 
        text-offset-x: -1; 
        text-offset-y: -1; }
        
    node[addr:housenumber]::hn_casing { 
        z-index: -100; 
        symbol-shape: circle; 
        symbol-size: +2; 
        symbol-fill-color: blue; 
    }
    
  • inversigi kolorojn
    *::* {
        color: eval(rgb(1 - red(prop(color)), 1 - green(prop(color)), 1 - blue(prop(color))));
        fill-color: eval(rgb(1 - red(prop(fill-color)), 1 - green(prop(fill-color)), 1 - blue(prop(fill-color))));
    }
    
  • hazardaj aferoj
    way {
        width: eval(random() * 20);
        color: eval(rgb(random(), random(), random()));
    }
    
  • regexp-kongrua ekzemplo: ŝanĝi "nameXXXsubname" al "name::subname"
    *[name=~/.+XXX.+/] 
    {
        _match: regexp_match("(.+?)XXX(.+)", tag("name"));
        text: concat(get(prop("_match"),1), "::", get(prop("_match"),2));
    }
    
  • pentri konstruaĵojn en malsamaj koloroj laŭ strato en la adresaj etikedoj
    area[building][addr:street] {
        fill-color: hsb_color(CRC32_checksum(tag("addr:street"))/4294967296.0, 0.9, 0.7);
        fill-opacity: 0.8;
    }
    
  • kovraĵo ene de areo
    area[building]:clockwise {
        right-casing-width: 10;
    }
    area[building]:anticlockwise {
        left-casing-width: 10;
    }
    /* aŭ */
    area[building][is_clockwise()] {
        right-casing-width: 10;
    }
    area[building][is_anticlockwise()] {
        left-casing-width: 10;
    }
    
  • uskleco-sentiva elektilo. Ĉi tio kongruas: Name=Main Street, sed ankaŭ naMe=MAIN STREET
    way[/(?i)^name$/ =~ /(?i)^Main Street$/] {
    }
    

Kongruecaj notoj

MapCSS 0.2

Gramatiko

  • way[oneway=yes] ne havas iun ajn magion, vi povas uzi way[oneway?] anstataŭe
  • neniu @import
  • JOSM ne postulas eval(...) esti ĉirkaŭita ĉirkaŭ esprimoj, sed por kongrueco kun aliaj MapCSS-implementoj vi devus skribi ĝin.

Propraĵoj

Nuntempe, JOSM ne subtenas la sekvajn propraĵojn:

line:
image
label:
font-variant, text-decoration, text-transform, max-width
shield:
ne subtenata

Halcyon (Potlatch 2)

  • Teksta etikedo estas metita en la centro de la ikono. Por kongrueco kun Halcyon metu
    node { text-anchor-vertical: center; text-anchor-horizontal: center; }
    
    ĉe la komenco de via stila folio.
  • norma z-indekso en Halcyon estas 5, sed ĝi estas 0 en JOSM
  • image: circle; respondas al symbol-shape: circle;

Kothic

  • Kothic havas subtenon por eval, kiu verŝajne diferencas de JOSM-a eval.
  • Kothic komprenas unuojn, dum JOSM ĉiam kalkulas en rastrumeroj.
  • La elstaraĵaj trajtoj ne estas haveblaj en JOSM.

Ceyx

  • ŝajne havas [tunnel=1] anstataŭ [tunnel=yes] (Halcyon) aŭ [tunnel?] (JOSM)

Mediaj pridemandadoj (malrekomenditaj)

Noto: mediaj pridemandadoj estas malrekomenditaj. Vi devus uzi @supports regulojn anstataŭe (vidu supre).

Mediaj pridemandadoj estas uzataj por preterlasi sekcion de la stilo sub certaj kondiĉoj. Kutime vi volas uzi trajton, kiu estas enkondukita en pli nova versio de JOSM, sed havi rezervan stilon por uzantoj de malnovaj JOSM-klientoj. Ĉi tiu trajto venis kun r6970. Ekzemplo:

@media (min-josm-version: 9789) {
    way[highway] {
        width: 4;
        color: orange;
    }
    /* fancy new stuff */
    /* ... */
}

@media (max-josm-version: 9788) {
    way[highway] {
        width: 4;
        color: blue;
    }
    /* fall back mode, using more simple features */
    /* ... */
}

La sintakso proksime kongruas kun la oficiala css sintakso. La sekvaj kondiĉoj estas subtenataj:

Media kondiĉo

Priskribo

(min-josm-version: <number>)

Nur inkluzivi @media sekcion, kiam la aktuala versio de JOSM estas pli granda ol aŭ egala al la specifita nombro.

(max-josm-version: <number>)

Nur inkluzivi @media sekcion, kiam la aktuala versio de JOSM estas malpli granda ol aŭ egala al la specifita nombro.

(user-agent: <string>)

Nur inkluzivi @media sekcion, kiam la nomo de la redaktilo / prezentilo kongruas kun la donita ĉeno. En JOSM, la sola akceptata valoro estas josm.

Kondiĉoj povas esti kombinitaj kun and:

@media (min-josm-version: 6970) and (max-josm-version: 7014) {
 /* nur por JOSM-versioj 6970 ĝis 7014 */
}

Multoblaj kombinitaj kondiĉoj povas esti ĉenitaj per komo (logika ):

@media (min-josm-version: 6970) and (max-josm-version: 7014), (user-agent: myEditor) {
  /* por JOSM-versio 6970 ĝis 7014 kaj por la redaktilo nomata "myEditor" */
}

Ĉar mediaj pridemandadoj estas nur subtenataj en JOSM 6970 kaj poste, vi devus ankaŭ specifi ĉi tion kiel minimuman JOSM-version en la meta-elektilo:

meta {
    min-josm-version: "6970"; /* Ĉi tiu stilo uzas mediajn pridemandadojn */
    /* ... */
}
Last modified 6 weeks ago Last modified on 2025-03-14T13:40:35+01:00
Note: See TracWiki for help on using the wiki.