DE:Kosmos Rendering Help
Eine der interssantesten Fähigkeiten der Kosmos Rendering Engine ist die Möglichkeit für die Benutzer selbst Rendering-Regeln in OpenStreetmap-Wiki Seiten zu definieren. Ein Beispiel hierfür ist die Kosmos General Purpose Rules, welche, die Regeln zum rendern von Standardkarten enthält.
Kosmos lädt selbständig die Wiki-Seite runter und interpretiert sie. Die Idee hierfür ist, das Rendern von OSM-Daten durch Wiki-Mechanismen zu demokratisiern, so dass jeder seine Regeln zur Verfügung stellen kann. So dass viele Wiki-Seiten entstehen können, die Sätze von Regeln zum Rendern der verschiedensten Karten enthalten, wie z.B Wanderkarten, Stadtpläne, Wanderkarten...
Es können ebenfalls nach Regeln zum Ausdrucken und oder Darstellen auf Bildschirmen unterschieden werden.
Man kann auch die Rohdaten der Render-Regel Wiki-Seite in einer Text-Datei (*.txt) speichern und in Kosmos verwenden. Siehe FAQ).
Bei Fragen bezüglich Kosmos helfen die Kosmos_FAQ bestimmt weiter.
Regel Tabellen
Die Kosmos Regeln müssen in eine oder mehr Tabellen eingetragen werden, wie man auf den KosmosStandardRules oder Kosmos General Purpose Rules sehen kann. Daten ausserhalb der Tabellen werden von Kosmos ignoriert und können für Kommentare genutzt werden oder um die Regeln in einzelne Abschnitte zu gliedern (was sehr zu empfehlen ist, da man sie dann getrennt bearbeiten kann.)
Jede Reihe stellt eine Regel zum Rendern dar:
Name der Regel | Ziel | Selektor | Vorlagen | Optionen | Kommentar |
---|---|---|---|---|---|
RestaurantNode | amenity=restaurant | Icon (MinZoom=13, IconUrl=http://wiki.openstreetmap.org/images/5/58/Restaurant.png, Width=12:5;17:20) Text (MinZoom=15, Color=black, TagToUse=name, FontName=Arial, FontStyle=regular, FontSize=15:5;17:9, TextLineOffset=-200%) |
Der Inhalt der Tabellenspalten ist folgender:
- Name der Regel : Ein eindeutiger Name der Regel (unique)
- Ziel: Teilt Kosmos den Typ des OSM-Objekt mit, auf welches er die Regel anwenden soll.
- Zu benutzende Vorlagen:
- Selektor: teilt Kosmos mit, auf welches spezielle OSM-Element die Regel angewendet werden soll, siehe #Element Selektoren.
- Vorlagen: teilt Kosmos wie die Objekte dargestellt werden sollen. siehe #Vorlagen
- Optionen: Render-Optionen (nicht notwendig)
- Kommentare: lesbare Kommentare (nicht notwendig)
Kind-Regeln
Durch vergeben von Regelnamen, welche mit einem Punkt beginnen, spezifizieen sie sie Kind-Regeln einer Eltern-Regel. Die Elternregel ist die erste Regel, die in der Tabelle aufgeführt ist. Ein Beispiel:
HighwaySecondary | highway=secondary | Text (MinZoom=15, Color=black, TagToUse=name, FontName=Arial, FontStyle=regular, FontSize=15:6;17:9) | ChildrenFirst | |
.Bridge | bridge=yes | Polyline (MinZoom=8, Color=#FDBF6F, BorderColor=gray, BorderWidth=30%, Width=8:1;10:2;13:6;17:14) | ||
.* | Polyline (MinZoom=8, Color=#FDBF6F, BorderColor=gray, Width=8:1;10:2;13:6;17:14) |
Was bedeutet dies? Wir definieren, dass alle Wege, die mit highway=secondary getaggt sind, die Namen als Text gerendert werden. Brücken (getaggt zusätzlich mit bridge=yes) werden mit einer Polylinie mit dickeren Rändern gezeichnet. Alle anderen Wege mit normaler Randbreite. Kindregeln konkurrieren miteinander darum gerendert zu werden. Die Kindregel deren Selektor als erstes zutrifft wird zum rendern benutzt. Alle Kinder - derselben Eltern - danach werden für dieses Element ignoriert.
Eine Kindregel die mit .* benannt ist, repräsentiert einen Spezialfall (Default Kindregel), welche alle OSM-Elemente abdeckt, die nicht durch die anderen Kind-Regeln abgedeckt sind. Man muss keine Default Kindregel definieren, wenn muss sie aber am Ende stehen.
Ziele und Optionen für Kindregeln werden von Kosmos ignoriert.
In Manchen Fällen sollen Kindregeln vor den Elternregeln gerendert werden dann gebe die Option ChildrenFirst in der Parent-Regel an.
Element Selektoren
Zwei Arten von Elementselektoren sind verfügbar:
- key=* or key=value. Die Standard-Variante: key=* wählt mit diesem Tag versehene Elemente aus, ohne auf deren Werte Rücksicht zu nehmen. Beispiel:
highway=* (Syntax: {{tag|highway}} )
Die Variante key=value wählt das Element aus, deren Tags genau mit den angegebenen Wert versehen sind.Beispiel
natural=coastline (Syntax: {{tag|natural|coastline}} )
Es ist auch möglich mehrer Tag-Value Paare zu kombinieren die dann als AND-Selektoren interpretiert werden. (Leerzeichen nicht vergessen zwischen den Tag-Templates! Beispiel:
amenity=restaurant cuisine=chinese name=Heiße Ratte
{{tag|amenity|restaurant}} {{tag|cuisine|chinese}} {{tag|name|Heiße Ratte}}
Wählt Chinesische Restaurants die "Heisse Ratte" heißen aus. (kenne aber keine ;) )
- Komplexe Ausdrücke: Werden bei komplizierteren Selektionen benötigt wie z.B
IsTaggedWith(e,"ele") AND IsValueNum( e,"ele") % 100 = 0
wählt OSM-Elemente aus die mit dem Tag z.B: ele=n00 versehen sind und deren Wert durch 100 teilbar ist. (dieses wird zum rendern von 100er Höhenlinen verwendet siehe srtm2osm})
Syntax Komplexer Ausdrücke
Note: Komplexe Ausdrücke sind momentan ein experimentelles Feature von Kosmos. Die unten beschriebene Syntax wird sich in näherer Zukunft ändern, d.h vereinfacht werden. Ausserdem möchte ich versuchen, dass das Interpretieren komplexer Ausdrücke nicht so viel Performance kostet.
Kosmos benutzt für Komlexe Ausdrücke momentan das Flee library. Benutze den Link für alle möglichen Funktionen.
Drei Spezialfunktion besitzt Kosmos zur Benutzung von Komplexen Ausdrücken:
- IsTaggedWith(e,"key"): gibt true wieder, wenn ein OSM-Element einen Tag mit "key" benannt ist.
- ValueNum(e,"tag"): gibt einen Numerischen Wert des Tags "tag" wieder.
- ValueString(e,"tag"): gibt einen String des Tags "tag" wieder.
Lese unbedingt vorher de:Kosmos Rendering Help#Überlegungen bezüglich der Performance
Vorlagen
Kosmosvorlagen sind grafische Darstellungen von OSM-Elementen in Karten. Momentan sind folgende Vorlagen verfügbar:
- Polyline: zeichnet einen Linienzug
- Polygon: zeichnet ein geschlossenes Polygon
- Text: zeichnet einen Text
- Symbol: zeichnet ein Symbol oder mehrere entlang eines Linienzuges
- Icon: zeichnet ein Icon
Jede Regel kann ein oder mehrere Vorlagen besitzen. Das Untenstehendes Beispiel benutzt zwei Vorlagen:
Rule Name | Targets | Selector | Templates | Options | Comment |
---|---|---|---|---|---|
RestaurantNode | amenity=restaurant | Icon (MinZoom=13, IconUrl=http://wiki.openstreetmap.org/images/5/58/Restaurant.png, Width=12:5;17:20) Text (MinZoom=15, Color=black, TagToUse=name, FontName=Arial, FontStyle=regular, FontSize=15:5;17:9, TextLineOffset=-200%) |
Standard Parameter
- MinZoom: Ab diesem Zoomlevel, bei den das Objekt gerendert wird (default: unbegrenzt)
- MaxZoom: Bis zu diesem Zoomlevel wird das Objekt gerendert (default: unbegrenzt)
- Color: Die Grundfarbe des Templates. Farben müssen im Hexadezimalsystem oder mit dem HTML-Farbnamen angegeben werden. Beispiel: #BD00AA , white
- Options: Gibt Optionen zum Rendern des Templates an. Unterstützt wird im Moment nur TopLevel (siehe Kosmos Layering für mehr Information über diese Option.)
Polyline Vorlagen Parameter
- Width: gibt die Stärke des Linienzuges an Werte als Zoomfaktor (notwendig)
- DashStyle: wenn eingetragen, dann wird der Linienzug in dem vorgegebenen Stil gezeichnet.
- LineStartCap: gibt den Linienanfang vor.
- LineEndCap: gibt das Linienende vor.
- BorderColor: gibt die Farbe der Ränder vor.
- BorderWidth: gibt die breite der Ränder in Prozentpunkten der Breite des Linienzuges vor. ( BorderWidth=20%)
- BorderDashStyle: gibt den Stil der Ränder vor.
Polygon Template Parameter
- BorderColor: gibt die Farbe der Ränder vor.
- BorderWidth: gibt die Breite der Ränder vor eingetragen als Zoomfaktorwert.
- BorderDashStyle: gibt den Linienstil vor.
- HatchStyle: gibt die Schraffierung vor
- BackgroundColor: gibt die Füllfarbe vor
Text Vorlagen Parameter
Die Text Vorlage arbeitet in Kosmos in zwei verschiedenen Modi, abhängig von den Element, zu welchen der Text gehört.
- bei Linienzügen wird der Text entlang der Linenzüge geschrieben,
- bei Noden wird er an der Node zentriert und waagerecht ausgerichtet.
- TextMode: bestimmt, in welchem Modus das Text Template arbeiten soll
- Node: Der Text soll waagerecht und zentriert an der Node ausgerichtet sein. (Standard-Wert)
- AlongWay: Der Text soll entlang des Weges dargestellt werden. Standard für Wege
- WayCenter: Der Text soll in der Mitte des Weges zentriert dargestellt werden . Nur für Wege Neu seit Version 2.1
- AreaCenter: Der Text soll in der Zugehörigen Fläche zentriert werden. Dieser Modus kann für Flächen und Wege verwendet werden.
- TagToUse bestimmt, welcher Tag für den Text benutzt werden soll. Es können mehrere Tags unterschieden durch Semikolon(;) vorgegeben werden, dabei wird der erstgefundene benutzt. z.B.: TagToUse=nat_name;name, - wenn "nat_name" für nationaler Name nicht gefunden wird dann wird der Tag mit dem Schlüssel "Name" verwendet.
- FontName: der Name der Schriftart, die verwendet werden soll, z.B.: FontName=Arial,
- FontSize: die Schriftgröße eingegeben als Zoomfaktor.
- FontStyle: Der Schriftstil der verwendet werden soll (bold, italic, regular (Standard), underline, strikeout)
- TextLineOffset:gibt den Vertikalen Versatzt des Textes in bezug auf die Node an. Sie wird eingegeben in Prozent der Textgröße. Negative Werte versetzen den Text nach unten. Dieser Parameter ist verfügbar für die Modi Node, AreaCenter und WayCenter (seit V2.3).
- BorderWidth: Wenn der Wert gegeben ist wird ein Rahmen mit der vorgegebenen Dicke um den Text gezeichnet.
- Dieser Parameter ist m.E. unbrauchbar, da der Rahmen nur dann korrekt zentriert um den Text angeordnet wird, wenn TextLineOffset=0% ist! Dummerweise wird dann auch das Symbol durch Label und Rahmen überdeckt.
- BackgroundColor: gibt die Hintergrundfarbe des Rahmens vor.
- Der mit Hintergrundfarbe gefüllte Rahmen ist jedoch transparent, kann die Kollision von z.B. Node-Label und darunterliegendem Way-Label nicht verhindern!
- OutlineColor: Wenn vorgegeben wird der Textumriss in dieser Farbe dargestellt (seit V2.1)
- OutlineWidth: In Prozent der Textgröße gibt an wie stark der Textumriss sein soll.(seit V2.1)
Symbol Vorlagen Parameter
- Type: der Typ des Symbols. Verfügbar sind Square, Circle, Triangle und Diamond.
- Size: Die Größe des Symbols eingegeben als Zoomfaktor-Wert.
- BorderColor: Wenn Wert gesetzt ist, bekommt das Symbol einen Rand
- BorderWidth: die Stärke des Randes. in Prozent bezüglich des Wertes unter Width angegeben.
- BorderDashStyle: Der Linienstil des Randes
- HatchStyle: Der Schraffurstil
- BackgroundColor: die Hintergrundfarbe des Symbols
Icon Vorlagen Parameter
Bemerkung: seit der Version 2.3 kann für Noden und Flächen Piktogramme verwendet werden.
- IconUrl: Die relative Adresse des Piktogramms in Url-Schreibweise (bei file://
file://E:\irgendwas.png, offenbar existiert keinerlei funktionierende, lokale Adressierungsmöglichkeit :-( ! ) - Width: Die Größe des Icons in Zoomfaktor-Wert angegeben. (notwendig)
- HAlign und VAlign: gibt die vertikale und horizontale Ausrichtung des Piktogramms an. Möglich sind Center, Near und Far. Die Option Center wird automatisch ausgewählt.
Gebrauch der Farben
Farben können entweder in HTML Farbnamen, z.B.: red, green, lime oder im Hexidezimalsystem angegeben werden, z.B.: #FF00AB. Kosmos versteht aber auch das ARGB Scheme (Alpha-Layered RGB), das hilfreich ist, wenn transparenz erwünscht ist. Beispiel: Die Farbe #80ffff00 oder #0x80ffff00 bedeutet, Gelb mit 50% Transparenz. Je kleiner der Alpakanalwert ist A von ARGB (Alpa-Rot-Grün-Blau), meist zu kenntlichmachung auch mit vorangestellter "0x" dargestellt, desto höher die Transparenz der Vorlage.
Zoom Faktor Werte
Der Zoomfaktorwerte ermöglichen die Angabe, wie sich die Eigenschaften in Abhängigkeit der Zoom-Ebene verändern. Sie geben verschiedene Größen für verschieden Zoomfaktoren (durch Semikolon getrennt) an. Die Werte dazwischen und darüber werden interpoliert.
Width=1:1;9:1.5;17:6
bedeutet dass die Vorlage die Breite von 1 Pixel bei Zoom-Ebene 1, 1.5px bei Zoom-Ebene 9 und 6px bei Zoom-Ebene 17 bekommt.
Man kann so viele Punkte wie gewünscht angeben. Dabei müssen sie die Werte nicht dem Typ Integer entsprechen.
Linienstile
Schlüsselwort: DashStyle
Momentan sind folgende Linenstile verfügbar:
- Solid: _______
- Dash: -----
- DashDot: -.-.-.
- DashDotDot: -..-..-..
zum Beispiel
DashStyle=Dash
siehe [1] für alle Möglichkeiten.
Linienenden
Schlüsselwörter Linenanfang: LineStartCap, Linienende: LineEndCap
zum Beispiel :
LineStartCap=Round LineEndCap=Round
für alle Möglichkeiten siehe [2]
Schraffierungen
Schlüsselwort:HatchStyle
Die möglichen und unterstützen Schraffierung können unter [3] eingesehen werden; Beispiele unter LastGrape/Gregory (LwD).
Render Optionen
Diese sind verschiedene Möglichkeiten, die das Verhalten einer Vorlage verändern. Es kann momentan aber nur EliminateSeams benutzt werden:
EliminateSeams kann mit Polyline-Vorlagen verwendet werden. Wenn sie benutzt wird, versucht Kosmos, alle Wege mit dem gleichen Typ zu verbinden, bevor sie ausgegeben werden. Was bedeutet, dass Lücken behoben werden.
EliminateSeams verbindet einerseits nur Wege des selben Typs, andrerseits verhindert sie die ausführung der Option Curved=true. in dem Beispiel sind zwei Wege als drei Wege gezeichnet worden.
Überlegungen bezüglich der Performance
Wenn man eine möglichst schnelles Rendern von Karten mit Kosmos möchte, sollte man , besonders bei einem hohen Volumen von OSM-Daten, folgendes beachten:
- keine komplexen Selektoren für OSM-Noden benutzen, da diese gerade eine lange evaluation von Kosmos verlangen.
- Wenn man OSM-Daten, die auf mehreren Tags basieren benutzt, sollte nur komplexe Elementselektoren verwenden, wenn z.B Höhenlinien berechnet werden sollen oder ähnliches. Sonst nur einfache Elementselektoren benutzen. Spezialfälle, die auch für die Allgemeinheit sind kann man auf der auf der enlischen Talkseite posten, ich werde es dann versuchen in einer der nächsten Versionen zu implementieren, was dann zu höherer Performance führt.
Einschränkungen
Die Kosmos Rendering Engine besitzt mehrere Einschränkungen, die darauf beruhen, dass .NET GDI+ zum Rendern benutzt wird. Andrerseits gibt es mit jeder neuen Version auch noch Verbesserungen diesbezüglich.
Einschränkungen:
Es können nur 32 Zeichen vom Text-Template verarbeitet werden.
ToDo:
- Rendern von Einbahnstraßen
- Sackgassen werden nicht geschlossen gezeichnet
Links
- Beautify Your UIs with Perfect Pen and Brush Control - contains a list of line caps, hatches etc. supported by GDI+
- Common fonts to all versions of Windows & Mac equivalents