Verschlagwortet: theme Logik logic OR AND rule
- AutorBeiträge
- Februar 3, 2019 um 11:57 Uhr #26922BuccardoTeilnehmer
Für eine Kartendarstellung möchte ich ein Theme erstellen, welches u.a. verschiedene Wegelemente bei der Wahl von Overlays anzeigt.
Hierzu braucht’s eine ODER Verknüpfung der ‚Operatoren‘ in oberster Ebene der rules,
üblich sind aber wohl nur AND Verknüpfungen:Beispiel aus Elevate theme family 4.x
<rule e=“any“ k=“access|reservation“ v=“private|acc_no|members_only“ zoom-min=“17″>
bedeutet in allgemeiner Logigsprache:
<rule e=“any“ AND (k=“access“ OR k=reservation“) AND (v=“private“ OR v=“acc_no“ OR v=“members_only“) AND zoom-min=“17″>Benötigt wird z.B.
in allgemeiner Logigsprache:
<rule e=“any“ AND ((k=“access“ AND v=“private“) OR ( k=“reservation“ AND v=“acc_no“)) AND zoom-min=“17″>
Die Klammern um die OR Gruppe sind erforderlich, da die AND Operatoren ja eine höhere Priorität als die OR Operatoren haben.
Wie lässt sich das am einfachsten im Theme-XML definieren??Februar 3, 2019 um 14:09 Uhr #26925TobiasAdministratorGenauer geht es nur mit mehreren Regeln/Verschachtelungen, z.B.:
<rule e="any" k="*" v="*" zoom-min="17"> <rule e="any" k="access" v="private"> </rule> <rule e="any" k="reservation" v="acc_no"> </rule> </rule>
Aber leider ist nicht alles möglich, mir fehlen auch manche Möglichkeiten, und manchmal müssen Regeln annähernd gleich wiederholt werden.
Ansonsten kommen die Kombinationen oft gar nicht so vor, wie von Dir da gewünscht, da die Tags beim Kartengenieren aufbereitet wurden – acc_no gibt es nur mit access, nicht mit reservation 🙂Developer of Elevate mapstyle
Februar 3, 2019 um 20:17 Uhr #26930BuccardoTeilnehmerDas war oben nur ein schnelles Beispiel, in meinem Theme braucht’s konkret folgende Regel:
in allgemeiner Logigsprache:
<rule e=“way“ AND ((cat= „osm-wege“ k=“ovl-way“ AND v=“~“) OR (cat= „ovl-wege“ k=“ovl-way“ AND v=“*“))>
…
</rule>
Habe auch schon befüchtet, daß sie durch den fehlenden OR Operator in zwei rule Blöcke hintereinander mit identischer Darstellung aufgeteilt werden muss, also:<rule cat= „ovl-wege“ e=“way“ k=“ovl-way“ v=“*“>
<line stroke=“#FFFFFF“ stroke-width=“0.4dp“ />
…
</rule>
<rule cat= „osm-wege“ e=“way“ k=“ovl-way“ v=“~“>
<line stroke=“#FFFFFF“ stroke-width=“0.4dp“ />
…
</rule>
Somit werden ways bei gewähltem Overlay „ovl-wege“ mit beliebigem Wert des Attributs „ovl-way“ und/oder
ways bei gewählter OSM Grundkarte „osm-wege“ ohne Attribut „ovl-way“ dargestellt !?PS: was definiert k=“keyxyz“ v=“~“ genau? ->
keyxyz ist bei dem Element nicht definiert und/oder Wert des keyxyz ist NULL (leer)?Danke Dir Tobias für die Antworten!
VG BurkhardFebruar 4, 2019 um 13:36 Uhr #26938TobiasAdministratorSomit werden ways bei gewähltem Overlay „ovl-wege“ mit beliebigem Wert des Attributs „ovl-way“ und/oder
ways bei gewählter OSM Grundkarte „osm-wege“ ohne Attribut „ovl-way“ dargestellt !?
Soweit ich Deinem Beispiel folgen kann ja 🙂
PS: was definiert k=“keyxyz“ v=“~“ genau? ->
keyxyz ist bei dem Element nicht definiert und/oder Wert des keyxyz ist NULL (leer)?
Siehe hier:
A vertical bar „|“ can be used to specify multiple values.
An asterisk „*“ serves as wildcard character.
A tilde „~“ matches if the map element does not have a tag with the specified key.Also wenn der key nicht vorhanden ist.
Developer of Elevate mapstyle
1 Teilnehmer(n) gefällt dieser Beitrag
Februar 5, 2019 um 09:49 Uhr #26944BuccardoTeilnehmerDie Anwahl und Darstellung funktioniert nun einwandfrei mit den zwei rule Blöcken oben!
Somit können unter Lokus die Wege aus der OSM-Grundkarte oder der Overlay-Karte (anders getaggt) wahlweise dargestellt werden!
Sauber!Danke auch für den Rendertheme.md Link mit der Beschreibung, sehr interessant! 🙂
Meine Fragen sind damit geklärt , Status des Themas kann auf „beantwortet“ gesetzt werden.
VG
2 users thanked author for this post.
- AutorBeiträge
- Sie müssen angemeldet sein, um zu diesem Thema eine Antwort verfassen zu können.