Skip to content

Layerstile

Alle Layer eines Anwendungsschemas teilen sich einen CartoSym-Stil, <Plugin-Dir>/resources/styles/<appschema>.yaml – für xplan also styles/xplan.yaml (im Repository: style/definitions/xplan.yaml). Existiert die Datei, ersetzt sie die style-Angaben der Layerkonfiguration; andernfalls gilt style, das nur auf QML-Dateien verweisen kann.

Aufbau

Die Datei folgt festen Konventionen, damit jeder Layer genau seinen Teil sieht und ihn nach dem Bearbeiten in QGIS wieder zurückschreiben kann:

  1. Oberste Ebene: Featuretype-Regeln – featuretype = 'X' oder featuretype IN (...), optional in Gruppen zusammengefasst (in xplan z.B. featuretype LIKE 'BP_%'). Diese Regeln werden von allen Layern geteilt. Über featuretype_regex (verglichen ab Anfang des Featuretype-Namens, wie beim Laden der Objekte) blendet ein Layer Featuretype-Regeln aus, die er nie enthält. Eine Gruppe blendet er nur aus, wenn sie ausschließlich Featuretype-Regeln enthält, von denen er keine sieht.
  2. Darunter: Kontextknoten – dataLayer.featuresGeometryDimensions = 0|1|2 für Punkt-, Linien- bzw. Flächenlayer (geometry), darunter ggf. Layer-Eigenschaften wie flaechenschluss = true|false (properties.flaechenschluss). Was unter einem Kontextknoten steht, gehört allein den passenden Layern.
  3. Darunter: der Inhalt des Layers – Symbolisierungen und weitere Regeln mit Filtern auf Attribute.
stylingRules:
-   vendor.xleitstelle.id: 4f0c…
    name: BP_AnpflanzungBindungErhaltung
    selector:
        op: =
        args: [{sysId: dataLayer.id}, BP_AnpflanzungBindungErhaltung]
    nestedRules:
    -   vendor.xleitstelle.id: 9a1e…
        selector:
            op: =
            args: [{sysId: dataLayer.featuresGeometryDimensions}, 0.0]
        nestedRules:
        -   vendor.xleitstelle.id: c27b…
            symbolizer:
                marker: …

Weitere Regeln:

  • Filter dürfen nur featuretype und properties[...] verwenden.
  • Jede Regel trägt eine vendor.xleitstelle.id; darüber werden Regeln beim Zurückschreiben wiedererkannt.
  • Alle Größen sind in Karteneinheiten (Meter) angegeben.
  • Bildpfade (SVG) sind relativ zu resources/styles/svg.

Legendentexte

Der $comment einer Regel ist ihr Legendentext, den die Planurkunde verwendet; in QGIS ist er die Beschreibung der Regel und wird mit Layerstile exportieren zurückgeschrieben. Hat eine Regel keinen, steht in der Legende ihr Name. Legendentexte brauchen alle Regeln, die ein Symbol erhalten (die Featuretype-Regel, wenn ihre Symbolisierung direkt darunter liegt, sonst die Attributregeln darunter); die Texte folgen der Planzeichenverordnung, wo sie ein Planzeichen hat. Abweichende Texte für einzelne Pläne oder Gemeinden gehören nicht hierher, sondern in layout.yaml.

Planzeichen

Ein Präsentationsobjekt erhält seine stylesheetId nach den Regeln von XMAS-Core aus den Attributen des Fachobjekts, die es mit art darstellt, z.B. besondereArtDerBaulNutzung 1200 → Allgemeines Wohngebiet (PZ 1.1.3, Text WA). Damit die Legende einer Stilregel ihr Planzeichen zuordnen kann, gilt:

  • Eine Stilregel legt ihr Planzeichen mit =, IN oder array_contains fest, über ihr bis zur Featuretype-Regel ggf. weitere benannte Regeln (deren Werte zählen mit). Eine Regel für mehrere Planzeichen wird je Wert geteilt: Die Baugebiete von BP_BaugebietsTeilFlaeche haben je eine Regel für ihre besondereArtDerBaulNutzung; die Regel der Baufläche (allgArtDerBaulNutzung) gilt nur ohne sie oder mit 9999, damit keine Fläche doppelt gezeichnet wird.
  • Unter XP_PTO und XP_PPO wählt je eine benannte Regel eine stylesheetId aus, mit der UUID, wie die Webapp sie an QGIS gibt (ohne die URL der Codeliste XP_StylesheetListe): stylesheetId = '<UUID>'. Ihre Regel Allgemein zeichnet die übrigen Präsentationsobjekte; ihr Filter schließt die UUIDs der Regeln daneben aus, damit kein Objekt doppelt erscheint. Eine neue Regel für eine stylesheetId gehört deshalb auch in diese Liste.
  • Ein Text aus schriftinhalt erscheint in der Legende als der Text, den die Webapp für das Planzeichen nennt; ein Legendeneintrag hat kein Objekt, aus dem er ihn lesen könnte.

Stile in QGIS bearbeiten

  1. Plan laden, Layer-Eigenschaften → Symbolisierung öffnen (Stil Standard muss aktiv sein) und die regelbasierte Darstellung wie gewohnt bearbeiten.
  2. Im Plugin-Dock Layerstile exportieren klicken. Jeder geänderte Layer ersetzt den Teil von <appschema>.yaml, den er sieht; danach werden alle Plugin-Layer neu aus der Datei gestylt. Layer, deren Stil Editieren aktiv ist oder deren Darstellung nicht regelbasiert ist, werden weder exportiert noch neu gestylt. Wurde derselbe Layer in mehreren Plänen unterschiedlich geändert, bricht der Export ohne Änderung ab.
  3. Was das YAML-Format nicht abbilden kann (z.B. Strichart, Markerfarbe, andere Symbollayer-Typen, ELSE-Regeln, Maßstabsbereiche), wird nicht übernommen und als Warnung im Protokoll gemeldet. Ein Filter, der sich nicht übertragen lässt, bricht den Export ab.
  4. Die geänderte Datei liegt im installierten Plugin. Um sie zu behalten, nach style/definitions/ im Repository kopieren – pixi run build-zip überschreibt resources/styles/*.yaml mit den Dateien von dort.

YAML für ein neues Anwendungsschema erzeugen

Gibt es für ein Anwendungsschema der geladenen Layer (z.B. xtrasse) noch keine YAML-Datei, bietet Layerstile exportieren an, sie aus den aktuellen Layerstilen zu erzeugen. Dabei wird die Darstellung jedes Layers übernommen – auch die zufälligen Standardfarben bisher ungestylter Layer – und unter eine Featuretype-Regel gehängt:

  • Featuretype-Regeln an oberster Stelle der Darstellung bleiben erhalten.
  • Alle übrigen Regeln kommen unter eine Regel für featuretype_regex, der dafür ein einfacher Featuretype-Name sein muss (z.B. PFS_Baugrube → featuretype = 'PFS_Baugrube').
  • Ist er das nicht (z.B. ^.*Plan$), wird die Datei nicht erzeugt. Dann in QGIS über die bestehenden Regeln eine Regel wie "featuretype" IN ('PFS_Plan', 'RVP_Plan') legen und erneut exportieren.
  • Gehört derselbe Featuretype zu mehreren Layern (z.B. Punkt und Fläche), landen beide unter einer gemeinsamen Featuretype-Regel.
  • Ist ein Layer in mehreren Plänen geladen, wird der erste übernommen. Mit QML gestylte Kopien müssen dabei übereinstimmen, sonst wird die Datei wegen eines Konflikts nicht erzeugt; bisher ungestylte Kopien werden nicht verglichen.

Kann die Datei nicht erzeugt werden, behalten die Layer des Anwendungsschemas ihre aktuelle Darstellung; die übrigen Stildateien werden trotzdem exportiert.

Größen werden als Karteneinheiten übernommen: Ein in Millimetern angegebener Wert wird zu Metern und sieht damit im Maßstab 1:1000 gleich aus. Mit der neuen Datei ersetzt diese die QML-Stile des Anwendungsschemas; die Datei wie unter Schritt 4 nach style/definitions/ übernehmen.