Allgemeines

CQL-Ausdrücke können Sie dazu verwenden um Linienbreiten, Farben, Symbolnamen, Drehwinkel usw. in Vektorlayerdefinitionen über Formeln abzuleiten.

Zugriff auf Attribute

Grundsätzlich können Sie in CQL auf den Wert eines jeden Attributes eines Datensatzes zugreifen. In diesem Fall ist einfach die Bezeichnung des Attributes des jeweiligen Features anzugeben:

...
<width>
	<cql>width</cql>
</width>
...

Im Beispiel wird auf das Featureattribut "width" zugegriffen. Alternativ könnten Sie stattdessen anlog zu Wert- und Farbangaben folgenden Ausdruck verwenden:

...
<width>
	<featureValue>
		<attributeName>width</attributeName>
	</featureValue>
</width>
...

Eine Übersicht über die verfügbaren Attribute einer GISX 2.x Datenbank finden Sie an dieser Stelle.

Bei SHAPE Daten sind die Attributnamen mit den Spaltenbezeichnungen der jeweiligen .dbf Datei identisch.

Arbeiten mit Konstanten

Natürlich können Sie in CQL auch Konstanten verwenden. Zahlen können Sie einfach schreiben:

...
<width>
	<cql>10.0</cql>
</width>
...

Im Beispiel würden alle Datensätze eines Layers mit der Linienstärke 10.0 dargestellt. Alternativ könnten Sie stattdessen anlog zu Wert- und Farbangaben folgenden Ausdruck verwenden:

...
<width>
	<layerValue>10.0</layerValue>
</width>
...

 Textwerte sind hierzu in "'" anzugeben:

...
<icon>
	<cql>'Schule'</cql>
</icon>
...

Im Beispiel würden alle Datensätze eines Layers mit dem Symbol "Schule" dargestellt. Alternativ könnten Sie stattdessen anlog zu Wert- und Farbangaben folgenden Ausdruck verwenden:

...
<icon>
	<layerValue>Schule</layerValue>
</icon>
...
Icon

Farbwerte als Konstante geben Sie als HEX Wert mit vorgesteller "#" an: '#FF0000' ist z.B. die Farbe Rot.

Arbeiten mit Funktionen

Ähnlich wie in SQL stehen Ihnen in CQL diverse Funktionen zur Verfügung. Alternativ können Sie auch sämtliche mathematischen Grundrechenoperationen durchführen:

...
<width>
	<cql>width*0.1</cql>
</width>
...

Im Beispiel wird ein Attribut "width" mit 0.1 multipliziert und das Ergebnis als Linienstärke verwendet.

Eingebaute Funktionen

Eine vollständige Liste mit verfügbaren Funktionen finden Sie unter http://docs.geoserver.org/stable/en/user/filter/function_reference.html#filter-function-reference

GEOGRAT Funktionen

Zusätzlich wurden von GEOGRAT einige weitere Funktionen definiert.

Hier sind nur Funktionen aufgeführt, die im Endanwenderkontext tatsächlich Sinn machen. Zu einem späteren Zeitpunkt sollten wir die einzelnen Funktionen auf extra Seiten ausgliedern.

ConvertToColor

Beschreibung

Konvertiert einen beliebigen Wert (Auch Indexfarben) in eine gültige Farbe:

Syntax:

convertToColor(<Wert für Konvertierung>,[<Standardwert>])

Parameter

<Wert für Konvertierung> := Der Wert der konvertiert werden soll. Kann auch ein Farbindex sein.

<Standardwert> := Ein Wert der verwendet wird falls <Wert für Konvertierung> null oder ungültig ist:

Beispiel

<cql>convertToColor(colorAttribute,'#FF0000')</cql>

Im Beispiel wird die Farbe aus dem Attribut "colorAttribute" verwendet. Ist dort keine Farbe angegeben (oder die Farbe ist ungülitg), wird die Farbe rot verwendet.

HasValue

Prüft ob ein beliebiger Ausdruck einen Wert enthält und verwendet wenn nicht einen Standardwert

Syntax

hasValue(<Wert>,<Standardwert>)

Parameter

<Wert> := Wert der überprüft werden soll

<Standardwert> := Ein Wert (oder ein Ausdruck) der verwendet wird falls <Wert> null ist.

Beispiel

<cql>hasValue(attribute,'default')</cql>

Im Beispiel wird ein Wert aus dem Attribut "attribute" verwendet. Ist dort kein Wert angegeben, wird der Wert "default" verwendet.

Beispiele

Linienstärke aus GISX2 DN Angabe korrekt ableiten

...
<lineStyle>
  ...
  <width>
    <cql>if_then_else(lessThan(hasValue(width,0),10),0.01,width*0.001)</cql>
   </width>
   <unit>m</unit>
   ...
</lineStyle>
...

Folgende CQL Anweisung bedeuted:

  • Wenn (if_then_else)
    • der Wert aus dem Attribut "width" kleiner als 10 ist (DN werden immer als Millimeter angegeben) (lessThan(hasValue(width,0),10))
      • Berücksichtige dabei aber dass Attribut "width" leer sein kann und nimm dafür 0 an (hasValue(width,0))
  • dann gib einen Wert von 0.01 zurück
  • sonst multipliziere das Attribut "width" mit 0.001 (width*0.001)