Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
qgis:basic:d_layer_und_daten:cl06_qgis_ausdruecke_expression [2022/05/25 12:29] mapqgis:basic:d_layer_und_daten:cl06_qgis_ausdruecke_expression [2023/05/23 15:27] (aktuell) – [Tabelle] map
Zeile 18: Zeile 18:
 [{{ :qgis:basic:images:such-den-ausdruck_qgis324.png?500px&direct|Such das Epsilon! (QGIS 3.24)}}]Überall in QGIS lassen sich mit Ausdrücken Dinge steuern: Beschriftungen, Symbolisierung, Berechnungen, Geometrien, Kartendarstellung etc... Betrachten wir die QGIS Oberfläche, finden wir auf Anhieb mehrere Stellen mit dem **Epsilon-Symbol** {{:qgis:miconexpression.png?20&nolink}}. Und dahinter verbirgt sich der **Ausdruckseditor oder Ausdrucksdialog**. [{{ :qgis:basic:images:such-den-ausdruck_qgis324.png?500px&direct|Such das Epsilon! (QGIS 3.24)}}]Überall in QGIS lassen sich mit Ausdrücken Dinge steuern: Beschriftungen, Symbolisierung, Berechnungen, Geometrien, Kartendarstellung etc... Betrachten wir die QGIS Oberfläche, finden wir auf Anhieb mehrere Stellen mit dem **Epsilon-Symbol** {{:qgis:miconexpression.png?20&nolink}}. Und dahinter verbirgt sich der **Ausdruckseditor oder Ausdrucksdialog**.
  
-Aber **nicht nur da**, sondern an vielen weiteren Stellen. Zum Beispiel bei der //Datendefinierten Übersteuerung// mit dem Symbol {{https://docs.qgis.org/3.16/de/_images/mIconDataDefine.png?20px&nolink}} - finden Sie es?+Aber **nicht nur da**, sondern auch an vielen weiteren Stellen. Zum Beispiel bei der //Datendefinierten Übersteuerung// mit diesem Symbol{{https://docs.qgis.org/3.16/de/_images/mIconDataDefine.png?20px&nolink}} - finden Sie es?
  
-<WRAP info> 
-**Attribute** (Spalte in der Attributtabelle) werden immer in **doppelte Anführungszeichen** gesetzt: ''"ATTRIBUT"''; **Werte** (Zelle der Attributtabelle) in **einfachen Anführungszeichen**: '''WERT'''. 
-</WRAP><WRAP info> 
-**Groß- und Kleinschreibung, Zeilenumbrüche oder aufeinanderfolgende Leerzeichen** spielen bei der QGIS-SQL-Syntax **keine Rolle** und können verwendet werden 
-</WRAP> 
  
 ==== Übersteuerung mit Ausdrücken, Variablen oder Feldwerten ==== ==== Übersteuerung mit Ausdrücken, Variablen oder Feldwerten ====
Zeile 42: Zeile 37:
  
 ===== Häufige Ausdrücke an praktischen Beispielen ===== ===== Häufige Ausdrücke an praktischen Beispielen =====
 +<WRAP info>
 +**Attribute** (Spalte in der Attributtabelle) werden immer in **doppelte Anführungszeichen** gesetzt: ''"ATTRIBUT"''; **Werte** (Zelle der Attributtabelle) in **einfachen Anführungszeichen**: '''WERT'''.
 +</WRAP><WRAP info>
 +**Groß- und Kleinschreibung, Zeilenumbrüche oder aufeinanderfolgende Leerzeichen** spielen bei der QGIS-SQL-Syntax **keine Rolle** und können verwendet werden
 +</WRAP>
  
-===Die einfachsten Text-Ausdrücke===+===Einfache Ausdrücke mit häufigen Operatoren===
 ^ Ausdruck                                                                     ^ Syntax                    ^ Ergebnis                                                   ^ Erläuterung                                                           ^ ^ Ausdruck                                                                     ^ Syntax                    ^ Ergebnis                                                   ^ Erläuterung                                                           ^
 | <code SQL>"Vogelart" = 'Mäusebussard' OR "Vogelart" = 'Rotmilan' </code>     | <code SQL>a OR b</code>   | Alle Mäusebussarde und alle Rotmilane werden angesprochen  | Abfrage an **einem Attribut mit zwei Möglichkeiten**                  | | <code SQL>"Vogelart" = 'Mäusebussard' OR "Vogelart" = 'Rotmilan' </code>     | <code SQL>a OR b</code>   | Alle Mäusebussarde und alle Rotmilane werden angesprochen  | Abfrage an **einem Attribut mit zwei Möglichkeiten**                  |
Zeile 50: Zeile 50:
 | <code SQL>"Vogelart" = 'Mäusebussard' AND "Verhalten" != 'kreisend' </code>  | <code SQL>a != b</code>   | Alle nicht-kreisenden Mäusebussarde werden angesprochen    | Abfrage an **zwei Attributen**. Zwei Bedingungen müssen erfüllt sein  | | <code SQL>"Vogelart" = 'Mäusebussard' AND "Verhalten" != 'kreisend' </code>  | <code SQL>a != b</code>   | Alle nicht-kreisenden Mäusebussarde werden angesprochen    | Abfrage an **zwei Attributen**. Zwei Bedingungen müssen erfüllt sein  |
  
-===Die einfachsten Ausdrücke mit Zahlenwerten=== +===Einfache Ausdrücke mit Zahlenwerten=== 
-^ Ausdruck                                                                     ^ Syntax                    ^ Ergebnis                                                   ^ Erläuterung                                                           ^+^ Ausdruck                                                                       ^ Syntax                                       ^ Ergebnis                                                            ^ Erläuterung                                                                          ^
 | <code SQL>"Vogelart" = 'Rotmilan' AND "Hoehe" > 500 </code>                    |                      <code SQL>a <> b</code> | Alle Rotmilane, welche höher als 500m fliegen werden angesprochen   | Alle **bekannten mathematischen Zeichen** können bei Zahlenwerten eingesetzt werden  | | <code SQL>"Vogelart" = 'Rotmilan' AND "Hoehe" > 500 </code>                    |                      <code SQL>a <> b</code> | Alle Rotmilane, welche höher als 500m fliegen werden angesprochen   | Alle **bekannten mathematischen Zeichen** können bei Zahlenwerten eingesetzt werden  |
 | <code SQL>"Vogelart" = 'Rotmilan' AND "Hoehe" > 100 AND "Hoehe" <= 500</code>  | <code SQL>a <= b</code>                      | Alle Rotmilane in einer Höhe zw. 100m und 501m werden angesprochen  | ...natürlich auch in **Kombination**                                                 | | <code SQL>"Vogelart" = 'Rotmilan' AND "Hoehe" > 100 AND "Hoehe" <= 500</code>  | <code SQL>a <= b</code>                      | Alle Rotmilane in einer Höhe zw. 100m und 501m werden angesprochen  | ...natürlich auch in **Kombination**                                                 |
 | <code SQL>"Vogelart" = 'Rotmilan' AND "Hoehe" > 100 AND "Hoehe" <= 500</code>  |  <code SQL>a <= b</code>                     | Alle Rotmilane in einer Höhe zw. 100m und 501m                      | ...natürlich auch in **Kombination**                                                 | | <code SQL>"Vogelart" = 'Rotmilan' AND "Hoehe" > 100 AND "Hoehe" <= 500</code>  |  <code SQL>a <= b</code>                     | Alle Rotmilane in einer Höhe zw. 100m und 501m                      | ...natürlich auch in **Kombination**                                                 |
-| <code SQL>round("Höhe",2)</code>                                                <code SQL>round(value[,places=0])</code>    | Die Höhe wird auf 2 Nachkommastellen gerundet                       | Rundungs-Funktion mit Angabe der Nachkommastellen                                    +| <code SQL>round("Höhe",2)</code>                                                <code SQL>round(value[,places=0])</code>    | Die Höhe wird auf 2 Nachkommastellen gerundet                       **Rundungs-Funktion** mit Angabe der Nachkommastellen                                
-| <code SQL>rand(1,20)</code>                                                    |  <code SQL>rand(min,max[,seed=NULL])</code>  | Ein zufälliger Zahlenwert zwischen 1 und 20 wird ausgegeben         | Zufalls-Funktion mit Angabe eines Zahlenbereichs                                     |+| <code SQL>rand(1,20)</code>                                                    |  <code SQL>rand(min,max[,seed=NULL])</code>  | Ein zufälliger Zahlenwert zwischen 1 und 20 wird ausgegeben         **Zufalls-Funktion** mit Angabe eines Zahlenbereichs                                 |
  
  
 ===sonst. Ausdrücke=== ===sonst. Ausdrücke===
-^ Ausdruck                                                                     ^ Syntax                    ^ Ergebnis                                                   ^ Erläuterung                                                           +^ Ausdruck                                              ^ Syntax                                               ^ Ergebnis                                                                          ^ Erläuterung                                                                
-| <code SQL>"Vogelart" IS NOT NULL </code>    |  <code SQL>a IS NOT b</code>   | Alle Zeilen, in welchen bei der "Vogelart" etwas drin steht   | Das Spiel mit den Leerwerten: 'NULL' steht stellvertretend für //nichts// | +| <code SQL>"Vogelart" IS NOT NULL </code>              |  <code SQL>a IS NOT b</code>                         | Alle Zeilen, in welchen bei der "Vogelart" etwas drin steht                       | Das Spiel mit den Leerwerten: 'NULL' steht stellvertretend für //nichts//  
-| <code SQL>"Vogelart" IS NULL </code>        | <code SQL>a IS b</code>        | Alle Zeilen, in welchen bei der "Vogelart" nichts drin steht  | Das Spiel mit den Leerwerten: 'NULL' steht stellvertretend für //nichts// |    +| <code SQL>"Vogelart" IS NULL </code>                  | <code SQL>a IS b</code>                              | Alle Zeilen, in welchen bei der "Vogelart" nichts drin steht                      | Das Spiel mit den Leerwerten: 'NULL' steht stellvertretend für //nichts//  | 
 +| <code SQL>coalesce("Vogelart_A","Vogelart_B")</code>  | <code SQL>coalesce(expression1,expression2…)</code>  | Wenn in Vogelart_A nichts steht, aber in Vogelart_B so wird Vogelart_B verwendet  | Liefert den **ersten nicht-NULL-Wert** der Ausdrucksliste.                 | 
 + 
 +===Geometrie-Ausdrücke=== 
 +^ Ausdruck                     ^ Syntax                        ^ Ergebnis                            ^ Erläuterung                                                                                                          ^ 
 +| <code SQL>$length</code>      <code SQL>$length</code>     | Gibt die Länge einer Linie aus      | Gilt nur für **Linienobjekte**. Es werden die aktuellen Ellipsoid- und Abstandseinheiteneinstellung berücksichtigt   | 
 +| <code SQL>$area</code>        <code SQL>$area</code>       | Gibt die Fläche eines Polygons aus  | Gilt nur für **Polygonobjekte**. Es werden die aktuellen Ellipsoid- und Abstandseinheiteneinstellung berücksichtigt 
 +| <code SQL>$perimeter</code>  |  <code SQL>$perimeter</code>  | Gibt den Umfang eines Polygons aus  | Gilt nur für **Polygonobjekte**. Es werden die aktuellen Ellipsoid- und Abstandseinheiteneinstellung berücksichtigt 
 +| <code SQL>$x</code>          |  <code SQL>$x</code>          | x-Koordinate eines Punktes          | Gilt nur für **Punktobjekte**.                                                                                       | 
 +| <code SQL>$y</code>          |  <code SQL>$y</code>          | y-Koordinate eines Punktes          | Gilt nur für **Punktobjekte**.                                                                                       | 
 + 
 + 
 + 
  
-===Die QGIS-Fälle=== +===Die QGIS Wenn-Dann-Sonst-Fälle=== 
-^ Ausdruck                                                                                                                           ^ Syntax                                                                         ^ Ergebnis                                                                                                                    ^ Erläuterung                                                                                                   ^ +^ Ausdruck                                                                                                                        ^ Syntax                                                                         ^ Ergebnis                                                                                                                   ^ Erläuterung                                                                                                   ^ 
-| <code SQL>IF("Hoehe" > 500, 'hoch', 'niedrig')</code>                                                                              |  <code SQL>if(condition,result_when_true,result_when_false)</code>             | Ab einer Höhe von über 500 schreibe 'hoch' ansonsten schreibe 'niedrig'                                                     | Kann auch in mehreren Zeilen geschrieben werden                                                               | +| <code SQL>IF("Hoehe" > 500, 'hoch', 'niedrig')</code>                                                                           |  <code SQL>if(condition,result_when_true,result_when_false)</code>             | Ab einer Höhe von über 500 schreibe 'hoch' ansonsten schreibe 'niedrig'                                                    **Wenn-Dann-Sonst**-Syntax. Kann auch in mehreren Zeilen geschrieben werden                                   
-| <code SQL>CASE WHEN "Hoehe" > 300 THEN 'hoch' ELSE 'niedrig' END</code>                                                            |  <code SQL>CASE WHEN bedingung THEN ergebnis […n] [ELSE  ergebnis] END</code>  | Ab einer Höhe von über 500 schreibe 'hoch' ansonsten schreibe 'niedrig'                                                     | Wie oben, mit dem entscheidenten Unterschied, dass beliebig viele "WHEN"-Fälle kombiniert werden können s.U.  +| <code SQL>CASE 
-| <code SQL>CASE  +WHEN "Hoehe" > 300 THEN 'hoch'
-WHEN "Hoehe" > 300 AND "Hoehe" < 500 THEN 'hoch' +
-WHEN "Hoehe" > 500 THEN 'sehr hoch'+
 ELSE 'niedrig' ELSE 'niedrig'
-END</code>  |  <code SQL>CASE WHEN bedingung THEN ergebnis […n] [ELSE  ergebnis] END</code>  | Bei einer Höhe von 300-500 schreibe 'hoch', bei über 500 schreibe 'sehr hoch', in allen anderen Fällen schreibe 'niedrig'                                                                                                                 |+END</code>                                                        <code SQL>CASE WHEN bedingung THEN ergebnis […n] [ELSE  ergebnis] END</code>  | Ab einer Höhe von über 500 schreibe 'hoch' ansonsten schreibe 'niedrig'                                                    | Wie oben, mit dem entscheidenden Unterschied, dass **beliebig viele "WHEN"-Fälle** kombiniert werden können s.U.  | 
 +| <code SQL>CASE   
 +WHEN "Hoehe" > 300 AND "Hoehe" < 500 THEN 'hoch'  
 +WHEN "Hoehe" > 500 THEN 'sehr hoch'  
 +ELSE 'niedrig'  
 +END</code>  |  <code SQL>CASE WHEN bedingung THEN ergebnis […n] [ELSE  ergebnis] END</code>  | Bei einer Höhe von 300-500 schreibe 'hoch', bei über 500 schreibe 'sehr hoch', in allen anderen Fällen schreibe 'niedrig'  Beliebig häufig kann das Spiel mit WHEN-THEN wiederholt werden.                                                                                                              | 
 + 
  
  
Zeile 79: Zeile 97:
   * <do map>Ausdrucksdialog Screenshot erneuern</do>   * <do map>Ausdrucksdialog Screenshot erneuern</do>
   * <do map>Sammlung an Beispielen an Übungsdatensatz</do>   * <do map>Sammlung an Beispielen an Übungsdatensatz</do>
 +
 +
 +----
 +
 +~~DISCUSSION|Fragen, Hinweise und Fehler kommen hier hin:~~
 +