wiki:Nl:Help/Styles/MapCSSImplementation

Andere talen:

MapCSS Implementation

De implementatie van MapCSS voor JOSM wordt gebruikt voor de volgende mogelijkheden:

Overweeg het installeren van de MapCSS Syntax Highlighter in VS Code om visueel accentueren toe te voegen voor MapCSS van syntaxis voor kleur en valideren.

TODO: mogelijk meer

Algemene structuur

Een MapCSS-stijl heeft regels in de vorm van

selector {
    prop: value;
    /* ... */
    prop: value;
    /* en/of */
    set: class;
    set: .class;
    /* onthoud dat validatie-regels geen dubbele punt gebruiken na set */
}

Het algoritme om de stijlen voor een bepaald object te zoeken ziet er uit als dit:

 - voor elke regel:
     als de selector van toepassing is, stel de eigenschappen in vanuit het blok { }
 - analyseer de uiteindelijk lijst met eigenschappen en genereer daar stijlen uit

MapCSS gebruikt de indeling comment van CSS (/* ... */). Onthoud dat bij het niet uitvoerbaar maken van grote delen van een MapCSS-bestand, sommige constructies een onverwacht einde van het niet uitvoerbaar maken kunnen veroorzaken, bijvoorbeeld:

/*
*[highway][name =~ /^R(\.|:)? .*/] { /* het einde van de reguliere expressie definieert het onverwachte einde van het niet uitvoerbaar maken */
        throwWarning: tr("foo");
}
*/

Selectoren

Selectoren omvatten de filterexpressies van een MapCSS-regel. De regel wordt alleen toegepast op een object op de kaart, als de selector ervan overeenkomt met het object.

Selectoren in MapCSS zijn anders dan voor standaard CSS voor het web. MapCSS ondersteunt alleen een subset van de standaard CSS-selectoren, maar breidt ze uit met aanvullende selectoren die zijn vereist voor gegevens van OSM.

Enkele basisvoorbeelden:

/* toegepast op wegen met een tag highway=residential */
way[highway=residential] {  /*  de stijlen */}

/* toegepast op nieuwe, gesloten wegen op laag 1, indien die de tags amenity=parking en access=customers hebben, en indien 
 * dat het zoomniveau tussen 11 en 14 ligt 
 */
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 {..}

De verschillende elementen (type-, zoom- , condition selector, pseudo classes, layer identifier, grouping en child combinator) worden hieronder uitgelegd.

Type selector

Selector

Beschrijving

*

Komt overeen met elk object

node, way, relation

Komt overeen met objecten van OSM van het opgegeven type.

area

Komt overeen met elk gebied, ongeacht of de grens van het gebied slechts is gemodelleerd met één enkele weg of met een set wegen die zijn samengevoegd in een relatie.

area[natural=beach] {...} 
/* ... is gelijk aan ... */
way[natural=beach], relation[type=multipolygon][natural=beach] {...} 

Onthoud dat area ook niet gesloten wegen selecteert, dus kan het nuttig zijn de pseudoklasse :closed toe te voegen. De Validatie van JOSM zal een waarschuwing geven voor niet gesloten wegen die een stijl voor een gebied hebben.

meta

De selector meta start een speciale regel die aan het begin van het bestand zou moeten staan. Het geeft soms algemene informatie over het stijlblad. Alle software die MapCSS ondersteunt zou in staat moeten zijn om deze gedeelten zonder fouten te parsen, gebruik dus geen exotische syntaxis extensies in dit gedeelte.

meta {
    title: "Parking lanes";   /* titel weergegeven in het menu */
    icon: "logo_16x16x8.png";  /* klein pictogram, weergegeven in het menu naast de titel */
    version: "1.2";           /* de versie van de stijl */
    description: "...";       /* een of twee zinnen die de stijl beschrijven */
    author: "...";            /* de auteur(s) van de stijl */
    link: "https://...";       /* URL naar de webpagina van de stijl */
    min-josm-version: 6789;   /* de minimale versie van JOSM waarin deze stijl werkt */
}

canvas

Enige stijlinformatie niet specifiek voor knopen, wegen of relaties.

canvas {
    fill-color: #ffffea; /* de eerdere achtergrondkleur is vervallen sinds r7110 */
    default-points: false;
    default-lines: false;
}

Sleutel

Beschrijving

Indeling waarde

Standaard waarde

fill-color

Specificeert de overal gebruikte vul-/achtergrondkleur (background-color is vervallen sinds r7110).

Kleur

black

default-points

Of de standaard puntstijl zou moeten worden toegepast op knopen waar geen stijl op van toepassing is.

Boolean

true

default-lines

Of de standaard lijnstijl zou moeten worden toegepast op wegen waar geen stijl voor van toepassing is.

Boolean

true

Kind-selector

Indien een knoop deel is van een weg, zeggen we dat het een kind is van die weg. Soortgelijk: als een knoop, een weg, of een relatie kind is van een relatie, zeggen we dat het een kind is van die relatie.

In MapCSS kunt u een kind selector gebruiken die alleen overeenkomt als zowel het ouder- als het kind-object overeenkomen.

Voorbeeld:

/*
 * komt alleen overeen voor een weg die een kind is van een relatie met de tags 
 * type=route en route=foot
 */
relation[type=route][route=foot] > way {...}

Opmerkingen:

  • Zoomselector en Laagidentificatie zijn alleen relevant voor het gedeelte aan de rechterzijde van het teken >.
  • De functies prop() en is_prop_set() worden alleen ondersteund aan de rechterkant van het teken >.
  • De functie parent_tag en parent_tags (zie hieronder) kunnen worden gebruikt om toegang te krijgen tot de tags vanuit de ouder(s).
  • Voor compatibiliteit met de standaard MapCSS 0.2 wordt relation[type=route][route=foot] way {/*...*/}, zonder het teken groter dan > ook ondersteund. Er kan echter in dit geval geen Link-selector worden gespecificeerd.

Ouder-selector

In aanvulling op kind-selector ondersteunt JOSM ook de notie van een ouder-selector. Onthoud dat ouder-selectoren een JOSM-specifieke uitbreiding zijn van MapCSS en niet aanwezig zijn in andere implementaties van MapCSS.

Net als bij een kind-selector, komt een ouder-selector alleen overeen als zowel de ouder- als het kindobject overeenkomen. In tegenstelling tot de kind-selector, wordt het teken < gebruikt.

In tegenstelling tot de kind-selector, zal het ouder-object worden "geselecteerd". Met andere woorden, de eigenschappen in het declaratieblok {{{…}}} zijn van toepassing op het object aan de rechterkant van het teken "<".

Voorbeeld:

/*
 * komt overeen met een highway waarvan tenminste één knoop is getagd als traffic_calming=*
 */
node[traffic_calming] < way[highway] {...}

Voorwaarde-selector

Selectoren kunnen een set voorwaarden bevatten. Als één van deze voorwaarden evalueert naar 'false', komt de selector niet overeen en wordt de stijlregel niet toegepast.

Een attribuut voorwaarde specificeert een voorwaarde op een tag van een object van OSM.

Operator

Beschrijving

Voorbeeld

=

Exacte overeenkomst van de waarde.

way[highway=residential]                    /* is hoofdlettergevoelig, d.i. komt bijvoorbeeld niet overeen bij highway=Residential of Highway=residential  */               
node[name="Mijn naam"]                      /* gebruik aanhalingstekens als sleutel of waarde spaties bevat  */
node["name:pl"="Królewiec"]                 /* gebruik aanhalingstekens als sleutel of waarde speciale tekens zoals dubbele punten of Unicode-tekens bevat  */

!=

Waarde is niet gelijk aan

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

<, >, <=, >=

Vergelijking op numerieke waarden.

node[population >= 50000]                    /* populatie groter dan of gelijk aan 50000 */
node[ele = 3000]                             /* hoogte van exact 3000 meter          */

^=

Overeenkomst voorvoegsel

node[name ^= "mijnvoorvoegsel"]             /* waarde begint met 'mijnvoorvoegsel' */

$=

Overeenkomst achtervoegsel

node[name $= "mijnachtervoegsel"]           /* waarde eindigt op 'mijnachtervoegsel' */

*=

Overeenkomst subtekenreeks

node[name *= "mijn subtekenreeks"]          /* waarde bevat de subtekenreeks 'mijn subtekenreeks' */

~=

Lijst leden

*[vending~=stamps]                          /* de waarde van de tag voor de tag 'vending' bestaat uit een lijst met ;-gescheiden waarden    */
                                            /* en één van deze waarden is 'stamps' 
           */

=~

Overeenkomst Reguliere expressie

[name=~/^Mijn_patroon.*/]                   /* de waarde van de tag 'name' komt overeen met de reguliere expressie '^Mijn_patroon.*' */
                                            /* Onthoud dat reguliere expressies moeten zijn omsloten door /.../                     */

Hoofdlettergevoelige overeenkomsten kunnen worden bereikt via de ingebedde vlag expressie (?i) (zie Pattern.CASE_INSENSITIVE).

*[name =~ /^(?i)(parking)$/]                /* komt overeen met parking, Parking, PARKING, PaRkInG,…    */ 
*[name =~ /^(?U)(\p{Lower})+$/]             /* naam bestaat alleen uit kleine letters Unicode  */                 

!~ (sinds r6455)

Ontkennende Reguliere expressie overeenkomst

*[surface!~/paved|unpaved/]

(U+2208, sinds r6609)

element van

Komt overeen als een object overeenkomt met de rechter selector(en) en ten minste één element bevat dat overeenkomt met de linker selector(en).

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

Zoekt gebieden met amenity=parking die ten minste één knoop of gebied bevatten met amenity=parking. Sinds r15064 produceert deze regel een waarschuwing voor elk element aan de linkerkant als er meerdere overeenkomsten zijn.

(U+2286, since r15102)

Subset van of Is gelijk aan

Synoniem voor .

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

(U+2287, since r15102)

Superset van of Is gelijk aan

Komt overeen als een object overeenkomt met de rechter selector(en) en is opgenomen in één of meer elementen die overeenkomen met de linker selectoren.

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

zoekt knopen of gebieden met amenity=parking binnen gebieden met amenity=parking. Trager dan en dus niet nuttig in regels voor Validatie, maar kan nuttig zijn in het dialoogvenster voor Zoeken.

(U+2288, since r15102)

Noch Subset van noch Is gelijk aan

Komt overeen als een object overeenkomt met de rechter selector(en) en geen enkel element bevat dat overeenkomt met de linker selectoren.

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

zoekt gebieden amenity=parking die lit=yes hebben, naar geen lamp bevatten. Voeg altijd :closed2 toe om valse positieven te vermijden omdat niet gesloten gebieden nooit iets bevatten.

(U+2289, since r15102)

Noch Superset van of noch Is gelijk aan

Komt overeen als een object overeenkomt met de rechter selector(en) en niet is opgenomen in enig gebied dat overeenkomt met de linker selectoren.

area[landuse=residential]  *[building]

zoekt gebouwen die niet binnen een gebied landuse=residential liggen. Onthoud dat het zeer waarschijnlijk is dat deze operator valse positieven produceert wanneer u gebieden landuse=residential hebt die niet overeenkomen met :closed2.

(U+29C9, sinds r6613)

crossing

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

houdt rekening met tag layer indien ingesteld (sinds r12986)

Sinds r6554 is het mogelijk de waarde "value" te laten voorafgaan door iets (d.i. expressie na de operator) met een * om die daar niet naar te "verwijzen" (d.i. te zorgen dat het wordt beschouwd als een andere sleutel en daar de waarde van te verkrijgen). Dus, [key1 = *key2] of [key1=*key2] vergelijkt de waarde van key1 met de waarde van key2, en [key =~ */pattern/] beschouwt de waarde van het pattern van de sleutel als een reguliere expressie en vergelijkt die met de waarde van key.

In aanvulling daarop kunt u testen of een tag aanwezig is of niet:

Voorwaarde

Voorbeeld

Aanwezigheid van de tag

way[highway]                     /* komt overeen met elke weg met een tag 'highway'  (is oofdlettergevoelig)                                 */           */
way["name:fr"]                   /* aanhalingstekens gebruiken als naam van de tag speciale tekens bevat (witruimte, dubbele punten,Unicode-tekens etc.) */

Afwezigheid van de tag

way[!highway]                     /* komt overeen met elke weg die geen tag 'highway' heeft (is hoofdlettergevoelig */
way[!"name:fr"]                   /* aanhalingstekens gebruiken als naam van de tag
                                     speciale tekens bevat (witruimte, dubbele punten, Unicode-tekens etc.) */

Aanwezigheid van tag door overeenkomst Reguliere expressie (sinds r6547)

way[/^addr:/]                     /* komt overeen met elke sleutel `addr:*` */

Afwezigheid van tag door overeenkomst Reguliere expressie

way[!/^addr:/]                    /* komt overeen met elke weg die geen tag 'addr:*' heeft
   */

U kunt testen of de waarde van een tag een logische waarde 'waar'is. De waarde evalueert naar 'waar', als het of "yes", "true", of "1" is. Alle andere waarden evalueren naar 'onwaar'.

Voorwaarde

Voorbeeld

Testen op waarde 'waar'

way[oneway?]                   /* komt overeen met elke weg die een waarde 'waar' heeft voor de tag 'oneway' */

Testen op waarde 'onwaar' (sinds r6513)

way[oneway?!]                  /* komt overeen met elke weg die een waarde 'onwaar' heeft voor de tag 'oneway' */

Gebied-selector

U kunt testen of een ovject ligt binnen of buiten een specifiek gebied. JOSM heeft daar een interne database voor. Het bestand voor de gebieden kan worden gedownload en worden geopend in JOSM om het te bekijken (voorbeeld schermafdruk). Het bevat de grenzen van alle landen in de wereld. Vanwege de uitvoering zijn de grenzen vereenvoudigd. Zij kunnen op verzoek in speciale gevallen worden verfijnd. De gebieden zijn "getagd" met hun ISO_3166-1_alpha-2 codes. USA, Canada, China, India en Australië hebben aanvullende grenzen voor hun onderverdelingen. Bekijk de volgende voorbeelden over hoe de selectors voor gebieden te gebruiken. Gebieds-selectoren zijn minder nuttig in kaarttekenstijlen en kunnen erg veel bronnen in beslag nemen. Zij zijn echter veel nuttiger voor op MapCSS gebaseerde regels voor validatie. Er is een eenvoudiger manier om gebieden met links en rechts rijdend verkeer te selecteren, bekijk #Pseudoklassen. Bekijk #10387 voor de belangrijkste implementatie van deze mogelijkheid.

                                      /* komt overeen met elke knoop gelegen …                      */   
node[inside("FR")]                    /* … binnen Frankrijk (inclusief alle overzeese gebiedsdelen) */
node[inside("FX")]                    /* … binnen stedelijk Frankrijk (d.i. alleen het deel van het
                                         vasteland met zijn nabijgelegen  eilanden, incl. Corsica)  */    
node[inside("EU")]                    /* … binnen de Europese Gemeenschap                           */
node[inside("FR,DE")]                 /* … binnen Frankrijk __OF__ binnen Duitsland                 */
node[inside("US-FL")]                 /* … binnen de staat Florida van de VS                        */

node[outside("FR")]                   /* … buiten Frankrijk                                         */
node[outside("FR,DE")]                /* … buiten Frankrijk __EN__ buiten Duitsland                 */
node[inside("US")][outside("US-FL")]  /* … binnen de VS, met uitzondering van de staat Florida      */

Link-selector

In een kind-selector kunt u voorwaarden formuleren in de koppeling tussen een ouder- en kind-object.

Als de ouder een relatie is, kunt u voorwaarden formuleren voor de role dat een lid-object in deze relatie heeft.

relation[type=route] >[role="link"] way {  /* komt overeen met elke weg die lid is van een relatie voor een route met de rol 'link' */ 
   color: blue;
}

Operator

Beschrijving

Voorbeeld

=

Exacte overeenkomst van de naam van de rol. De naam van de role is verplicht in deze context.

relation >[role=residential] way           
relation >[role="Mijn naam"]   way           /* aanhalingstekens gebruiken als de waarde van de rol spaties of andere speciale tekens bevat */

De operatoren !=, ^=, $=, *= en ~= worden ook ondersteund. Bekijk #condition_selector_operators voorwaarden operatoren selector].

Knopen in wegen en leden in relaties zijn gesorteerd. U kunt voorwaarden formuleren voor de position van een knoop in een weg of een lid-object in een relatie. Positieve getallen tellen vanaf het eerste tot en met het laatste element, negatieve getallen (sinds r8236) tellen van het laatste tot en met het eerste element.

relation[type=route] >[index=1] way {  /* komt overeen met de eerste weg die een lid is van de relatie van de route  */ 
   color: blue;
}

way >[index=-1] node {  /* komt overeen met de laatste knoop van een weg  */ 
   symbol-stroke-color: green;
}

way!:closed >[index=1] node!:connection,
way!:closed >[index=-1] node!:connection {  /* komt overeen met alle eindknopen van enkele wegen */ 
   symbol-stroke-color: green;
}

Zoom-selector

U kunt een type selector decoreren met een zoom-selector. De zoom-selector beperkt het bereik aan zoomniveaus waarop de respectievelijke regel voor MapCSS wordt toegepast.

Voorbeeld 1 Voorbeeld 2 Voorbeeld 3 Beschrijving
way|z12 {...} node|z12 {...} node|z12[...] {...} Op zoomniveau 12
way|z13-15 {...} node|z13-15 {...} way|z13-15[...] {...} Van13 tot en met 15
way|z16- {...} node|z16- {...} node|z16-[...] {...} 16 en hoger
way|z-12 {...} node|z-12 {...} node|z-12[...] {...} 12 en lager
way {...} node{...} way[...] {...} elk zoomniveau

De precieze definitie van schaalbereiken voor elk zoomniveau kan in de toekomst wijzigen. Als vuistregel kunt u verwachten dat u ongeveer op zoomniveau n bent als afbeeldingen tegels van slippymap weergeven van het niveau n.

Pseudoklassen

Zie Javadoc voor de up-to-date lijst van pseudoklassen die worden ondersteund door JOSM's MapCSS-implementatie.

Klasse Beschrijving
:closed waar voor wegen waar de eerste knoop hetzelfde is als de laatste en voor elke relatie van een (volledig gedownloade) multipolygoon
:closed2 hetzelfde als hierboven, maar deze negeert of een multipolygoon volledig is gedownload (sinds r9099)
:completely_downloaded waar voor een relatie waarvan alle leden zijn gedownload (sinds r9099)
:new alle nieuw objecten
:connection waar voor knopen die worden gebruikt voor meer dan één weg
:unconnected waar voor knopen die niet worden gebruikt door een weg (sinds r6687)
:tagged Wat JOSM beschouwd als zijnde getagd, d.i. een object met een tag sleutel, anders dan de volgende: source*, source_ref, note, comment, converted_by, created_by, watch*, fixme, FIXME, description, attribution (versie r4008; in deze lijst is * een glob)
:area-style true als het object een stijl voor gebied heeft
:righthandtraffic waar als er verkeer aan de rechterkant is op de huidige locatie (sinds r7193); zie left-right-hand-traffic (en) voor schermafdruk van gebieden
:clockwise Of de weg is gesloten en met de klok mee georiënteerd, of niet gesloten en de 1e, 2e en laatste knoop zijn in volgorde met de klok mee.
:anticlockwise Of de weg is gesloten en tegen de klok in georiënteerd, of niet gesloten en de 1e, 2e en laatste knoop zijn in volgorde tegen de klok in.
:unclosed_multipolygon waar voor volledig geladen niet gesloten ralties van multipolygonen (sinds r8252)
:open_end selecteren van eindknopen van niet gesloten relaties van multipolygonen met relation:unclosed_multipolygon >:open_end node (sinds r8252)
:in-downloaded-area waar als een object binnen het brongebied ligt en onwaar als het in het gearceerde gebied ligt (sinds 8495).
:selected waar als een object is geselecteerd in de bewerker (sinds r9341).
:highlighted true als het object is geaccentueerd
:modified gewijzigde en nieuwe objecten (sinds r7193)

U kunt pseudoklassen ook ontkennend gebruiken. Bijv. !:new voor alle oude objecten.

Laag-identificatie

Lagen kunnen worden gebruikt om meer dan één stijl voor een enkel object te maken. Hier is een voorbeeld:

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

Dit tekent alle secondary en tertiary wegen respectievelijk in geel en oranje. Elke weg met een tag access, anders dan yes, zal een extra lijnstijl krijgen onder (object-z-index:-1.0;) de hoofdlijn. Als dat gedeelte van de straat ook een brug blijkt te zijn, krijgt het ook een half transparante blauwe overlay. De relatieve bwaarde voor de dikte (width: +2;) verwijst naar de dikte op de standaard laag (in dit geval 2 of 3).

De naam voor de laag mag elke identifcatie zijn.

default
Als u de laag in de selector weglaat, is dat hetzelfde als ::default gebruiken.

Nog een voorbeeld:

node[amenity=parking] {
    icon-image: "presets/vehicle/parking/parking.svg";    /* geeft het interne pictogram van JOSM
                                                             voor parkeren weer in de standaard laag
    */
    text: ref;                                            /* geeft de waarde van de sleutel ref weer
                                                             als tekst in de standaard laag
    */
}

node[amenity=parking][fee=yes]::fee {
    icon-image: "presets/money/exchange.svg";             /* geeft het interne pictogram van JOSM
                                                             voor wisselkantoor weer in de laag fee
    */
    icon-offset-x: 14;                                    /* verschuift het pictogram */
    icon-offset-y: -12;                                   /* verschuift het pictogram */
    text: charge;                                         /* geeft de waarde van de sleutel charge
                                                             als tekst weer in de laag fee
    */
    text-offset-x: 16;                                    /* verschuift de tekst */
    text-offset-y: 17;                                    /* verschuift de tekst */
}

Het resultaat ziet er zo uit:

In aanvulling daarop kunt u de * laag gebruiken om voorrang te verkrijgen en alle lagen te initialiseren.
Het krijgt voorrang boven alle bestaande subgedeelten, dus

way::A { a; } 
way::B { b; } 
way::* { c; }   /* overschrijft alle bestaande subgedeelten */

is equivalent aan

way::A { a; } 
way::B { b; } 
way::A { c; }  /* overschrijft a door c in alle bestaande subgedeelten */
way::B { c; }  /*overschrijft b door c in alle bestaande subgedeelten */

en het initialiseert nieuwe subgedeelten. Met andere woorden:

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

is equivalent aan

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

wat op zijn beurt hetzelfde is als

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

of

way::A { a; b; }

Groeperen

Regels met een algemeen declaratieblok kunnen worden gegroepeerd in één:

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

is hetzelfde als

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

Klassen

U kunt klassen toewijzen aan overeenkomende elementen, en andere selectors definiëren met behulp van deze klassen:

/* klassen toewijzen */
selector {
  set class;
  /* of als equivalent */
  set .class;
}

/* overeenkomende klassen */
way.class, node[foo=bar].class {
  /* ... */
}

Voorbeeld voor het toewijzen/overeen laten komen van een klasse, genaamd 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; }

U kunt klassen ook ontkennend gebruiken. Bijv. way!.path voor alle wegen, die geen deel uitmaken van de klasse .path.

Klassen en laag samen

Als u lagen en klassen samen wilt gebruiken, onthoud dan dat u de klasse moet identificeren via is_prop_set.

node[railway=signal] { set sgnl; }

/* dit werkt niet */
node.sgnl::layer_signal_icon  { z-index: 1000; ... icon: icon/signal-icon.svg; ... }
node.sgnl::layer_signal_text  { z-index: 1010; ... text: concat("Naam van signaal: ", tag("ref")); ..... )

/* gebruik in plaats daarvan 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("Naam van signaal: ", tag("ref")); ..... )

@supports Voorwaardelijk verwerken

@supports-regels worden gebruikt om een gedeelte van de stijl onder bepaalde voorwaarden over te slaan. Gewoonlijk wilt u een object gebruiken dat werd geïntroduceerd in een nieuwere versie van JOSM, maar wil wel een stijl hebben om op terug te kunnen vallen voor gebruikers van oudere cliënten van JOSM. Deze mogelijkheid werd geïntroduceerd in r8087. Voorbeeld:

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

@supports (max-josm-version: 9788) {
    way[highway] {
        width: 4;
        color: blue;
    }
    /* modus om op terug te vallen, meer eenvoudige objecten gebruiken */
    /* ... */
}

@supports (icon-offset-x) {
    /* alleen als eigenschap icon-offset-x wordt ondersteund */
    node[amenity] {
        icon-offset-x: 5;
    }
}

De syntaxis komt nagenoeg overeen met de officiële syntaxis voor CSS. De volgende voorwaarden worden ondersteund:

Voorwaarde

Beschrijving

(<mapcsskey>)

Controleer of een bepaalde sleutel van MapCSS wordt ondersteund, bijv. repeat-image of icon-offset-x.

(min-josm-version: <getal>)

Alleen gedeelte @supports opnemen als de huidige versie van JOSM groter is dan of gelijk is aan het gespecificeerde getal.

(max-josm-version: <getal>)

Alleen gedeelte @supports opnemen als de huidige versie van JOSM kleiner is dan of gelijk is aan het gespecificeerde getal.

(user-agent: <tekenreeks>)

Alleen gedeelte @supports opnemen als de naam van de bewerker / renderer overeenkomt met de opgegeven tekenreeks. In JOSM is de enige geaccepteerde waarde josm.

Voorwaarden mogen worden gecombineerd met and:

@supports (min-josm-version: 8087) and (max-josm-version: 8200) {
 /* alleen voor JOSM-versies 8087 tot en met 8200 */
}

Andere logische operatoren zoals or en not mogen ook worden gebruikt. Haakjes zijn nodig als u verschillende logische operatoren wilt combineren:

@supports ((min-josm-version: 8087) and (max-josm-version: 8200)) or (user-agent: myEditor) {
  /* voor JOSM-versie 8087 tot en met 8200 en voor de bewerker genaamd "myEditor" */
}

Omdat @supports-regels alleen worden ondersteund in JOSM r8087 en later, zou u die ook als minimale versie van JOSM moeten specificeren in de meta-selector:

meta {
    min-josm-version: "8087"; /* Deze stijl gebruikt @supports-regels */
    /* ... */
}

Instellingen voor stijl

Instellingen voor stijl worden gebruikt om de gebruikersinstellingen te verschaffen voor het aanpassen van een kaarttekenstijl. De gebruiker kan ze gebruiken in het dialoogvenster Kaarttekenstijlen. De volgende typen instellingen zijn beschikbaar:

Instellingen van het type boolean

Een instelling van het type boolean maken::

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

Een instelling van het type boolean gebruiken:

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

Instellingen van het type double

Een instelling van het type double maken:

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

Een instelling van het type double gebruiken:

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

Instellingen van het type string

Een instelling van het type string maken:

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

Een instelling van het type string gebruiken:

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

Instellingen voor type color

Een instelling voor het type color maken. De standaard kleur mag elke kleur zijn zoals begrepen op Verlaringen van waarden van eigenschappen:

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

Gebruiken van een instelling voor type color:

way {
  color: setting("colordisplay");

Instellingen voor groeperen

Soortgelijke instellingen kunnen worden gegroepeerd door settings groups te definiëren (sinds r15289):

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

Label is verplicht, pictogram is optioneel.

Als een groep voor instellingen eenmaal is gedefinieerd, kan er naar worden verwezen vanuit alle instellingen die er toe behoren:

setting::hide_icons {
  type: boolean;
  label: tr("Pictogrammen verbergen bij lage zoom");
  default: true;
  group: "my_group";
}

Groepen van instellingen worden weergegeven als submenu's in het menu Kaarttekeninstellingen. Als tenminste twee instellingen tot een groep behoren, geeft een speciaal menuitem "Alle instellingen schakelen" de mogelijkheid om snel alle instellingen van deze groep in één keer te schakelen. Voorbeeld van gebruik: MapWithAI (en).

Eigenschappen

Algemene eigenschappen

Sleutel Beschrijving Opmaak waarde standaard waarde
z-index Specificeer de volgorde waarin de objecten worden getekend: De objecten met een hogere z-index worden bovenop objecten met een lagere z-index getekend Getal (mag negatief zijn) 0
major-z-index Soortgelijk aan z-index, maar heeft een hogere prioriteit dan z-index. Dus als een object een hogere major-z-index heeft dan een ander, wordt het er bovenop getekend. Als de major-z-index hetzelfde is, bepaalt z-index. Getal (mag negatief zijn) Afhankelijk van stijlelement: 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 Soortgelijk aan z-index, maar heeft een lagere prioriteit. Beheert de tekenvolgorde voor overlappende objecten. Bijv. voor twee kruisende wegen met tekst: Gebruik z-index of major-z-index als u eerst de twe elijnen wilt tekenen en dan de twee bijschriften. Gebruik object-z-index als één van de twee wegen volledig bovenop de ander zou moeten liggen. Getal (mag negatief zijn) 0
modifier Beter beheer, of een standaard lijn / symbool voor knoop wordt gegenereerd door JOSM. Dit gebeurt wanneer er geen juiste stijl (modifier=false) wordt gevonden op eender welke laag. false of true false voor de standaard laag en true voor elke andere laag

Onthoud dat om redenen van uitvoering de waarden voor de drie Z-indexen zijn beperkt tot 24bit float-waarden met max. 5 decimale cijfers. Momenteel gebruikt de interne kaarttekenstijl waarden met max. 2 cijfers vóór en achter het decimale scheidingsteken. Om problemen te vermijden bij het gebruiken van waarden voor de Z-indexen tussen -99.999 en +99.999. (Zie ook #14485)

Stijlen voor pictogrammen en symbolen

Sleutel Beschrijving Opmaak waarde Standaard waarde
icon-image Het pictogram op de positie van de knoop. Zie ook Afbeeldingen. Afbeelding -
icon-opacity transparantie van de afbeelding van het pictogram Transparantie 1.0
icon-width Breedte van het pictogram. Indien slechts één van de eigenschappen icon-width en icon-height wordt opgegeven, zak de afbeelding proportioneel worden geschaald. Het pictogram zal zijn originele grootte behouden, als noch icon-width noch icon-height zijn ingesteld. Getal -
icon-height Hoogte van het pictogram. (Zie icon-width) Getal -
icon-offset-x Verplaats het pictogram in horizontale richting (positieve waarden naar rechts) (sinds r8085) Getal 0
icon-offset-y Verplaats het pictogram in verticale richting (positieve waarden naar beneden) (sinds r8085) Getal 0
icon-rotation Draai het pictogram met de klok mee of tegen de klok in (negatieve waarde)(sinds r8260) [rad], [rad]rad, [deg]°, [deg]deg, [grad]grad, [turn]turn (definition)
of een cardinale richting (bijv. northeast of sw);
of way om het pictogram te draaien in de richting van de ouderweg.
Bekijk ook de functies degree_to_radians, cardinal_to_radians.
Vanaf versie 18678 is de functie parent_way_angle() een alternatief voor way: bijv. way > node[...]::layer_x { ... icon-rotation: parent_way_angle(); ... }
-
icon-position Definieer de positie van het pictogram voor gebieden. hetzelfde als text-position (sinds r11730). center, inside, line center
symbol-shape Geef een symbool weer op de positie van de knoop square, circle, triangle, pentagon, hexagon, heptagon, octagon, nonagon, decagon -
symbol-size Grootte van het symbool Getal, mag relatief zijn ("+4") 10
symbol-stroke-width Breedte buitenste lijn Breedte 1.0 als symbol-stroke-color is ingesteld
symbol-stroke-color Lijnkleur Kleur #FFC800 als symbol-stroke-width is ingesteld
symbol-stroke-opacity Transparantie lijn Transparantie 1.0
symbol-fill-color Kleur voor vulling van de vorm Kleur blue, tenzij ofwel symbol-stroke-width of symbol-stroke-color zijn ingesteld
symbol-fill-opacity Transparantie vulling Transparantie 1.0
text-…, font-… bekijk Algemene eigenschappen tekst & lettertype

Vertrouw niet op de standaard waarden voor eigenschappen van symbol-… (uitgezonderd opacity). Zij zijn bedoeld voor "snelle & vuile" stijlbladen en zouden moeten worden ingesteld op een expliciete waarde.

Lijnstijlen

Sleutel Beschrijving Opmaak waarde Standaard waarde
width Lijnbreedte Breedte -
color Lijnkleur Kleur waarde van fill-color of
(indien niet ingesteld) JOSM's standaard
niet getagde kleur (#808080)
opacity Hoe transparant de lijn is. Transparantie 1.0
dashes Een array van wisselende aan/uit lengten lijst met getallen, bijv.
> 15, 5

mag worden geschreven als expressie:
> list(3, 4, 5, 6)

of het selutelwoord none
om de streepjes uit te schakelen
-
dashes-offset Verplaats het patroon van streepjes met een bepaalde hoeveelheid Getal (>= 0) 0
dashes-background-color De kleur die gebruikt moet worden tussen de streepjes (optioneel) Kleur -
dashes-background-opacity Waarde van transparantie voor de achtergrond van de streepjes Transparantie waarde van opacity
linecap Vorm aan het einde van de lijn (zie hier) none, round, square none
linejoin Vorm op hoeken van de lijn round, miter, bevel round
miterlimit Van toepassing voor linejoin: miter.
Stelt de maximale oversteek in als lijnsegmenten elkaar ontmoeten onder een zeer kleine hoek
Getal (>= 1.0) 10.0
offset Verplaats de lijn naar links of rechts (kijkend in de richting van de weg).
Dit zou kunnen worden gebruikt voor het tekenen van meerdere rijstroken voor één weg of de linker- en rechterzijde van de weg anders markeren.
Getal (positieve waarde verplaatst de lijn naar links,
negatieve naar rechts)
0
text-position Ingesteld op line, als tekst langs de lijn zou moeten worden getekend line, center -
text-…,
font-…
bekijk Algemene eigenschappen tekst & lettertype
repeat-image Herhaalde afbeelding langs een lijn [vanaf r5801] Afbeelding -
repeat-image-width Breedte van de afbeelding (optioneel, zie icon-width) [vanaf r5811] Getal -
repeat-image-height Hoogte van de afbeelding (optioneel) [vanaf r5811] Getal -
repeat-image-align Uitlijning van de afbeelding.
Boven-, onderrand of de (horizontale) middellijn van de afbeelding zal langs de lijn liggen [vanaf r5801]
top, center, bottom center
repeat-image-offset Verschuiving vanaf de lijn [vanaf r5801] Getal 0
repeat-image-spacing Afstand tussen herhalende afbeeldingen [vanaf r5801] Getal 0
repeat-image-phase Initiële afstand aan het begin van de lijn [vanaf r5812] Getal 0
repeat-image-opacity Doorzichtbaarheid van de herhaalde afbeelding (vanaf r16700) Number 1.0

Al deze eigenschappen (behalve voor text-… en font-… bestaan ook met het voorvoegsel casing-. De casing is een tweede onafhankelijk lijnelement, dat onder de normale lijn wordt getekend en kan worden gebruikt om een dun frame rondom de lijn te tekenen in een andere kleur.

Sleutel Beschrijving Opmaak waarde Standaard waarde
casing-width Breedte van de rand aan beide zijden van de hoofdlijn.
In JOSM < 5214: Totale breedte van de casing
Breedte (valt terug op width indien een relatieve breeedte wordt gespecificeerd) -
casing-color Kleur van de casing Kleur waarde van fill-color of (indien niet ingesteld)
JOSM's standaard niet getagde kleur (#808080)
casing-opacity Hoe transparant de casing is. Transparantie 1.0
casing-

Soortgelijk aan casing-, zijn er ook de voorvoegsels left-casing- en right-casing-. Dat tekent aanvullende lijnen links en rechts van de hoofdlijn.

Stijlen voor gebieden

Sleutel Beschrijving Opmaak waarde Standaard waarde
fill-color Kleur waarmee het gebied gevuld moet worden. Tot 11700, de component Alfa werd ingesteld op 50 om een effect voor transparantie te verkrijgen. Kleur -
fill-image Patroon van de afbeelding Afbeelding -
fill-extent Stel deze eigenschap in om alleen de omtrek van het gebied te tekenen. Het getal specificeert hoe ver vanaf de rand van het gebied, in de richting van het midden, moet worden gevuld. (Indien niet ingesteld zal het gebied volledig worden gevuld) [vanaf r9008] Getal -
fill-extent-threshold Stel deze eigenschap in om een volledig gebied te tekenen als het opgegeven percentage van bedekking is bereikt. Mag groter zijn dan 100% als het bedekte gebied wordt geschat als perimeter * bereik. Getal -
fill-opacity Hoe transparant de vulling is; van toepassing op zowel kleur als afbeelding Transparantie 0.2 [sinds vanaf r11700, 1.0 daarvoor] (kan worden gewijzigd met de voorkeuren
mappaint.fillalpha en
mappaint.fill-image-alpha )
text-position Ingesteld op center, als de tekst in het midden van het gebied zou moeten worden getekend. Ingesteld op inside om de tekst volledig binnen het gebied te plaatsen (sinds r11722). line, center, inside
text-…, font-… bekijk Algemene eigenschappen tekst & lettertype

Vereiste eigenschappen om een stijl voor een gebied te maken: fill-color of fill-image

Eigenschappen voor tekst & lettertype

Sleutel

Beschrijving

opmaak waarde

Standaard waarde

text

Hoe de labeltekst te zoeken.
Er wordt geen label weergegeven, tenzij deze instructie aanwezig is.

auto

leid de tekst automatisch af. De standaard tags voor de naam zijn: "name:"+<LANG>,
"name", "int_name", "ref", "operator", "brand" en "addr:housenumber".

Configureer een lijst met namen van tags in de voorkeur "mappaint.nameOrder" om
deze lijst te kunnen wijzigen. (na het wijzigen van de lijst, is opnieuw opstraten van JOSM vereist.)

Tekenreeks

Geeft de sleutel van de tag aan waarvan de waarde moet worden gebruikt als tekst.

Expressies

U mag een expressie invoeren om de weer te geven tekst te berekenen. Voorbeelden:

  • eval("dit is een statische tekst") - renderert een statische tekst
  • eval(concat(tag("eerste"), "-", tag("tweede"))) - geeft de samengevoegde tags
    "eerste" en "tweede" weer

""

Een eerder ingestelde tekst verwijderen.

-

text-color De tekstkleur Kleur white voor lijnen en knopen, #c0c0c0 voor gebieden (JOSM voorkeur voor kleuren
"text" en
"areatext")
text-opacity Hoe transparant de tekst is Transparantie 1.0
text-offset-x Verplaatst de tekst horizontaal,
(niet ondersteund voor tekst langs de lijn)
Getal 0
text-offset-y (
mag ook worden geschreven als
text-offset)
Verplaatst de tekst verticaal, positieve waarden verplaatsen de tekst naar boven Getal 0
text-halo-radius Grootte van de rand van de tekstachtergrond
(om de tekst zichtbaar te maken op een achtergrond
met soortgelijke kleur)
Getal -
text-halo-color Kleur van de teksthalo Kleur aanvulling op de tekstkleur
text-halo-opacity Transparantie voor de teksthalo Transparantie 1.0
text-anchor-horizontal horizontale plaatsing tekstlabel left, center, right right
text-anchor-vertical verticale plaatsing tekstlabel above, top, center, bottom, below bottom
text-rotation Roteer de tekst met ded wzijders van de klok mee of er tegein (negatieve waarde)
(vanaf r16253)
[rad], [rad]rad, [deg]°, [deg]deg, [grad]grad, [turn]turn
(definition) of een cardinale richting (bijv. northeast of sw);
of way om het pictogram te draaien in de richting van de ouderweg.
Bekijk ook de functies degree_to_radians, cardinal_to_radians.
Vanaf versie 18678 is de functie parent_way_angle() een alternatief voor way: bijv. way > node[...]::layer_x { ... icon-rotation: parent_way_angle(); ... }
(Onthoud dat de richting betekent waar de bovenkant van de tekst naartoe wijst.
Dat betekent met de standaard richting van noord dat de tekst naar het oosten stroomt
(bij een taal van links naar rechts).
Dus, als u wilt dat het naar het zuiden stroomt moet u oost instellen.)
-
text-position see Stijlen voor gebieden en Lijnstijlen
font-family Familie van lettertype Tekenreeks "Droid Sans"
(JOSM voorkeur "mappaint.font")
font-size grootte lettertype Getal 8
(JOSM voorkeur "mappaint.fontsize")
font-weight vet of niet bold, normal normal
font-style cursief of niet italic, normal normal

gebruikergedefinieerde eigenschappen

  • In kaartekenstijlen kunt u elke aangepaste eigenschap definiëren, bijv.: crc: CRC32_checksum(tag(name))/429496.7296;
  • In Validator regels moeten zij worden voorafgegaan door een -, bijv.: -osmoseItemClassLevel: "1210/1/1";

Verklaringen waarden eigenschappen

Breedte

  • 14.0 (elk positief getal)
  • default (gebruik de standaard lijnbreedte van JOSM, die 2 is, mar mag worden geconfigureerd)
  • thinnest (tekent de lijn zo dun als mogelijk is)
  • +3 (met teken + er voor) voegt de hoeveelheid toe aan de breedte op de standaard laag. Dit is alleen van toepassing voor stijlen die niet op de standaard laag liggen, bijv. accenten. Een andere manier om dit te schrijven zou zijn prop("width","default")+3. Voor casing-width verwijst dit naar de waarde width op dezelfde laag.

Afbeelding

Zie Afbeeldingen in een stijl opnemen.

Kleur

  • benoemde kleur die kan worden gevonden in deze lijst
  • HTML-stijl: #RRGGBB, #RGB, #RRGGBBAA
  • rgb(/*r*/, /*g*/, /*b*/) - Waarde RGB met argumenten van 0.0 tot en met 1.0
  • rgba(/*r*/, /*g*/, /*b*/, /*alpha*/) - Waarde RGB met alfa
  • hsb_color(/*hue*/, /*saturation*/, /*brightness*/) - kleur uit de kleurruimte HSB
  • als de kleur wordt voorafgegaan boor een naam en and #, bijv. color: highway_track#6e541c; zal het verschijnen in de Kleurvoorkeuren en eindgebrukers kunnen de kleur zelf aanpassen

Transparantie

  • van 0.0 (transparant) tot en met 1.0 (ondoorzichtig)

Tekenreeks

  • elk reeks van tekens, tussen aanhalingstekens, bijv. "images/fill.png". Als de tkeenreeks een identificatie is, zijn aanhalingstekens optioneel. (Aanhalingstekens en teken backslash mogen worden geëscaped.)

Getal

  • integer of floating point (in eenvoudige vorm bijv. 0.3). Mag in het algemeen negatief zijn, maar de meesteeigenschappen ondersteunen geen negatieve getallen
  • heeft een speciale betekenis als u er een teken "+" vóór zet (relatieve breedte)

Expressies voor eval

Zie Javadoc of Functions voor de up-to-date lijst met functies die worden ondersteund door de implementatie van MapCSS in JOSM.

+, -, *, /
rekenkundige bewerkingen
||, &&, !
Booleaanse bewerkingen
<, >, <=, >=, ==, !=
vergelijkinsoperatoren
asin, atan, atan2, ceil, cos, cosh, exp, floor, log, max, min, mod (vanaf r17759) random, round, signum, sin, sinh, sqrt, tan, tanh
in de gebruikelijke betekenis, details
cond(b, fst, snd)
b ? fst : snd
if (b) then fst else snd
list(a, b, ...)
maak een lijst met waarden, bijv. voor de eigenschap dashes
get(lst, n)
haal het ne element van de lijst lst op (tellen begint bij 0) [vanaf r5699]
split(sep, str)
splits de tekenreeks str op die punten waar de scheidingsreeks sep voorkomt, geeft een lijst terug [vanaf r5699]
prop(p_name)
waarde van de eigenschap p_name van de huidige laag, bijv. prop("width")
prop(p_name, layer_name)
eigenschap van de laag layer_name
is_prop_set(p_name)
true, als de eigenschap p_name is ingesteld voor de huidige laag
is_prop_set(p_name, layer_name)
true, als de eigenschap p_name is ingesteld voor de laag layer_name
tag(key_name)
haal de waarde van de sleutel key_name op uit het bevraagde object
parent_tag(key_name)
haal de waarde van de sleutel key_name op uit de ouder van het object
parent_tags(key_name)
geeft alle waarden van de ouders terug voor de sleutel key_name als een lijst gesorteerd in een natuurlijke volgorde [sinds 8775]
has_tag_key(key_name)
true, als het object een tag heeft met de opgegeven sleutel
rgb(r, g, b)
maak kleurwaarde (argumenten van 0.0 tot en met 1.0)
hsb_color(h, s, b)
maak kleur uit hue, saturation en brightness (argumenten van 0.0 tot en met 1.0) [vanaf r6899]
red(clr), green(clr), blue(clr)
haal de waarde van de kleurkanelen op in het kleurmodel RGB
alpha(clr)
haal de waarde Alfa op van de opgegeven kleur [vanaf r6749]
length(str)
lengte van een tekenreeks
count(lst)
lengte van een lijst, d.i. telt zijn elementen [vanaf r7162]
length(lst)
lengte van een lijst [vanaf r5699] – vervallen vanaf r7162
any(obj1, obj2, ...)
geeft het eerste object teruf dat niet null is (vroeger coalesce, [vanaf r7164])
concat(str1, str2, ...)
voeg de tekenreeksen samen tot één
join(sep, str1, str2, ...)
voeg de tekenreeksen samen, met sep als scheidingsteken [vanaf r6737]
join_list(sep, list_name)
voeg de elementen van de lijst list_name samen tot één tekenreeks, gescheiden door het scheidingsteken sep [vanaf r8775]
upper(str)
converteert tekenreeks naar hoofdletters [vanaf r11756]
lower(str)
converteert tekenreeks naar kleine letters [vanaf r11756]
title(str)
converteert tekenreeks naar hoofdletter voor elk woord [since r17613] ("i am FINE""I Am Fine")
trim(str)
verwijdert voorafgaande en achterliggende witruimte uit tekenreeks [vanaf r11756]
trim_list(list_name)
verwijdert voorliggende en achterliggende witruimte uit een lijst met tekenreeksen, zal items verwijderen die daarna leeg zijn [sinds 15591]
JOSM_search("...")
true, als zoekactie van JOSM van toepassing is op het object
tr(str, arg0, arg1, ...)
vertaal vanuit het Engels naar de huidige taal (alleen voor tekenreeksen in de gebruikersinterface van JOSM) [vanaf r6506]
regexp_test(regexp, string)
test of string overeenkomt met het patroon van regexp [vanaf r5699]
regexp_test(regexp, string, flags)
test of string overeenkomt met het patroon van regexp; flags is een tekenreeks die kan bevatten "i" (hoofdletter ongevoelig), "m" (multiregel) en "s" ("dot all") [vanaf r5699]
regexp_match(regexp, string)
probeert string overeen te laten komen met het patroon van regexp. Geeft een lijst met gevangen groepen terug bij succes. Het eerste element (index 0) is de volledige overeenkomst, d.i. string). Verdere elementen corresponderen met de gedeelten tussen haakjes van de reguliere expressie. [vanaf r5701]
regexp_match(regexp, string, flags)
probeert string overeen te laten komen met het patroon van regexp. Geeft een lijst met gevangen groepen terug bij succes. Het eerste element (index 0) is de volledige overeenkomst, d.i. string). Verdere elementen corresponderen met de gedeelten tussen haakjes van de reguliere expressie. Flags is een tekenreeks die kan bevatten "i" (hoofdletter ongevoelig), "m" (multiregel) en "s" ("dot all") [vanaf r5701]
substring(str, idx)
geef de subtekenreeks str terug, beginnend op de index idx (0-index) [vanaf r6534]
substring(str, start, end)
geef de subtekenreeks str terug, beginnend op de index start (inclusief) tot en met end (exclusief) (0-index) [vanaf r6534]
replace(string, old, new)
vervangt elke instantie van de subtekenreeks old in de tekenreeks string door de tekst new
osm_id()
geeft de ID van OSM terug voor het huidige object [vanaf r5699]
osm_user_name()
geeft de OSM gebruikersnaam terug van degene die het huidige object het laatst heeft beroerd [vanaf r15246]
osm_user_id()
geeft de OSM gbruikers-ID terug van degene die het huidige object het laatst heeft beroerd [vanaf r15246]
osm_version()
geeft het OSM versienummer terug van het huidige object [vanaf r15246]
osm_changeset_id()
geeft de ID van de wijzigingenset terug waarmee het huidige object het laatst werd geüpload [vanaf r15246]
osm_timestamp()
geeft de tijd terug van de laatste aanpassing aan het huidige object, als tijdstempel [vanaf r15246]
parent_osm_id()
geeft de ID voor OSM terug van de ouder van het object (overeenkomend met de selectie van het kind) [vanaf r13094]
URL_encode(str)
percentage coderen van een tekenreeks. Kan nuttig zijn voor gegevens-URL's [vanaf r6805]
URL_decode(str)
percentage decoderen van een tekenreeks. [vanaf r11756]
XML_encode(str)
escape speciale tekens in XML. Bijv. < wordt &lt;, andere speciale tekens: >, ", ', &, \n, \t en \r [vanaf r6809]
CRC32_checksum(str)
bereken de controlesom CRC32 van een tekenreeks (resultaat is een geheel getal tussen 0 tot en met 232-1) [vanaf r6908]
is_right_hand_traffic()
controleer of er links- of rechtsrijdend verkeer is op de huidige locatie. [vanaf r7193]
number_of_tags()
geeft het aantal tags terug voor het huidige object van OSM [vanaf r7237]
print(o)
drukt een weergave van de tekenreeks o af naar de opdrachtregel (voor debuggen) [vanaf r7237]
println(o)
drukt een weergave van de tekenreeks o af naar de opdrachtregel, gevolgd door een neiuwe regel (voor debuggen) [vanaf r7237]
JOSM_pref(key, default)
haal de waarde op uit de uitgebreide voorkeuren van JOSM. Op deze manier kunt u de gebruiker bepaalde opties bieden en de stijl aan te passen te maken. Het werkt met tekenreeksen, getallen, kleuren en Booleaanse waarden.
[Deze functie bestaat sinds versie r3856, maar met enkele beperkingen. JOSM_pref geeft altijd een tekenreeks terug, maar in versie r7237 en eerder, werkte de automatische conversie van de tekenreeks naar Booleaanse waarde en kleur niet. U kunt de volgende workarounds voor Booleaanse waarden en kleuren gebruiken in versie r7237 en eerder: cond(JOSM_pref("myprefkey", "true")="true", "X", "O") en html2color(JOSM_pref("mycolor", "#FF345611")). Deze expliciete conversies zouden niet langer nodig behoeven te zijn in versie r7238 en later. Automatische conversie naar een getal werkt in elke versie.]
setting()
een instelling voor stijl gebruiken [vanaf r7450]
degree_to_radians() [vanaf r8260]
geeft een in graden opgegeven richting terug in radialen
cardinal_to_radians() [vanaf r8260]
geeft een cardinale richting terug in radialen
waylength() [vanaf r8253]
geeft de lengte van de weg in meters terug
areasize() [vanaf r8253]
geeft het gebied van een gesloten weg terug in vierkante meters
at(lat,lon)
geeft true terug als het zwaartepunt van het object ligt op opgegeven coördinaten lat/lon, bijv. om knopen te controleren op "null island" knoop[op(0.0,0.0)] [vanaf r12514]
is_similar(str1, str2)
geeft true terug als twee tekenreeksen soortgelijk zijn, maar niet identiek, d.i. hebben een afstand Levenshtein van 1 of 2.
Voorbeeld: way[highway][name][is_similar(tag(name), "Main Street")] controleert op straten met een mogelijke typefout in de naam (bijv. Main Streeg). [vanaf r14371]
gpx_distance()
geeft de korste afstand tussen het object van OSM en een GPX-punt [vanaf r14802]
count_roles()
geeft het aantal primitieven terug uit een relatie met de gespecificeerde rollen [vanaf r15275]
sort(str1, str2, str3, ...)
sorteert een array van tekenreeksen [vanaf r15279]
sort_list()
sorteert een lijst van tekenreeksen [vanaf r15279]
tag_regex(regex)
geeft een lijst met waarden terug die overeenkomen met de reguliere expressie [vanaf r15317]
to_boolean(str)
geeft het argument van de tekenreeks terug als een Booleaanse waarde [vanaf r16110]
to_byte(str)
geeft het argument van de tekenreeks terug als een byte [vanaf r16110]
to_short(str)
geeft het argument van de tekenreeks terug als een short [vanaf r16110]
to_int(str)
geeft het argument van de tekenreeks terug als een int [vanaf r16110]
to_long(str)
geeft het argument van de tekenreeks terug als een long [vanaf r16110]
to_float(str)
geeft het argument van de tekenreeks terug als een float [vanaf r16110]
to_double(str)
geeft het argument van de tekenreeks terug als een double [vanaf r16110]
uniq(str1, str2, str3, ...)
geeft een lijst met tekenreeksen terug die alleen unieke waarden hebben uit een array met tekenreeksen [vanaf r15323]
uniq_list()
geeft een lijst met tekenreeksen terug die alleen unieke waarden hebben uit een lijst met tekenreeksen [vanaf r15353]
parent_way_angle()
geeft de hoek van de ouderweg terug als een double in radialen [vanaf r18678] (bekijk: text-rotation of icon-rotation)
convert_primitive_to_string(PrimitiveId)
geeft de ID van de primitief terug als een tekenreeks [vanaf r18829]
convert_primitives_to_string(PrimitiveId, PrimitiveId, ...)
geeft een lijst terug van ID's van primitieven, geconverteerd naar tekenreeksen [vanaf r18829]
parent_osm_primitives(optional key, optional value)
geeft een lijst terug van ID's van primitieven die overeenkomen met de selutel en de waarde (indien aanwezig) [vanaf r18829]

Voorbeelden

  • symbool van een cirkel voor huisnummer waarvan de grootte afhankelijk is van het aantal cijfers
    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; 
    }
    
  • kleuren inverteren
    *::* {
        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))));
    }
    
  • willekeurige dingen
    way {
        width: eval(random() * 20);
        color: eval(rgb(random(), random(), random()));
    }
    
  • regexp die overeenkomt met voorbeeld: wijzig "nameXXXsubname" naar "name::subname"
    *[name=~/.+XXX.+/] 
    {
        _match: regexp_match("(.+?)XXX(.+)", tag("name"));
        text: concat(get(prop("_match"),1), "::", get(prop("_match"),2));
    }
    
  • kleur gebouwen in verschillende kleuren, afhankelijk van de straat in de tags address
    area[building][addr:street] {
        fill-color: hsb_color(CRC32_checksum(tag("addr:street"))/4294967296.0, 0.9, 0.7);
        fill-opacity: 0.8;
    }
    
  • omhulling binnen gebied
    area[building]:clockwise {
        right-casing-width: 10;
    }
    area[building]:anticlockwise {
        left-casing-width: 10;
    }
    /* of */
    area[building][is_clockwise()] {
        right-casing-width: 10;
    }
    area[building][is_anticlockwise()] {
        left-casing-width: 10;
    }
    
  • niet hoofdlettergevoleige selectie. Dit komt overeen met: Name=Main Street, maar ook met naMe=MAIN STREET
    way[/(?i)^name$/ =~ /(?i)^Main Street$/] {
    }
    

Opmerkingen over compatibiliteit

MapCSS 0.2

Grammatica

  • way[oneway=yes] is geen tovenarij, u mag in plaats daarvan way[oneway?] gebruiken
  • geen @import
  • JOSM vereist niet dat eval(…) expressies omsluit, maar voor compatibiliteit met andere implementaties van MapCSS zou u het uit moeten schrijven

Eigenschappen

Op dit moment ondersteunt JOSM de volgende eigenschapen niet:

line:
image
label:
font-variant, text-decoration, text-transform, max-width
shield:
niet ondersteund

Halcyon (Potlatch 2)

  • Tekstlabel wordt geplaatst in het midden van het pictogram. Plaats voor compatibiliteit met Halcyon
    node { text-anchor-vertical: center; text-anchor-horizontal: center; }
    
    aan het begin van uw srijlblad.
  • standard is de z-index in Halcyon 5, maar het is 0 in JOSM
  • image: circle; correspondeert met symbol-shape: circle;

Kothic

  • Kothic heeft ondersteuning voor eval, die waarschijnlijk afwijkt van de eval in JOSM.
  • Kothic begrijpt eenheden, terwijl JOSM altijd rekent in pixels.
  • De mogelijkheden voor uittrekken zijn niet beschikbaar in JOSM.

Ceyx

  • lijkt te hebben [tunnel=1] in plaats van [tunnel=yes] (Halcyon) of [tunnel?] (JOSM)

Media-query's (vervallen)

Opmerking: media-query's zijn vervallen. U zou in plaats daarvan @supports-regels moeten gebruiken (zie boven).

Media-query's worden gebruikt om onder bepaalde voorwaarden een gedeelte van de stijl over te slaan. Gewoonlijk wilt u een object gebruiken dat werd geïntroduceerd in een nieuwere versie van JOSM, maar wil wel een stijl hebben om op terug te kunnen vallen voor gebruikers van oudere cliënten van JOSM. Deze mogelijkheid werd geïntroduceerd in r6970. Voorbeeld:

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

@media (max-josm-version: 9788) {
    way[highway] {
        width: 4;
        color: blue;
    }
    /* modus om op terug te vallen, meer eenvoudige objecten gebruiken */
    /* ... */
}

De syntaxis komt nagenoeg overeen met de officiële syntaxis voor CSS. De volgende voorwaarden worden ondersteund:

Voorwaarde media

Beschrijving

(min-josm-version: <getal>)

Alleen gedeelte @media opnemen als de huidige versie van JOSM groter is dan of gelijk is aan het gespecificeerde getal.

(max-josm-version: <getal>)

Alleen gedeelte @media opnemen als de huidige versie van JOSM kleiner is dan of gelijk is aan het gespecificeerde getal.

(user-agent: <tekenreeks>)

Alleen gedeelte @media opnemen als de naam van de bewerker / renderer overeenkomt met de opgegeven tekenreeks. In JOSM is de enige geaccepteerde waardee josm.

Voorwaarden mogen worden gecombineerd met and:

@media (min-josm-version: 6970) and (max-josm-version: 7014) {
 /* alleen voor JOSM-versies 6970 tot en met 7014 */
}

Meerdere gecombineerde voorwaarden mogen worden verbonden met een komma (logische or):

@media (min-josm-version: 6970) and (max-josm-version: 7014), (user-agent: myEditor) {
  /* voor JOSM-versies 6970 tot en met 7014 en voor de bewerker genaamd "myEditor" */
}

Omdat media-query's alleen worden ondersteund in JOSM 6970 en later, zou u deze ook als de minimale versie van JOSM moeten spcificeren in de meta-selector:

meta {
    min-josm-version: "6970"; /* Deze stijl gebruik media-query's */
    /* ... */
}
Last modified 8 months ago Last modified on 2023-09-26T11:26:32+02:00
Note: See TracWiki for help on using the wiki.