36 Commits

Author SHA1 Message Date
800488fb15 Merge pull request 'feature/Druck_tab' (#14) from feature/Druck_tab into unstable
Reviewed-on: AG_QGIS/Plugin_SN_Plan41#14
2026-03-20 22:58:48 +01:00
4d0dcc0310 Atlasobjekte sind jetzt weniger langgestrckt 2026-03-20 22:56:10 +01:00
a54d4fbe3c Altlasfunktion eingebaut (wenn plotgröße größer als Zielformat) 2026-03-20 22:32:30 +01:00
284f2a2a03 bug/Hauptkarte verschwindet beim Druck behoben 2026-03-20 14:31:10 +01:00
d21483ce53 Layouterzeugung ergänzt (nur Einzelblätter) 2026-03-20 14:02:15 +01:00
bfc9fae324 Vorlagen-Pipeline angelegt (Start bis Prüfung Atlas-Anzahl) 2026-03-20 12:43:01 +01:00
ff5fd990bc Blattgrößen-Auswahl und Endlosrollen-Checkbox ergänzt 2026-03-20 12:01:44 +01:00
fcf5b11373 Bezeichnungen Thema und Ansicht konsistent zur QGIS-Verwendung getauscht (alt=Thema, neu=Kartenname, alt=Ansicht,neu=Thema) 2026-03-20 11:45:36 +01:00
6a4c7b4609 Ansicht-Combobox bleibt bei Projektwechsel konsistent 2026-03-20 11:31:44 +01:00
a3b22d0444 Combobox Ansicht hinzugefügt 2026-03-20 10:37:08 +01:00
5c00b4abee Comboboxen Thema und Massstab hinzugefügt 2026-03-20 10:11:42 +01:00
6261b88fee Tab B und Tab B logic angelegt 2026-03-19 16:32:01 +01:00
6436b06a43 Merge pull request 'Text im label geändert' (#13) from bug/Messagebox_Fachdaten_laden into unstable
Reviewed-on: AG_QGIS/Plugin_SN_Plan41#13
2026-03-19 15:47:35 +01:00
43d52145ef Text im label geändert 2026-03-19 15:45:06 +01:00
Michael Otto
a9f75e9019 Release-Workflow hinzugefügt und plugin.info zu plugin.cfg umbenannt 2026-03-13 14:02:44 +01:00
Michael Otto
c5f2093a49 Add plugin.info based on metadata.txt 2026-03-13 08:39:12 +01:00
Michael Otto
a79469e4d2 Add .gitea from Plugin_Test_Action main 2026-03-13 08:28:27 +01:00
f7926d71d2 Merge pull request 'daniel@feature/dataGrabber_anbinden' (#6) from Daniel/Plugin_SN_Plan41:daniel@feature/dataGrabber_anbinden into unstable
Reviewed-on: AG_QGIS/Plugin_SN_Plan41#6
2026-03-13 06:52:53 +01:00
d80f8945be Diensteabruf integriert 2026-03-12 16:14:24 +01:00
3f553efd21 "Fachdaten laden" lädt Pufferlayer und erzeugt Verfahrens-DB (oder temp) 2026-03-11 20:56:53 +01:00
1de7526db8 Pipeline von Tab_A_ui in Tab_a_logic verschoben 2026-03-11 13:27:16 +01:00
ffe479ad8b fix QGIS4-Kompatibilität 2026-03-11 12:38:39 +01:00
c0bee6df98 Button Fachdaten laden (alt) entfernt 2026-03-06 10:22:50 +01:00
494a913d24 Merge pull request 'tab_a_ui, tab_a_logic überarbeitet; UI lauffähig, beim Klick auf "Fachdaten laden" mit leerem Verfahrens-DB-Feld kommt die Abfrage, ob temporär gearbeitet werden soll, bei Auswahl einer bestehenden gpkg kommt Blödsinn' (#5) from Daniel/Plugin_SN_Plan41:dev into dev
Reviewed-on: AG_QGIS/Plugin_SN_Plan41#5
2026-03-04 19:44:24 +01:00
fc55735477 tab_a_ui, tab_a_logic überarbeitet; UI lauffähig, beim Klick auf "Fachdaten laden" mit leerem Verfahrens-DB-Feld kommt die Abfrage, ob temporär gearbeitet werden soll, bei Auswahl einer bestehenden gpkg kommt Blödsinn
bei neuer Datei wird korrekt der datei_erzeugen_modus übergeben. Data Grabber noch nicht angebunden
2026-03-04 15:31:36 +01:00
8bc86d8e27 Merge pull request 'dev' (#4) from Daniel/Plugin_SN_Plan41:dev into dev
Reviewed-on: https://entwicklung.vln-sn.de/AG_QGIS/Plugin_SN_Plan41/pulls/4
2026-02-25 13:23:32 +01:00
b5f663d9de Button Fachdaten laden hinzugefügt und angebunden (pipeline datagrabber-prüfer-datenlader-datenschreiber) 2026-02-14 22:15:58 +01:00
93b17e154c angefangen, datagrabber anzulegen (nicht lauffähig) 2026-02-13 21:38:25 +01:00
e153a45ffa Fix: Bezeichnung des Datentabs (TabA) war TabA anstatt "Daten" 2026-01-09 15:19:41 +01:00
3bfd88b51e auf Wrapper umgestellt, tests ergänzt 2026-01-08 17:13:43 +01:00
8f8a1ccde3 Anpassung ERD für Andreas 2025-12-17 11:41:41 +01:00
c8409c7f25 fehlende Attribute in der ERD.md ergänzt, Datentypen korrigiert 2025-12-15 16:13:26 +01:00
76b8a8ad13 Dateiendung Linkliste korrigiert, Datenbank-ERD angelegt 2025-12-11 21:43:00 +01:00
f5a5ed167b Dateieingabe Verfahrens-DB und Linkliste in Tab A eingefügt, Verfahrensgebiets-Layerauswahl in Tab A eingefügt. 2025-12-05 13:07:37 +01:00
5177a526a3 stile in sn_basis verschoben 2025-12-02 20:56:23 +01:00
e514e7571e Stile und Linkliste aus Plan41 übernommen, Ordner angelegt 2025-12-02 20:32:04 +01:00
34 changed files with 7958 additions and 31 deletions

View File

@@ -0,0 +1,295 @@
name: Release Plugin
run-name: "Release | ${{ github.ref_name }}"
on:
push:
tags:
- 'v*'
jobs:
release:
runs-on: alpine-latest
defaults:
run:
shell: bash
steps:
- name: Notwendige Abhängigkeiten installieren
shell: sh
run: |
apk add --no-cache git zip curl jq rsync bash
git config --global http.sslVerify false
- name: Code holen
run: |
# Tag aus GitHub Actions Kontext extrahieren
TAG="${GITHUB_REF#refs/tags/}"
# Repo-URL dynamisch aus vars und github.repository bauen
REPO_URL="https://${RELEASE_TOKEN}:x-oauth-basic@${{ vars.RELEASE_URL }}/${GITHUB_REPOSITORY}.git"
# Repository klonen
git clone "$REPO_URL" repo
cd repo
git checkout "$TAG"
env:
RELEASE_TOKEN: ${{ secrets.RELEASE_TOKEN }}
- name: Version und Kanal bestimmen
id: releaseinfo
run: |
TAG="${{ github.ref_name }}"
VERSION="${TAG#v}"
case "$TAG" in
*-unstable*)
CHANNEL="unstable"
DRAFT="false"
PRERELEASE="true"
;;
*-testing*)
CHANNEL="testing"
DRAFT="false"
PRERELEASE="true"
;;
*)
CHANNEL="stable"
DRAFT="false"
PRERELEASE="false"
;;
esac
echo "version=$VERSION" >> $GITHUB_OUTPUT
echo "channel=$CHANNEL" >> $GITHUB_OUTPUT
echo "draft=$DRAFT" >> $GITHUB_OUTPUT
echo "prerelease=$PRERELEASE" >> $GITHUB_OUTPUT
- name: plugin.cfg einlesen
id: info
run: |
cd repo
while read -r line || [ -n "$line" ]; do
key="${line%%=*}"
value="${line#*=}"
echo "$key=$value" >> $GITHUB_OUTPUT
echo "$key=$value"
done < plugin.cfg
- name: Changelog einlesen
id: changelog
run: |
cd repo
# Aktueller Block = alles vor dem ersten ---
CURRENT=$(awk '/^---/{exit} {print}' changelog.txt)
# Vollständige Historie = alles nach dem ersten ---
HISTORY=$(awk 'found{print} /^---/{found=1}' changelog.txt)
# Gitea Release Body zusammenbauen
VERSION="${{ steps.releaseinfo.outputs.version }}"
FULL=$(printf "## %s\n%s\n\n%s" "$VERSION" "$CURRENT" "$HISTORY")
echo "DEBUG | Aktueller Changelog:"
echo "$CURRENT"
# Für GITHUB_OUTPUT: Multiline via EOF-Marker
echo "current<<EOF" >> $GITHUB_OUTPUT
echo "$CURRENT" >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT
echo "full<<EOF" >> $GITHUB_OUTPUT
echo "$FULL" >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT
- name: metadata.txt erzeugen
run: |
cd repo
# ------------------------ GEÄNDERT ------------------------
# Temporär die Vorlage aus dem hidden/templates Branch holen
git fetch origin hidden/templates
git checkout origin/hidden/templates -- metadata.template
TEMPLATE="metadata.template"
# -----------------------------------------------------------
# TEMPLATE="templates/metadata.template"
OUT="metadata.txt"
CONTENT=$(cat "$TEMPLATE")
CONTENT="${CONTENT//\{\{NAME\}\}/${{ steps.info.outputs.name }}}"
CONTENT="${CONTENT//\{\{QGIS_MIN\}\}/${{ steps.info.outputs.qgisMinimumVersion }}}"
CONTENT="${CONTENT//\{\{QGIS_MAX\}\}/${{ steps.info.outputs.qgisMaximumVersion }}}"
CONTENT="${CONTENT//\{\{DESCRIPTION\}\}/${{ steps.info.outputs.description }}}"
CONTENT="${CONTENT//\{\{VERSION\}\}/${{ steps.releaseinfo.outputs.version }}}"
CONTENT="${CONTENT//\{\{AUTHOR\}\}/${{ steps.info.outputs.author }}}"
CONTENT="${CONTENT//\{\{EMAIL\}\}/${{ steps.info.outputs.email }}}"
CONTENT="${CONTENT//\{\{HOMEPAGE\}\}/${{ vars.RELEASE_URL }}/${GITHUB_REPOSITORY}}"
CONTENT="${CONTENT//\{\{TRACKER\}\}/${{ vars.RELEASE_URL }}/${GITHUB_REPOSITORY}}"
CONTENT="${CONTENT//\{\{REPOSITORY\}\}/${{ vars.RELEASE_URL }}/${GITHUB_REPOSITORY}}"
CONTENT="${CONTENT//\{\{EXPERIMENTAL\}\}/${{ steps.info.outputs.experimental }}}"
CONTENT="${CONTENT//\{\{DEPRECATED\}\}/${{ steps.info.outputs.deprecated }}}"
CONTENT="${CONTENT//\{\{QT6\}\}/${{ steps.info.outputs.supportsQt6 }}}"
printf "%s\n" "$CONTENT" > "$OUT"
rm $TEMPLATE
- name: ZIP-Datei erstellen
id: zip
run: |
cd repo
ZIP_FOLDER="${{ steps.info.outputs.zip_folder }}"
ZIP_FILE="${ZIP_FOLDER}.zip"
echo "ZIP_FOLDER: $ZIP_FOLDER"
echo "ZIP_FILE: $ZIP_FILE"
VERSION="${{ steps.releaseinfo.outputs.version }}"
REPO_NAME="${GITHUB_REPOSITORY##*/}"
#ZIP_NAME="${REPO_NAME}-${VERSION}.zip"
mkdir -p dist/${ZIP_FOLDER}
rsync -a \
--exclude='.git' \
--exclude='.gitea' \
--exclude='.plugin' \
--exclude='dist' \
./ dist/${ZIP_FOLDER}/
cd dist
zip -r "${ZIP_FILE}" "${ZIP_FOLDER}/" \
-x "*.pyc" -x "*/__pycache__/*"
cd ..
echo "zip_file=${ZIP_FILE}" >> $GITHUB_OUTPUT
- name: Gitea-Release erstellen
id: create_release
run: |
TAG="${{ github.ref_name }}"
VERSION="${{ steps.releaseinfo.outputs.version }}"
CHANNEL="${{ steps.releaseinfo.outputs.channel }}"
API_URL="https://${{ vars.RELEASE_URL }}/api/v1/repos/${GITHUB_REPOSITORY}/releases"
JSON=$(jq -n \
--arg tag "$TAG" \
--arg name "Version $VERSION" \
--arg body "${{ steps.changelog.outputs.current }}" \
--argjson draft "${{ steps.releaseinfo.outputs.draft }}" \
--argjson prerelease "${{ steps.releaseinfo.outputs.prerelease }}" \
'{tag_name: $tag, name: $name, body: $body, draft: $draft, prerelease: $prerelease}')
API_RESPONSE=$(curl -s -X POST "$API_URL" \
-H "accept: application/json" \
-H "Authorization: token ${{ secrets.RELEASE_TOKEN }}" \
-H "Content-Type: application/json" \
-d "$JSON")
RELEASE_ID=$(echo "$API_RESPONSE" | jq -r '.id')
if [ "$RELEASE_ID" = "null" ] || [ -z "$RELEASE_ID" ]; then
echo "Fehler beim Erstellen des Releases!"
echo "$API_RESPONSE"
exit 1
fi
echo "release_id=$RELEASE_ID" >> $GITHUB_OUTPUT
- name: ZIP-Datei hochladen
run: |
RELEASE_ID="${{ steps.create_release.outputs.release_id }}"
ZIP_FILE="${{ steps.zip.outputs.zip_file }}"
API_URL="https://${{ vars.RELEASE_URL }}/api/v1/repos/${GITHUB_REPOSITORY}/releases/${RELEASE_ID}/assets?name=${ZIP_FILE}"
curl -s -X POST "$API_URL" \
-H "Authorization: token ${{ secrets.RELEASE_TOKEN }}" \
-H "Content-Type: application/zip" \
--data-binary "@repo/dist/${ZIP_FILE}" \
-o upload_response.json
# Optional: Fehlerprüfung
if jq -e '.id' upload_response.json >/dev/null 2>&1; then
echo "ZIP erfolgreich hochgeladen."
else
echo "Fehler beim Hochladen der ZIP!"
exit 1
fi
- name: Payload erzeugen
run: |
cd repo
VERSION="${{ steps.releaseinfo.outputs.version }}"
CHANNEL="${{ steps.releaseinfo.outputs.channel }}"
ZIP_FILE="${{ steps.zip.outputs.zip_file }}"
DOWNLOAD_URL="https://${{ vars.RELEASE_URL }}/${GITHUB_REPOSITORY}/releases/download/${{ github.ref_name }}/${ZIP_FILE}"
jq -n \
--arg name "${{ steps.info.outputs.name }}" \
--arg version "$VERSION" \
--arg channel "$CHANNEL" \
--arg description "${{ steps.info.outputs.description }}" \
--arg author "${{ steps.info.outputs.author }}" \
--arg email "${{ steps.info.outputs.email }}" \
--arg qgis_min "${{ steps.info.outputs.qgisMinimumVersion }}" \
--arg qgis_max "${{ steps.info.outputs.qgisMaximumVersion }}" \
--arg homepage "${{ vars.RELEASE_URL }}/${GITHUB_REPOSITORY}" \
--arg tracker "${{ vars.RELEASE_URL }}/${GITHUB_REPOSITORY}" \
--arg repository "${{ vars.RELEASE_URL }}/${GITHUB_REPOSITORY}" \
--arg experimental "${{ steps.info.outputs.experimental }}" \
--arg deprecated "${{ steps.info.outputs.deprecated }}" \
--arg qt6 "${{ steps.info.outputs.supportsQt6 }}" \
--arg id "${{ steps.info.outputs.zip_folder }}" \
--arg url "$DOWNLOAD_URL" \
--arg changelog "${{ steps.changelog.outputs.current }}" \
'{
name: $name,
version: $version,
channel: $channel,
description: $description,
author: $author,
email: $email,
qgis_min: $qgis_min,
qgis_max: $qgis_max,
homepage: $homepage,
tracker: $tracker,
repository: $repository,
experimental: $experimental,
deprecated: $deprecated,
qt6: $qt6,
id: $id,
url: $url,
changelog: $changelog
}' > payload.json
- name: Repository aktualisieren
run: |
OWNER="AG_QGIS"
WORKFLOW="update.yml"
PAYLOAD_B64=$(base64 -w0 repo/payload.json)
FULL_NAME="${{ steps.info.outputs.name }}"
NAME=$(echo "$FULL_NAME" | awk -F'|' '{gsub(/^ +| +$/,"",$2); print $2}')
TAG="${{ steps.releaseinfo.outputs.version }}"
JSON="{\"ref\":\"hidden/workflows\",\"inputs\":{\"payload\":\"$PAYLOAD_B64\",\"name\":\"$NAME\",\"tag\":\"$TAG\"}}"
#JSON="{\"ref\":\"hidden/workflows\",\"inputs\":{\"payload\":\"$PAYLOAD_B64\"}}"
echo "DEBUG | Sende JSON:"
echo "$JSON"
curl -X POST \
-H "Authorization: token ${{ secrets.RELEASE_TOKEN }}" \
-H "Content-Type: application/json" \
-d "$JSON" \
"https://${{ vars.RELEASE_URL }}/api/v1/repos/${OWNER}/Repository/actions/workflows/${WORKFLOW}/dispatches"

View File

@@ -0,0 +1,808 @@
<!DOCTYPE qgis PUBLIC 'http://mrcc.com/qgis.dtd' 'SYSTEM'>
<qgis hasScaleBasedVisibilityFlag="0" simplifyDrawingTol="1" symbologyReferenceScale="-1" simplifyAlgorithm="0" labelsEnabled="0" version="3.40.7-Bratislava" simplifyLocal="1" maxScale="0" readOnly="0" autoRefreshMode="Disabled" simplifyMaxScale="1" minScale="100000000" autoRefreshTime="0" styleCategories="AllStyleCategories" simplifyDrawingHints="1">
<flags>
<Identifiable>1</Identifiable>
<Removable>1</Removable>
<Searchable>1</Searchable>
<Private>0</Private>
</flags>
<temporal mode="0" fixedDuration="0" endExpression="" startExpression="" accumulate="0" limitMode="0" durationUnit="min" enabled="0" durationField="OBJECTID" startField="DATUMERF" endField="">
<fixedRange>
<start></start>
<end></end>
</fixedRange>
</temporal>
<elevation extrusionEnabled="0" symbology="Line" respectLayerSymbol="1" zoffset="0" showMarkerSymbolInSurfacePlots="0" zscale="1" binding="Centroid" type="IndividualFeatures" extrusion="0" clamping="Terrain">
<data-defined-properties>
<Option type="Map">
<Option name="name" type="QString" value=""/>
<Option name="properties"/>
<Option name="type" type="QString" value="collection"/>
</Option>
</data-defined-properties>
<profileLineSymbol>
<symbol alpha="1" clip_to_extent="1" name="" type="line" frame_rate="10" force_rhr="0" is_animated="0">
<data_defined_properties>
<Option type="Map">
<Option name="name" type="QString" value=""/>
<Option name="properties"/>
<Option name="type" type="QString" value="collection"/>
</Option>
</data_defined_properties>
<layer id="{615d2245-88ff-43f8-93ab-3beccd4bd7fc}" enabled="1" pass="0" locked="0" class="SimpleLine">
<Option type="Map">
<Option name="align_dash_pattern" type="QString" value="0"/>
<Option name="capstyle" type="QString" value="square"/>
<Option name="customdash" type="QString" value="5;2"/>
<Option name="customdash_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="customdash_unit" type="QString" value="MM"/>
<Option name="dash_pattern_offset" type="QString" value="0"/>
<Option name="dash_pattern_offset_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="dash_pattern_offset_unit" type="QString" value="MM"/>
<Option name="draw_inside_polygon" type="QString" value="0"/>
<Option name="joinstyle" type="QString" value="bevel"/>
<Option name="line_color" type="QString" value="183,72,75,255,rgb:0.71764705882352942,0.28235294117647058,0.29411764705882354,1"/>
<Option name="line_style" type="QString" value="solid"/>
<Option name="line_width" type="QString" value="0.6"/>
<Option name="line_width_unit" type="QString" value="MM"/>
<Option name="offset" type="QString" value="0"/>
<Option name="offset_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="offset_unit" type="QString" value="MM"/>
<Option name="ring_filter" type="QString" value="0"/>
<Option name="trim_distance_end" type="QString" value="0"/>
<Option name="trim_distance_end_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="trim_distance_end_unit" type="QString" value="MM"/>
<Option name="trim_distance_start" type="QString" value="0"/>
<Option name="trim_distance_start_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="trim_distance_start_unit" type="QString" value="MM"/>
<Option name="tweak_dash_pattern_on_corners" type="QString" value="0"/>
<Option name="use_custom_dash" type="QString" value="0"/>
<Option name="width_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
</Option>
<data_defined_properties>
<Option type="Map">
<Option name="name" type="QString" value=""/>
<Option name="properties"/>
<Option name="type" type="QString" value="collection"/>
</Option>
</data_defined_properties>
</layer>
</symbol>
</profileLineSymbol>
<profileFillSymbol>
<symbol alpha="1" clip_to_extent="1" name="" type="fill" frame_rate="10" force_rhr="0" is_animated="0">
<data_defined_properties>
<Option type="Map">
<Option name="name" type="QString" value=""/>
<Option name="properties"/>
<Option name="type" type="QString" value="collection"/>
</Option>
</data_defined_properties>
<layer id="{fa98d394-cd43-4c9f-8a6d-e9521d5c3aae}" enabled="1" pass="0" locked="0" class="SimpleFill">
<Option type="Map">
<Option name="border_width_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="color" type="QString" value="183,72,75,255,rgb:0.71764705882352942,0.28235294117647058,0.29411764705882354,1"/>
<Option name="joinstyle" type="QString" value="bevel"/>
<Option name="offset" type="QString" value="0,0"/>
<Option name="offset_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="offset_unit" type="QString" value="MM"/>
<Option name="outline_color" type="QString" value="131,51,54,255,rgb:0.51259632257572285,0.20167849240863661,0.21007095445181964,1"/>
<Option name="outline_style" type="QString" value="solid"/>
<Option name="outline_width" type="QString" value="0.2"/>
<Option name="outline_width_unit" type="QString" value="MM"/>
<Option name="style" type="QString" value="solid"/>
</Option>
<data_defined_properties>
<Option type="Map">
<Option name="name" type="QString" value=""/>
<Option name="properties"/>
<Option name="type" type="QString" value="collection"/>
</Option>
</data_defined_properties>
</layer>
</symbol>
</profileFillSymbol>
<profileMarkerSymbol>
<symbol alpha="1" clip_to_extent="1" name="" type="marker" frame_rate="10" force_rhr="0" is_animated="0">
<data_defined_properties>
<Option type="Map">
<Option name="name" type="QString" value=""/>
<Option name="properties"/>
<Option name="type" type="QString" value="collection"/>
</Option>
</data_defined_properties>
<layer id="{ec0d5523-ce59-4daa-9dc1-cf6175e80ac9}" enabled="1" pass="0" locked="0" class="SimpleMarker">
<Option type="Map">
<Option name="angle" type="QString" value="0"/>
<Option name="cap_style" type="QString" value="square"/>
<Option name="color" type="QString" value="183,72,75,255,rgb:0.71764705882352942,0.28235294117647058,0.29411764705882354,1"/>
<Option name="horizontal_anchor_point" type="QString" value="1"/>
<Option name="joinstyle" type="QString" value="bevel"/>
<Option name="name" type="QString" value="diamond"/>
<Option name="offset" type="QString" value="0,0"/>
<Option name="offset_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="offset_unit" type="QString" value="MM"/>
<Option name="outline_color" type="QString" value="131,51,54,255,rgb:0.51259632257572285,0.20167849240863661,0.21007095445181964,1"/>
<Option name="outline_style" type="QString" value="solid"/>
<Option name="outline_width" type="QString" value="0.2"/>
<Option name="outline_width_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="outline_width_unit" type="QString" value="MM"/>
<Option name="scale_method" type="QString" value="diameter"/>
<Option name="size" type="QString" value="3"/>
<Option name="size_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="size_unit" type="QString" value="MM"/>
<Option name="vertical_anchor_point" type="QString" value="1"/>
</Option>
<data_defined_properties>
<Option type="Map">
<Option name="name" type="QString" value=""/>
<Option name="properties"/>
<Option name="type" type="QString" value="collection"/>
</Option>
</data_defined_properties>
</layer>
</symbol>
</profileMarkerSymbol>
</elevation>
<renderer-v2 forceraster="0" symbollevels="0" enableorderby="0" type="singleSymbol" referencescale="-1">
<symbols>
<symbol alpha="1" clip_to_extent="1" name="0" type="fill" frame_rate="10" force_rhr="0" is_animated="0">
<data_defined_properties>
<Option type="Map">
<Option name="name" type="QString" value=""/>
<Option name="properties"/>
<Option name="type" type="QString" value="collection"/>
</Option>
</data_defined_properties>
<layer id="{ef62a644-15f0-4a1c-aa78-8ae94dc5749c}" enabled="1" pass="0" locked="0" class="SimpleFill">
<Option type="Map">
<Option name="border_width_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="color" type="QString" value="0,0,255,255,rgb:0,0,1,1"/>
<Option name="joinstyle" type="QString" value="bevel"/>
<Option name="offset" type="QString" value="0,0"/>
<Option name="offset_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="offset_unit" type="QString" value="MM"/>
<Option name="outline_color" type="QString" value="89,89,89,255,rgb:0.34901960784313724,0.34901960784313724,0.34901960784313724,1"/>
<Option name="outline_style" type="QString" value="solid"/>
<Option name="outline_width" type="QString" value="0.4"/>
<Option name="outline_width_unit" type="QString" value="MM"/>
<Option name="style" type="QString" value="no"/>
</Option>
<data_defined_properties>
<Option type="Map">
<Option name="name" type="QString" value=""/>
<Option name="properties"/>
<Option name="type" type="QString" value="collection"/>
</Option>
</data_defined_properties>
</layer>
<layer id="{4b0f1a3b-14cf-4149-bf17-8f30fa594ef1}" enabled="1" pass="0" locked="0" class="LinePatternFill">
<Option type="Map">
<Option name="angle" type="QString" value="0"/>
<Option name="clip_mode" type="QString" value="during_render"/>
<Option name="color" type="QString" value="255,0,0,255,rgb:1,0,0,1"/>
<Option name="coordinate_reference" type="QString" value="feature"/>
<Option name="distance" type="QString" value="4"/>
<Option name="distance_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="distance_unit" type="QString" value="MM"/>
<Option name="line_width" type="QString" value="0.25"/>
<Option name="line_width_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="line_width_unit" type="QString" value="Point"/>
<Option name="offset" type="QString" value="0"/>
<Option name="offset_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="offset_unit" type="QString" value="MM"/>
<Option name="outline_width_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="outline_width_unit" type="QString" value="Point"/>
</Option>
<data_defined_properties>
<Option type="Map">
<Option name="name" type="QString" value=""/>
<Option name="properties"/>
<Option name="type" type="QString" value="collection"/>
</Option>
</data_defined_properties>
<symbol alpha="1" clip_to_extent="1" name="@0@1" type="line" frame_rate="10" force_rhr="0" is_animated="0">
<data_defined_properties>
<Option type="Map">
<Option name="name" type="QString" value=""/>
<Option name="properties"/>
<Option name="type" type="QString" value="collection"/>
</Option>
</data_defined_properties>
<layer id="{853c5350-e21e-49ba-a151-7de585769136}" enabled="1" pass="0" locked="0" class="SimpleLine">
<Option type="Map">
<Option name="align_dash_pattern" type="QString" value="0"/>
<Option name="capstyle" type="QString" value="square"/>
<Option name="customdash" type="QString" value="5;2"/>
<Option name="customdash_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="customdash_unit" type="QString" value="MM"/>
<Option name="dash_pattern_offset" type="QString" value="0"/>
<Option name="dash_pattern_offset_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="dash_pattern_offset_unit" type="QString" value="MM"/>
<Option name="draw_inside_polygon" type="QString" value="0"/>
<Option name="joinstyle" type="QString" value="bevel"/>
<Option name="line_color" type="QString" value="0,0,0,255,rgb:0,0,0,1"/>
<Option name="line_style" type="QString" value="solid"/>
<Option name="line_width" type="QString" value="0.3"/>
<Option name="line_width_unit" type="QString" value="MM"/>
<Option name="offset" type="QString" value="0"/>
<Option name="offset_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="offset_unit" type="QString" value="MM"/>
<Option name="ring_filter" type="QString" value="0"/>
<Option name="trim_distance_end" type="QString" value="0"/>
<Option name="trim_distance_end_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="trim_distance_end_unit" type="QString" value="MM"/>
<Option name="trim_distance_start" type="QString" value="0"/>
<Option name="trim_distance_start_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="trim_distance_start_unit" type="QString" value="MM"/>
<Option name="tweak_dash_pattern_on_corners" type="QString" value="0"/>
<Option name="use_custom_dash" type="QString" value="0"/>
<Option name="width_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
</Option>
<data_defined_properties>
<Option type="Map">
<Option name="name" type="QString" value=""/>
<Option name="properties"/>
<Option name="type" type="QString" value="collection"/>
</Option>
</data_defined_properties>
</layer>
</symbol>
</layer>
<layer id="{8675ccd2-9bf1-447f-9cc7-f95b932972f6}" enabled="1" pass="0" locked="0" class="MarkerLine">
<Option type="Map">
<Option name="average_angle_length" type="QString" value="4"/>
<Option name="average_angle_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="average_angle_unit" type="QString" value="MM"/>
<Option name="interval" type="QString" value="5"/>
<Option name="interval_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="interval_unit" type="QString" value="MM"/>
<Option name="offset" type="QString" value="0"/>
<Option name="offset_along_line" type="QString" value="0"/>
<Option name="offset_along_line_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="offset_along_line_unit" type="QString" value="MM"/>
<Option name="offset_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="offset_unit" type="QString" value="MM"/>
<Option name="place_on_every_part" type="bool" value="true"/>
<Option name="placements" type="QString" value="Interval"/>
<Option name="ring_filter" type="QString" value="0"/>
<Option name="rotate" type="QString" value="1"/>
</Option>
<data_defined_properties>
<Option type="Map">
<Option name="name" type="QString" value=""/>
<Option name="properties"/>
<Option name="type" type="QString" value="collection"/>
</Option>
</data_defined_properties>
<symbol alpha="1" clip_to_extent="1" name="@0@2" type="marker" frame_rate="10" force_rhr="0" is_animated="0">
<data_defined_properties>
<Option type="Map">
<Option name="name" type="QString" value=""/>
<Option name="properties"/>
<Option name="type" type="QString" value="collection"/>
</Option>
</data_defined_properties>
<layer id="{3260c32a-e9bb-45db-8ef8-3abb54ae868e}" enabled="1" pass="0" locked="0" class="SimpleMarker">
<Option type="Map">
<Option name="angle" type="QString" value="270"/>
<Option name="cap_style" type="QString" value="square"/>
<Option name="color" type="QString" value="255,0,0,255,rgb:1,0,0,1"/>
<Option name="horizontal_anchor_point" type="QString" value="1"/>
<Option name="joinstyle" type="QString" value="bevel"/>
<Option name="name" type="QString" value="arrowhead"/>
<Option name="offset" type="QString" value="-0.29999999999999999,0"/>
<Option name="offset_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="offset_unit" type="QString" value="MM"/>
<Option name="outline_color" type="QString" value="89,89,89,255,rgb:0.34901960784313724,0.34901960784313724,0.34901960784313724,1"/>
<Option name="outline_style" type="QString" value="solid"/>
<Option name="outline_width" type="QString" value="0.3"/>
<Option name="outline_width_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="outline_width_unit" type="QString" value="MM"/>
<Option name="scale_method" type="QString" value="diameter"/>
<Option name="size" type="QString" value="1.5"/>
<Option name="size_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="size_unit" type="QString" value="MM"/>
<Option name="vertical_anchor_point" type="QString" value="1"/>
</Option>
<data_defined_properties>
<Option type="Map">
<Option name="name" type="QString" value=""/>
<Option name="properties"/>
<Option name="type" type="QString" value="collection"/>
</Option>
</data_defined_properties>
</layer>
</symbol>
</layer>
</symbol>
</symbols>
<rotation/>
<sizescale/>
<data-defined-properties>
<Option type="Map">
<Option name="name" type="QString" value=""/>
<Option name="properties"/>
<Option name="type" type="QString" value="collection"/>
</Option>
</data-defined-properties>
</renderer-v2>
<selection mode="Default">
<selectionColor invalid="1"/>
<selectionSymbol>
<symbol alpha="1" clip_to_extent="1" name="" type="fill" frame_rate="10" force_rhr="0" is_animated="0">
<data_defined_properties>
<Option type="Map">
<Option name="name" type="QString" value=""/>
<Option name="properties"/>
<Option name="type" type="QString" value="collection"/>
</Option>
</data_defined_properties>
<layer id="{fc42b18b-5949-4fd5-b614-0205e0f7d69c}" enabled="1" pass="0" locked="0" class="SimpleFill">
<Option type="Map">
<Option name="border_width_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="color" type="QString" value="0,0,255,255,rgb:0,0,1,1"/>
<Option name="joinstyle" type="QString" value="bevel"/>
<Option name="offset" type="QString" value="0,0"/>
<Option name="offset_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="offset_unit" type="QString" value="MM"/>
<Option name="outline_color" type="QString" value="35,35,35,255,rgb:0.13725490196078433,0.13725490196078433,0.13725490196078433,1"/>
<Option name="outline_style" type="QString" value="solid"/>
<Option name="outline_width" type="QString" value="0.26"/>
<Option name="outline_width_unit" type="QString" value="MM"/>
<Option name="style" type="QString" value="solid"/>
</Option>
<data_defined_properties>
<Option type="Map">
<Option name="name" type="QString" value=""/>
<Option name="properties"/>
<Option name="type" type="QString" value="collection"/>
</Option>
</data_defined_properties>
</layer>
</symbol>
</selectionSymbol>
</selection>
<customproperties>
<Option type="Map">
<Option name="embeddedWidgets/count" type="int" value="0"/>
<Option name="geopdf/groupName" type="QString" value="Umwelt"/>
<Option name="geopdf/includeFeatures" type="bool" value="true"/>
<Option name="geopdf/initiallyVisible" type="bool" value="true"/>
<Option name="variableNames"/>
<Option name="variableValues"/>
</Option>
</customproperties>
<blendMode>0</blendMode>
<featureBlendMode>0</featureBlendMode>
<layerOpacity>1</layerOpacity>
<geometryOptions geometryPrecision="0" removeDuplicateNodes="0">
<activeChecks/>
<checkConfiguration type="Map">
<Option name="QgsGeometryGapCheck" type="Map">
<Option name="allowedGapsBuffer" type="double" value="0"/>
<Option name="allowedGapsEnabled" type="bool" value="false"/>
<Option name="allowedGapsLayer" type="QString" value=""/>
</Option>
</checkConfiguration>
</geometryOptions>
<legend type="default-vector" showLabelLegend="0"/>
<referencedLayers/>
<fieldConfiguration>
<field name="OBJECTID" configurationFlags="NoFlag">
<editWidget type="TextEdit">
<config>
<Option/>
</config>
</editWidget>
</field>
<field name="BID" configurationFlags="NoFlag">
<editWidget type="TextEdit">
<config>
<Option/>
</config>
</editWidget>
</field>
<field name="BIOTOPNAME" configurationFlags="NoFlag">
<editWidget type="TextEdit">
<config>
<Option/>
</config>
</editWidget>
</field>
<field name="LEGEND_TXT" configurationFlags="NoFlag">
<editWidget type="TextEdit">
<config>
<Option/>
</config>
</editWidget>
</field>
<field name="BTYP1" configurationFlags="NoFlag">
<editWidget type="TextEdit">
<config>
<Option/>
</config>
</editWidget>
</field>
<field name="BTYP2" configurationFlags="NoFlag">
<editWidget type="TextEdit">
<config>
<Option/>
</config>
</editWidget>
</field>
<field name="BTYP3" configurationFlags="NoFlag">
<editWidget type="TextEdit">
<config>
<Option/>
</config>
</editWidget>
</field>
<field name="BTYPGES" configurationFlags="NoFlag">
<editWidget type="TextEdit">
<config>
<Option/>
</config>
</editWidget>
</field>
<field name="BTYP1_TXT" configurationFlags="NoFlag">
<editWidget type="TextEdit">
<config>
<Option/>
</config>
</editWidget>
</field>
<field name="BTYP2_TXT" configurationFlags="NoFlag">
<editWidget type="TextEdit">
<config>
<Option/>
</config>
</editWidget>
</field>
<field name="BTYP3_TXT" configurationFlags="NoFlag">
<editWidget type="TextEdit">
<config>
<Option/>
</config>
</editWidget>
</field>
<field name="ANTEILBTY1" configurationFlags="NoFlag">
<editWidget type="TextEdit">
<config>
<Option/>
</config>
</editWidget>
</field>
<field name="ANTEILBTY2" configurationFlags="NoFlag">
<editWidget type="TextEdit">
<config>
<Option/>
</config>
</editWidget>
</field>
<field name="ANTEILBTY3" configurationFlags="NoFlag">
<editWidget type="TextEdit">
<config>
<Option/>
</config>
</editWidget>
</field>
<field name="SCHUTZ" configurationFlags="NoFlag">
<editWidget type="TextEdit">
<config>
<Option/>
</config>
</editWidget>
</field>
<field name="TK25" configurationFlags="NoFlag">
<editWidget type="TextEdit">
<config>
<Option/>
</config>
</editWidget>
</field>
<field name="QUELLE" configurationFlags="NoFlag">
<editWidget type="TextEdit">
<config>
<Option/>
</config>
</editWidget>
</field>
<field name="DATUMERF" configurationFlags="NoFlag">
<editWidget type="DateTime">
<config>
<Option/>
</config>
</editWidget>
</field>
<field name="Shape__Area" configurationFlags="NoFlag">
<editWidget type="TextEdit">
<config>
<Option/>
</config>
</editWidget>
</field>
<field name="Shape__Length" configurationFlags="NoFlag">
<editWidget type="TextEdit">
<config>
<Option/>
</config>
</editWidget>
</field>
<field name="SE_ANNO_CAD_DATA" configurationFlags="NoFlag">
<editWidget type="Binary">
<config>
<Option/>
</config>
</editWidget>
</field>
</fieldConfiguration>
<aliases>
<alias name="FID" index="0" field="OBJECTID"/>
<alias name="" index="1" field="BID"/>
<alias name="" index="2" field="BIOTOPNAME"/>
<alias name="" index="3" field="LEGEND_TXT"/>
<alias name="" index="4" field="BTYP1"/>
<alias name="" index="5" field="BTYP2"/>
<alias name="" index="6" field="BTYP3"/>
<alias name="" index="7" field="BTYPGES"/>
<alias name="" index="8" field="BTYP1_TXT"/>
<alias name="" index="9" field="BTYP2_TXT"/>
<alias name="" index="10" field="BTYP3_TXT"/>
<alias name="" index="11" field="ANTEILBTY1"/>
<alias name="" index="12" field="ANTEILBTY2"/>
<alias name="" index="13" field="ANTEILBTY3"/>
<alias name="" index="14" field="SCHUTZ"/>
<alias name="" index="15" field="TK25"/>
<alias name="" index="16" field="QUELLE"/>
<alias name="" index="17" field="DATUMERF"/>
<alias name="SHAPE.AREA" index="18" field="Shape__Area"/>
<alias name="SHAPE.LEN" index="19" field="Shape__Length"/>
<alias name="" index="20" field="SE_ANNO_CAD_DATA"/>
</aliases>
<splitPolicies>
<policy field="OBJECTID" policy="Duplicate"/>
<policy field="BID" policy="Duplicate"/>
<policy field="BIOTOPNAME" policy="Duplicate"/>
<policy field="LEGEND_TXT" policy="Duplicate"/>
<policy field="BTYP1" policy="Duplicate"/>
<policy field="BTYP2" policy="Duplicate"/>
<policy field="BTYP3" policy="Duplicate"/>
<policy field="BTYPGES" policy="Duplicate"/>
<policy field="BTYP1_TXT" policy="Duplicate"/>
<policy field="BTYP2_TXT" policy="Duplicate"/>
<policy field="BTYP3_TXT" policy="Duplicate"/>
<policy field="ANTEILBTY1" policy="Duplicate"/>
<policy field="ANTEILBTY2" policy="Duplicate"/>
<policy field="ANTEILBTY3" policy="Duplicate"/>
<policy field="SCHUTZ" policy="Duplicate"/>
<policy field="TK25" policy="Duplicate"/>
<policy field="QUELLE" policy="Duplicate"/>
<policy field="DATUMERF" policy="Duplicate"/>
<policy field="Shape__Area" policy="Duplicate"/>
<policy field="Shape__Length" policy="Duplicate"/>
<policy field="SE_ANNO_CAD_DATA" policy="Duplicate"/>
</splitPolicies>
<duplicatePolicies>
<policy field="OBJECTID" policy="Duplicate"/>
<policy field="BID" policy="Duplicate"/>
<policy field="BIOTOPNAME" policy="Duplicate"/>
<policy field="LEGEND_TXT" policy="Duplicate"/>
<policy field="BTYP1" policy="Duplicate"/>
<policy field="BTYP2" policy="Duplicate"/>
<policy field="BTYP3" policy="Duplicate"/>
<policy field="BTYPGES" policy="Duplicate"/>
<policy field="BTYP1_TXT" policy="Duplicate"/>
<policy field="BTYP2_TXT" policy="Duplicate"/>
<policy field="BTYP3_TXT" policy="Duplicate"/>
<policy field="ANTEILBTY1" policy="Duplicate"/>
<policy field="ANTEILBTY2" policy="Duplicate"/>
<policy field="ANTEILBTY3" policy="Duplicate"/>
<policy field="SCHUTZ" policy="Duplicate"/>
<policy field="TK25" policy="Duplicate"/>
<policy field="QUELLE" policy="Duplicate"/>
<policy field="DATUMERF" policy="Duplicate"/>
<policy field="Shape__Area" policy="Duplicate"/>
<policy field="Shape__Length" policy="Duplicate"/>
<policy field="SE_ANNO_CAD_DATA" policy="Duplicate"/>
</duplicatePolicies>
<defaults>
<default expression="" applyOnUpdate="0" field="OBJECTID"/>
<default expression="" applyOnUpdate="0" field="BID"/>
<default expression="" applyOnUpdate="0" field="BIOTOPNAME"/>
<default expression="" applyOnUpdate="0" field="LEGEND_TXT"/>
<default expression="" applyOnUpdate="0" field="BTYP1"/>
<default expression="" applyOnUpdate="0" field="BTYP2"/>
<default expression="" applyOnUpdate="0" field="BTYP3"/>
<default expression="" applyOnUpdate="0" field="BTYPGES"/>
<default expression="" applyOnUpdate="0" field="BTYP1_TXT"/>
<default expression="" applyOnUpdate="0" field="BTYP2_TXT"/>
<default expression="" applyOnUpdate="0" field="BTYP3_TXT"/>
<default expression="" applyOnUpdate="0" field="ANTEILBTY1"/>
<default expression="" applyOnUpdate="0" field="ANTEILBTY2"/>
<default expression="" applyOnUpdate="0" field="ANTEILBTY3"/>
<default expression="" applyOnUpdate="0" field="SCHUTZ"/>
<default expression="" applyOnUpdate="0" field="TK25"/>
<default expression="" applyOnUpdate="0" field="QUELLE"/>
<default expression="" applyOnUpdate="0" field="DATUMERF"/>
<default expression="" applyOnUpdate="0" field="Shape__Area"/>
<default expression="" applyOnUpdate="0" field="Shape__Length"/>
<default expression="" applyOnUpdate="0" field="SE_ANNO_CAD_DATA"/>
</defaults>
<constraints>
<constraint notnull_strength="1" constraints="3" exp_strength="0" field="OBJECTID" unique_strength="1"/>
<constraint notnull_strength="0" constraints="0" exp_strength="0" field="BID" unique_strength="0"/>
<constraint notnull_strength="0" constraints="0" exp_strength="0" field="BIOTOPNAME" unique_strength="0"/>
<constraint notnull_strength="0" constraints="0" exp_strength="0" field="LEGEND_TXT" unique_strength="0"/>
<constraint notnull_strength="0" constraints="0" exp_strength="0" field="BTYP1" unique_strength="0"/>
<constraint notnull_strength="0" constraints="0" exp_strength="0" field="BTYP2" unique_strength="0"/>
<constraint notnull_strength="0" constraints="0" exp_strength="0" field="BTYP3" unique_strength="0"/>
<constraint notnull_strength="0" constraints="0" exp_strength="0" field="BTYPGES" unique_strength="0"/>
<constraint notnull_strength="0" constraints="0" exp_strength="0" field="BTYP1_TXT" unique_strength="0"/>
<constraint notnull_strength="0" constraints="0" exp_strength="0" field="BTYP2_TXT" unique_strength="0"/>
<constraint notnull_strength="0" constraints="0" exp_strength="0" field="BTYP3_TXT" unique_strength="0"/>
<constraint notnull_strength="0" constraints="0" exp_strength="0" field="ANTEILBTY1" unique_strength="0"/>
<constraint notnull_strength="0" constraints="0" exp_strength="0" field="ANTEILBTY2" unique_strength="0"/>
<constraint notnull_strength="0" constraints="0" exp_strength="0" field="ANTEILBTY3" unique_strength="0"/>
<constraint notnull_strength="0" constraints="0" exp_strength="0" field="SCHUTZ" unique_strength="0"/>
<constraint notnull_strength="0" constraints="0" exp_strength="0" field="TK25" unique_strength="0"/>
<constraint notnull_strength="0" constraints="0" exp_strength="0" field="QUELLE" unique_strength="0"/>
<constraint notnull_strength="0" constraints="0" exp_strength="0" field="DATUMERF" unique_strength="0"/>
<constraint notnull_strength="0" constraints="0" exp_strength="0" field="Shape__Area" unique_strength="0"/>
<constraint notnull_strength="0" constraints="0" exp_strength="0" field="Shape__Length" unique_strength="0"/>
<constraint notnull_strength="0" constraints="0" exp_strength="0" field="SE_ANNO_CAD_DATA" unique_strength="0"/>
</constraints>
<constraintExpressions>
<constraint exp="" field="OBJECTID" desc=""/>
<constraint exp="" field="BID" desc=""/>
<constraint exp="" field="BIOTOPNAME" desc=""/>
<constraint exp="" field="LEGEND_TXT" desc=""/>
<constraint exp="" field="BTYP1" desc=""/>
<constraint exp="" field="BTYP2" desc=""/>
<constraint exp="" field="BTYP3" desc=""/>
<constraint exp="" field="BTYPGES" desc=""/>
<constraint exp="" field="BTYP1_TXT" desc=""/>
<constraint exp="" field="BTYP2_TXT" desc=""/>
<constraint exp="" field="BTYP3_TXT" desc=""/>
<constraint exp="" field="ANTEILBTY1" desc=""/>
<constraint exp="" field="ANTEILBTY2" desc=""/>
<constraint exp="" field="ANTEILBTY3" desc=""/>
<constraint exp="" field="SCHUTZ" desc=""/>
<constraint exp="" field="TK25" desc=""/>
<constraint exp="" field="QUELLE" desc=""/>
<constraint exp="" field="DATUMERF" desc=""/>
<constraint exp="" field="Shape__Area" desc=""/>
<constraint exp="" field="Shape__Length" desc=""/>
<constraint exp="" field="SE_ANNO_CAD_DATA" desc=""/>
</constraintExpressions>
<expressionfields/>
<attributeactions>
<defaultAction value="{00000000-0000-0000-0000-000000000000}" key="Canvas"/>
</attributeactions>
<attributetableconfig sortExpression="" sortOrder="0" actionWidgetStyle="dropDown">
<columns>
<column name="OBJECTID" type="field" width="-1" hidden="0"/>
<column name="BID" type="field" width="-1" hidden="0"/>
<column name="BIOTOPNAME" type="field" width="-1" hidden="0"/>
<column name="LEGEND_TXT" type="field" width="-1" hidden="0"/>
<column name="BTYP1" type="field" width="-1" hidden="0"/>
<column name="BTYP2" type="field" width="-1" hidden="0"/>
<column name="BTYP3" type="field" width="-1" hidden="0"/>
<column name="BTYPGES" type="field" width="-1" hidden="0"/>
<column name="BTYP1_TXT" type="field" width="-1" hidden="0"/>
<column name="BTYP2_TXT" type="field" width="-1" hidden="0"/>
<column name="BTYP3_TXT" type="field" width="-1" hidden="0"/>
<column name="ANTEILBTY1" type="field" width="-1" hidden="0"/>
<column name="ANTEILBTY2" type="field" width="-1" hidden="0"/>
<column name="ANTEILBTY3" type="field" width="-1" hidden="0"/>
<column name="SCHUTZ" type="field" width="-1" hidden="0"/>
<column name="TK25" type="field" width="-1" hidden="0"/>
<column name="QUELLE" type="field" width="-1" hidden="0"/>
<column name="DATUMERF" type="field" width="-1" hidden="0"/>
<column name="Shape__Area" type="field" width="-1" hidden="0"/>
<column name="Shape__Length" type="field" width="-1" hidden="0"/>
<column name="SE_ANNO_CAD_DATA" type="field" width="-1" hidden="0"/>
<column type="actions" width="-1" hidden="1"/>
</columns>
</attributetableconfig>
<conditionalstyles>
<rowstyles/>
<fieldstyles/>
</conditionalstyles>
<storedexpressions/>
<editform tolerant="1"></editform>
<editforminit/>
<editforminitcodesource>0</editforminitcodesource>
<editforminitfilepath></editforminitfilepath>
<editforminitcode><![CDATA[# -*- coding: utf-8 -*-
"""
QGIS-Formulare können eine Python-Funktion haben,, die aufgerufen wird, wenn sich das Formular öffnet
Diese Funktion kann verwendet werden um dem Formular Extralogik hinzuzufügen.
Der Name der Funktion wird im Feld "Python Init-Function" angegeben
Ein Beispiel folgt:
"""
from qgis.PyQt.QtWidgets import QWidget
def my_form_open(dialog, layer, feature):
geom = feature.geometry()
control = dialog.findChild(QWidget, "MyLineEdit")
]]></editforminitcode>
<featformsuppress>0</featformsuppress>
<editorlayout>generatedlayout</editorlayout>
<editable>
<field name="ANTEILBTY1" editable="1"/>
<field name="ANTEILBTY2" editable="1"/>
<field name="ANTEILBTY3" editable="1"/>
<field name="BID" editable="1"/>
<field name="BIOTOPNAME" editable="1"/>
<field name="BTYP1" editable="1"/>
<field name="BTYP1_TXT" editable="1"/>
<field name="BTYP2" editable="1"/>
<field name="BTYP2_TXT" editable="1"/>
<field name="BTYP3" editable="1"/>
<field name="BTYP3_TXT" editable="1"/>
<field name="BTYPGES" editable="1"/>
<field name="DATUMERF" editable="1"/>
<field name="LEGEND_TXT" editable="1"/>
<field name="OBJECTID" editable="0"/>
<field name="QUELLE" editable="1"/>
<field name="SCHUTZ" editable="1"/>
<field name="SE_ANNO_CAD_DATA" editable="1"/>
<field name="Shape__Area" editable="0"/>
<field name="Shape__Length" editable="0"/>
<field name="TK25" editable="1"/>
</editable>
<labelOnTop>
<field name="ANTEILBTY1" labelOnTop="0"/>
<field name="ANTEILBTY2" labelOnTop="0"/>
<field name="ANTEILBTY3" labelOnTop="0"/>
<field name="BID" labelOnTop="0"/>
<field name="BIOTOPNAME" labelOnTop="0"/>
<field name="BTYP1" labelOnTop="0"/>
<field name="BTYP1_TXT" labelOnTop="0"/>
<field name="BTYP2" labelOnTop="0"/>
<field name="BTYP2_TXT" labelOnTop="0"/>
<field name="BTYP3" labelOnTop="0"/>
<field name="BTYP3_TXT" labelOnTop="0"/>
<field name="BTYPGES" labelOnTop="0"/>
<field name="DATUMERF" labelOnTop="0"/>
<field name="LEGEND_TXT" labelOnTop="0"/>
<field name="OBJECTID" labelOnTop="0"/>
<field name="QUELLE" labelOnTop="0"/>
<field name="SCHUTZ" labelOnTop="0"/>
<field name="SE_ANNO_CAD_DATA" labelOnTop="0"/>
<field name="Shape__Area" labelOnTop="0"/>
<field name="Shape__Length" labelOnTop="0"/>
<field name="TK25" labelOnTop="0"/>
</labelOnTop>
<reuseLastValue>
<field name="ANTEILBTY1" reuseLastValue="0"/>
<field name="ANTEILBTY2" reuseLastValue="0"/>
<field name="ANTEILBTY3" reuseLastValue="0"/>
<field name="BID" reuseLastValue="0"/>
<field name="BIOTOPNAME" reuseLastValue="0"/>
<field name="BTYP1" reuseLastValue="0"/>
<field name="BTYP1_TXT" reuseLastValue="0"/>
<field name="BTYP2" reuseLastValue="0"/>
<field name="BTYP2_TXT" reuseLastValue="0"/>
<field name="BTYP3" reuseLastValue="0"/>
<field name="BTYP3_TXT" reuseLastValue="0"/>
<field name="BTYPGES" reuseLastValue="0"/>
<field name="DATUMERF" reuseLastValue="0"/>
<field name="LEGEND_TXT" reuseLastValue="0"/>
<field name="OBJECTID" reuseLastValue="0"/>
<field name="QUELLE" reuseLastValue="0"/>
<field name="SCHUTZ" reuseLastValue="0"/>
<field name="SE_ANNO_CAD_DATA" reuseLastValue="0"/>
<field name="Shape__Area" reuseLastValue="0"/>
<field name="Shape__Length" reuseLastValue="0"/>
<field name="TK25" reuseLastValue="0"/>
</reuseLastValue>
<dataDefinedFieldProperties/>
<widgets/>
<previewExpression>"BIOTOPNAME"</previewExpression>
<mapTip enabled="1"></mapTip>
<layerGeometryType>2</layerGeometryType>
</qgis>

118
assets/Fliessgewaesser.qml Normal file
View File

@@ -0,0 +1,118 @@
<!DOCTYPE qgis PUBLIC 'http://mrcc.com/qgis.dtd' 'SYSTEM'>
<qgis version="3.40.7-Bratislava" styleCategories="Symbology|Labeling" labelsEnabled="0">
<renderer-v2 enableorderby="0" type="singleSymbol" referencescale="-1" forceraster="0" symbollevels="0">
<symbols>
<symbol name="0" type="line" is_animated="0" alpha="1" force_rhr="0" frame_rate="10" clip_to_extent="1">
<data_defined_properties>
<Option type="Map">
<Option name="name" type="QString" value=""/>
<Option name="properties"/>
<Option name="type" type="QString" value="collection"/>
</Option>
</data_defined_properties>
<layer class="SimpleLine" enabled="1" id="{d756ba86-63d7-451f-ad45-0010d88b1ae8}" pass="0" locked="0">
<Option type="Map">
<Option name="align_dash_pattern" type="QString" value="0"/>
<Option name="capstyle" type="QString" value="square"/>
<Option name="customdash" type="QString" value="5;2"/>
<Option name="customdash_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="customdash_unit" type="QString" value="MM"/>
<Option name="dash_pattern_offset" type="QString" value="0"/>
<Option name="dash_pattern_offset_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="dash_pattern_offset_unit" type="QString" value="MM"/>
<Option name="draw_inside_polygon" type="QString" value="0"/>
<Option name="joinstyle" type="QString" value="bevel"/>
<Option name="line_color" type="QString" value="55,132,255,255,rgb:0.21568627450980393,0.51764705882352946,1,1"/>
<Option name="line_style" type="QString" value="solid"/>
<Option name="line_width" type="QString" value="0.86"/>
<Option name="line_width_unit" type="QString" value="MM"/>
<Option name="offset" type="QString" value="0"/>
<Option name="offset_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="offset_unit" type="QString" value="MM"/>
<Option name="ring_filter" type="QString" value="0"/>
<Option name="trim_distance_end" type="QString" value="0"/>
<Option name="trim_distance_end_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="trim_distance_end_unit" type="QString" value="MM"/>
<Option name="trim_distance_start" type="QString" value="0"/>
<Option name="trim_distance_start_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="trim_distance_start_unit" type="QString" value="MM"/>
<Option name="tweak_dash_pattern_on_corners" type="QString" value="0"/>
<Option name="use_custom_dash" type="QString" value="0"/>
<Option name="width_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
</Option>
<data_defined_properties>
<Option type="Map">
<Option name="name" type="QString" value=""/>
<Option name="properties"/>
<Option name="type" type="QString" value="collection"/>
</Option>
</data_defined_properties>
</layer>
</symbol>
</symbols>
<rotation/>
<sizescale/>
<data-defined-properties>
<Option type="Map">
<Option name="name" type="QString" value=""/>
<Option name="properties"/>
<Option name="type" type="QString" value="collection"/>
</Option>
</data-defined-properties>
</renderer-v2>
<selection mode="Default">
<selectionColor invalid="1"/>
<selectionSymbol>
<symbol name="" type="line" is_animated="0" alpha="1" force_rhr="0" frame_rate="10" clip_to_extent="1">
<data_defined_properties>
<Option type="Map">
<Option name="name" type="QString" value=""/>
<Option name="properties"/>
<Option name="type" type="QString" value="collection"/>
</Option>
</data_defined_properties>
<layer class="SimpleLine" enabled="1" id="{b92daa53-e460-4981-8ddd-cf41d069a6e7}" pass="0" locked="0">
<Option type="Map">
<Option name="align_dash_pattern" type="QString" value="0"/>
<Option name="capstyle" type="QString" value="square"/>
<Option name="customdash" type="QString" value="5;2"/>
<Option name="customdash_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="customdash_unit" type="QString" value="MM"/>
<Option name="dash_pattern_offset" type="QString" value="0"/>
<Option name="dash_pattern_offset_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="dash_pattern_offset_unit" type="QString" value="MM"/>
<Option name="draw_inside_polygon" type="QString" value="0"/>
<Option name="joinstyle" type="QString" value="bevel"/>
<Option name="line_color" type="QString" value="35,35,35,255,rgb:0.13725490196078433,0.13725490196078433,0.13725490196078433,1"/>
<Option name="line_style" type="QString" value="solid"/>
<Option name="line_width" type="QString" value="0.26"/>
<Option name="line_width_unit" type="QString" value="MM"/>
<Option name="offset" type="QString" value="0"/>
<Option name="offset_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="offset_unit" type="QString" value="MM"/>
<Option name="ring_filter" type="QString" value="0"/>
<Option name="trim_distance_end" type="QString" value="0"/>
<Option name="trim_distance_end_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="trim_distance_end_unit" type="QString" value="MM"/>
<Option name="trim_distance_start" type="QString" value="0"/>
<Option name="trim_distance_start_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="trim_distance_start_unit" type="QString" value="MM"/>
<Option name="tweak_dash_pattern_on_corners" type="QString" value="0"/>
<Option name="use_custom_dash" type="QString" value="0"/>
<Option name="width_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
</Option>
<data_defined_properties>
<Option type="Map">
<Option name="name" type="QString" value=""/>
<Option name="properties"/>
<Option name="type" type="QString" value="collection"/>
</Option>
</data_defined_properties>
</layer>
</symbol>
</selectionSymbol>
</selection>
<blendMode>0</blendMode>
<featureBlendMode>0</featureBlendMode>
<layerGeometryType>1</layerGeometryType>
</qgis>

View File

@@ -0,0 +1,609 @@
<!DOCTYPE qgis PUBLIC 'http://mrcc.com/qgis.dtd' 'SYSTEM'>
<qgis hasScaleBasedVisibilityFlag="0" version="3.16.0-Hannover" minScale="100000000" labelsEnabled="0" readOnly="0" styleCategories="AllStyleCategories" simplifyLocal="1" maxScale="0" simplifyMaxScale="1" simplifyDrawingTol="1" simplifyDrawingHints="1" simplifyAlgorithm="0">
<flags>
<Identifiable>1</Identifiable>
<Removable>1</Removable>
<Searchable>1</Searchable>
</flags>
<temporal startExpression="" enabled="0" endExpression="" accumulate="0" durationField="" durationUnit="min" fixedDuration="0" startField="" mode="0" endField="">
<fixedRange>
<start></start>
<end></end>
</fixedRange>
</temporal>
<renderer-v2 symbollevels="0" forceraster="0" type="singleSymbol" enableorderby="0">
<symbols>
<symbol name="0" force_rhr="0" type="fill" alpha="1" clip_to_extent="1">
<layer pass="0" enabled="1" class="LinePatternFill" locked="0">
<prop k="angle" v="45"/>
<prop k="color" v="196,60,57,255"/>
<prop k="distance" v="10"/>
<prop k="distance_map_unit_scale" v="3x:0,0,0,0,0,0"/>
<prop k="distance_unit" v="Pixel"/>
<prop k="line_width" v="0.26"/>
<prop k="line_width_map_unit_scale" v="3x:0,0,0,0,0,0"/>
<prop k="line_width_unit" v="MM"/>
<prop k="offset" v="0"/>
<prop k="offset_map_unit_scale" v="3x:0,0,0,0,0,0"/>
<prop k="offset_unit" v="MM"/>
<prop k="outline_width_map_unit_scale" v="3x:0,0,0,0,0,0"/>
<prop k="outline_width_unit" v="MM"/>
<data_defined_properties>
<Option type="Map">
<Option name="name" type="QString" value=""/>
<Option name="properties"/>
<Option name="type" type="QString" value="collection"/>
</Option>
</data_defined_properties>
<symbol name="@0@0" force_rhr="0" type="line" alpha="1" clip_to_extent="1">
<layer pass="0" enabled="1" class="SimpleLine" locked="0">
<prop k="align_dash_pattern" v="0"/>
<prop k="capstyle" v="square"/>
<prop k="customdash" v="5;2"/>
<prop k="customdash_map_unit_scale" v="3x:0,0,0,0,0,0"/>
<prop k="customdash_unit" v="MM"/>
<prop k="dash_pattern_offset" v="0"/>
<prop k="dash_pattern_offset_map_unit_scale" v="3x:0,0,0,0,0,0"/>
<prop k="dash_pattern_offset_unit" v="MM"/>
<prop k="draw_inside_polygon" v="0"/>
<prop k="joinstyle" v="bevel"/>
<prop k="line_color" v="0,0,0,255"/>
<prop k="line_style" v="solid"/>
<prop k="line_width" v="1"/>
<prop k="line_width_unit" v="Pixel"/>
<prop k="offset" v="0"/>
<prop k="offset_map_unit_scale" v="3x:0,0,0,0,0,0"/>
<prop k="offset_unit" v="MM"/>
<prop k="ring_filter" v="0"/>
<prop k="tweak_dash_pattern_on_corners" v="0"/>
<prop k="use_custom_dash" v="0"/>
<prop k="width_map_unit_scale" v="3x:0,0,0,0,0,0"/>
<data_defined_properties>
<Option type="Map">
<Option name="name" type="QString" value=""/>
<Option name="properties"/>
<Option name="type" type="QString" value="collection"/>
</Option>
</data_defined_properties>
</layer>
</symbol>
</layer>
<layer pass="0" enabled="1" class="LinePatternFill" locked="0">
<prop k="angle" v="135"/>
<prop k="color" v="0,0,255,255"/>
<prop k="distance" v="10"/>
<prop k="distance_map_unit_scale" v="3x:0,0,0,0,0,0"/>
<prop k="distance_unit" v="Pixel"/>
<prop k="line_width" v="0.26"/>
<prop k="line_width_map_unit_scale" v="3x:0,0,0,0,0,0"/>
<prop k="line_width_unit" v="MM"/>
<prop k="offset" v="0"/>
<prop k="offset_map_unit_scale" v="3x:0,0,0,0,0,0"/>
<prop k="offset_unit" v="MM"/>
<prop k="outline_width_map_unit_scale" v="3x:0,0,0,0,0,0"/>
<prop k="outline_width_unit" v="MM"/>
<data_defined_properties>
<Option type="Map">
<Option name="name" type="QString" value=""/>
<Option name="properties"/>
<Option name="type" type="QString" value="collection"/>
</Option>
</data_defined_properties>
<symbol name="@0@1" force_rhr="0" type="line" alpha="1" clip_to_extent="1">
<layer pass="0" enabled="1" class="SimpleLine" locked="0">
<prop k="align_dash_pattern" v="0"/>
<prop k="capstyle" v="square"/>
<prop k="customdash" v="5;2"/>
<prop k="customdash_map_unit_scale" v="3x:0,0,0,0,0,0"/>
<prop k="customdash_unit" v="MM"/>
<prop k="dash_pattern_offset" v="0"/>
<prop k="dash_pattern_offset_map_unit_scale" v="3x:0,0,0,0,0,0"/>
<prop k="dash_pattern_offset_unit" v="MM"/>
<prop k="draw_inside_polygon" v="0"/>
<prop k="joinstyle" v="bevel"/>
<prop k="line_color" v="0,0,0,255"/>
<prop k="line_style" v="solid"/>
<prop k="line_width" v="1"/>
<prop k="line_width_unit" v="Pixel"/>
<prop k="offset" v="0"/>
<prop k="offset_map_unit_scale" v="3x:0,0,0,0,0,0"/>
<prop k="offset_unit" v="MM"/>
<prop k="ring_filter" v="0"/>
<prop k="tweak_dash_pattern_on_corners" v="0"/>
<prop k="use_custom_dash" v="0"/>
<prop k="width_map_unit_scale" v="3x:0,0,0,0,0,0"/>
<data_defined_properties>
<Option type="Map">
<Option name="name" type="QString" value=""/>
<Option name="properties"/>
<Option name="type" type="QString" value="collection"/>
</Option>
</data_defined_properties>
</layer>
</symbol>
</layer>
<layer pass="0" enabled="1" class="SimpleLine" locked="0">
<prop k="align_dash_pattern" v="0"/>
<prop k="capstyle" v="square"/>
<prop k="customdash" v="5;2"/>
<prop k="customdash_map_unit_scale" v="3x:0,0,0,0,0,0"/>
<prop k="customdash_unit" v="MM"/>
<prop k="dash_pattern_offset" v="0"/>
<prop k="dash_pattern_offset_map_unit_scale" v="3x:0,0,0,0,0,0"/>
<prop k="dash_pattern_offset_unit" v="MM"/>
<prop k="draw_inside_polygon" v="0"/>
<prop k="joinstyle" v="bevel"/>
<prop k="line_color" v="35,35,35,255"/>
<prop k="line_style" v="solid"/>
<prop k="line_width" v="1"/>
<prop k="line_width_unit" v="Pixel"/>
<prop k="offset" v="0"/>
<prop k="offset_map_unit_scale" v="3x:0,0,0,0,0,0"/>
<prop k="offset_unit" v="MM"/>
<prop k="ring_filter" v="0"/>
<prop k="tweak_dash_pattern_on_corners" v="0"/>
<prop k="use_custom_dash" v="0"/>
<prop k="width_map_unit_scale" v="3x:0,0,0,0,0,0"/>
<data_defined_properties>
<Option type="Map">
<Option name="name" type="QString" value=""/>
<Option name="properties"/>
<Option name="type" type="QString" value="collection"/>
</Option>
</data_defined_properties>
</layer>
</symbol>
</symbols>
<rotation/>
<sizescale/>
</renderer-v2>
<customproperties>
<property key="dualview/previewExpressions">
<value>"gml_id"</value>
</property>
<property key="embeddedWidgets/count" value="0"/>
<property key="variableNames"/>
<property key="variableValues"/>
</customproperties>
<blendMode>0</blendMode>
<featureBlendMode>0</featureBlendMode>
<layerOpacity>1</layerOpacity>
<SingleCategoryDiagramRenderer diagramType="Histogram" attributeLegend="1">
<DiagramCategory enabled="0" spacing="5" showAxis="1" direction="0" sizeType="MM" barWidth="5" height="15" minScaleDenominator="0" scaleBasedVisibility="0" spacingUnit="MM" maxScaleDenominator="1e+08" sizeScale="3x:0,0,0,0,0,0" diagramOrientation="Up" rotationOffset="270" penColor="#000000" penWidth="0" backgroundColor="#ffffff" penAlpha="255" width="15" spacingUnitScale="3x:0,0,0,0,0,0" backgroundAlpha="255" opacity="1" lineSizeType="MM" scaleDependency="Area" minimumSize="0" labelPlacementMethod="XHeight" lineSizeScale="3x:0,0,0,0,0,0">
<fontProperties description="MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0" style=""/>
<axisSymbol>
<symbol name="" force_rhr="0" type="line" alpha="1" clip_to_extent="1">
<layer pass="0" enabled="1" class="SimpleLine" locked="0">
<prop k="align_dash_pattern" v="0"/>
<prop k="capstyle" v="square"/>
<prop k="customdash" v="5;2"/>
<prop k="customdash_map_unit_scale" v="3x:0,0,0,0,0,0"/>
<prop k="customdash_unit" v="MM"/>
<prop k="dash_pattern_offset" v="0"/>
<prop k="dash_pattern_offset_map_unit_scale" v="3x:0,0,0,0,0,0"/>
<prop k="dash_pattern_offset_unit" v="MM"/>
<prop k="draw_inside_polygon" v="0"/>
<prop k="joinstyle" v="bevel"/>
<prop k="line_color" v="35,35,35,255"/>
<prop k="line_style" v="solid"/>
<prop k="line_width" v="0.26"/>
<prop k="line_width_unit" v="MM"/>
<prop k="offset" v="0"/>
<prop k="offset_map_unit_scale" v="3x:0,0,0,0,0,0"/>
<prop k="offset_unit" v="MM"/>
<prop k="ring_filter" v="0"/>
<prop k="tweak_dash_pattern_on_corners" v="0"/>
<prop k="use_custom_dash" v="0"/>
<prop k="width_map_unit_scale" v="3x:0,0,0,0,0,0"/>
<data_defined_properties>
<Option type="Map">
<Option name="name" type="QString" value=""/>
<Option name="properties"/>
<Option name="type" type="QString" value="collection"/>
</Option>
</data_defined_properties>
</layer>
</symbol>
</axisSymbol>
</DiagramCategory>
</SingleCategoryDiagramRenderer>
<DiagramLayerSettings priority="0" obstacle="0" showAll="1" placement="1" dist="0" linePlacementFlags="18" zIndex="0">
<properties>
<Option type="Map">
<Option name="name" type="QString" value=""/>
<Option name="properties"/>
<Option name="type" type="QString" value="collection"/>
</Option>
</properties>
</DiagramLayerSettings>
<geometryOptions removeDuplicateNodes="0" geometryPrecision="0">
<activeChecks/>
<checkConfiguration type="Map">
<Option name="QgsGeometryGapCheck" type="Map">
<Option name="allowedGapsBuffer" type="double" value="0"/>
<Option name="allowedGapsEnabled" type="bool" value="false"/>
<Option name="allowedGapsLayer" type="QString" value=""/>
</Option>
</checkConfiguration>
</geometryOptions>
<legend type="default-vector"/>
<referencedLayers/>
<fieldConfiguration>
<field configurationFlags="None" name="gml_id">
<editWidget type="TextEdit">
<config>
<Option/>
</config>
</editWidget>
</field>
<field configurationFlags="None" name="objectid">
<editWidget type="TextEdit">
<config>
<Option/>
</config>
</editWidget>
</field>
<field configurationFlags="None" name="obj_nr">
<editWidget type="TextEdit">
<config>
<Option/>
</config>
</editWidget>
</field>
<field configurationFlags="None" name="typ">
<editWidget type="TextEdit">
<config>
<Option/>
</config>
</editWidget>
</field>
<field configurationFlags="None" name="text_1">
<editWidget type="TextEdit">
<config>
<Option/>
</config>
</editWidget>
</field>
<field configurationFlags="None" name="ext_objnr">
<editWidget type="TextEdit">
<config>
<Option/>
</config>
</editWidget>
</field>
<field configurationFlags="None" name="ext_hida_n">
<editWidget type="TextEdit">
<config>
<Option/>
</config>
</editWidget>
</field>
<field configurationFlags="None" name="ext_eigenn">
<editWidget type="TextEdit">
<config>
<Option/>
</config>
</editWidget>
</field>
<field configurationFlags="None" name="ext_kreis">
<editWidget type="TextEdit">
<config>
<Option/>
</config>
</editWidget>
</field>
<field configurationFlags="None" name="ext_gemein">
<editWidget type="TextEdit">
<config>
<Option/>
</config>
</editWidget>
</field>
<field configurationFlags="None" name="ext_ortste">
<editWidget type="TextEdit">
<config>
<Option/>
</config>
</editWidget>
</field>
<field configurationFlags="None" name="ext_strass">
<editWidget type="TextEdit">
<config>
<Option/>
</config>
</editWidget>
</field>
<field configurationFlags="None" name="ext_hausnu">
<editWidget type="TextEdit">
<config>
<Option/>
</config>
</editWidget>
</field>
<field configurationFlags="None" name="ext_gemark">
<editWidget type="TextEdit">
<config>
<Option/>
</config>
</editWidget>
</field>
<field configurationFlags="None" name="ext_flurst">
<editWidget type="TextEdit">
<config>
<Option/>
</config>
</editWidget>
</field>
<field configurationFlags="None" name="ext_kchar1">
<editWidget type="TextEdit">
<config>
<Option/>
</config>
</editWidget>
</field>
<field configurationFlags="None" name="ext_kchar2">
<editWidget type="TextEdit">
<config>
<Option/>
</config>
</editWidget>
</field>
<field configurationFlags="None" name="ext_kchar3">
<editWidget type="TextEdit">
<config>
<Option/>
</config>
</editWidget>
</field>
<field configurationFlags="None" name="ext_datier">
<editWidget type="TextEdit">
<config>
<Option/>
</config>
</editWidget>
</field>
<field configurationFlags="None" name="ext_typ">
<editWidget type="TextEdit">
<config>
<Option/>
</config>
</editWidget>
</field>
<field configurationFlags="None" name="gd_ueberar">
<editWidget type="TextEdit">
<config>
<Option/>
</config>
</editWidget>
</field>
<field configurationFlags="None" name="sort">
<editWidget type="TextEdit">
<config>
<Option/>
</config>
</editWidget>
</field>
<field configurationFlags="None" name="Stand">
<editWidget type="TextEdit">
<config>
<Option/>
</config>
</editWidget>
</field>
</fieldConfiguration>
<aliases>
<alias name="" field="gml_id" index="0"/>
<alias name="" field="objectid" index="1"/>
<alias name="" field="obj_nr" index="2"/>
<alias name="" field="typ" index="3"/>
<alias name="" field="text_1" index="4"/>
<alias name="" field="ext_objnr" index="5"/>
<alias name="" field="ext_hida_n" index="6"/>
<alias name="" field="ext_eigenn" index="7"/>
<alias name="" field="ext_kreis" index="8"/>
<alias name="" field="ext_gemein" index="9"/>
<alias name="" field="ext_ortste" index="10"/>
<alias name="" field="ext_strass" index="11"/>
<alias name="" field="ext_hausnu" index="12"/>
<alias name="" field="ext_gemark" index="13"/>
<alias name="" field="ext_flurst" index="14"/>
<alias name="" field="ext_kchar1" index="15"/>
<alias name="" field="ext_kchar2" index="16"/>
<alias name="" field="ext_kchar3" index="17"/>
<alias name="" field="ext_datier" index="18"/>
<alias name="" field="ext_typ" index="19"/>
<alias name="" field="gd_ueberar" index="20"/>
<alias name="" field="sort" index="21"/>
<alias name="" field="Stand" index="22"/>
</aliases>
<defaults>
<default field="gml_id" expression="" applyOnUpdate="0"/>
<default field="objectid" expression="" applyOnUpdate="0"/>
<default field="obj_nr" expression="" applyOnUpdate="0"/>
<default field="typ" expression="" applyOnUpdate="0"/>
<default field="text_1" expression="" applyOnUpdate="0"/>
<default field="ext_objnr" expression="" applyOnUpdate="0"/>
<default field="ext_hida_n" expression="" applyOnUpdate="0"/>
<default field="ext_eigenn" expression="" applyOnUpdate="0"/>
<default field="ext_kreis" expression="" applyOnUpdate="0"/>
<default field="ext_gemein" expression="" applyOnUpdate="0"/>
<default field="ext_ortste" expression="" applyOnUpdate="0"/>
<default field="ext_strass" expression="" applyOnUpdate="0"/>
<default field="ext_hausnu" expression="" applyOnUpdate="0"/>
<default field="ext_gemark" expression="" applyOnUpdate="0"/>
<default field="ext_flurst" expression="" applyOnUpdate="0"/>
<default field="ext_kchar1" expression="" applyOnUpdate="0"/>
<default field="ext_kchar2" expression="" applyOnUpdate="0"/>
<default field="ext_kchar3" expression="" applyOnUpdate="0"/>
<default field="ext_datier" expression="" applyOnUpdate="0"/>
<default field="ext_typ" expression="" applyOnUpdate="0"/>
<default field="gd_ueberar" expression="" applyOnUpdate="0"/>
<default field="sort" expression="" applyOnUpdate="0"/>
<default field="Stand" expression="" applyOnUpdate="0"/>
</defaults>
<constraints>
<constraint exp_strength="0" field="gml_id" unique_strength="0" notnull_strength="0" constraints="0"/>
<constraint exp_strength="0" field="objectid" unique_strength="0" notnull_strength="0" constraints="0"/>
<constraint exp_strength="0" field="obj_nr" unique_strength="0" notnull_strength="0" constraints="0"/>
<constraint exp_strength="0" field="typ" unique_strength="0" notnull_strength="0" constraints="0"/>
<constraint exp_strength="0" field="text_1" unique_strength="0" notnull_strength="0" constraints="0"/>
<constraint exp_strength="0" field="ext_objnr" unique_strength="0" notnull_strength="0" constraints="0"/>
<constraint exp_strength="0" field="ext_hida_n" unique_strength="0" notnull_strength="0" constraints="0"/>
<constraint exp_strength="0" field="ext_eigenn" unique_strength="0" notnull_strength="0" constraints="0"/>
<constraint exp_strength="0" field="ext_kreis" unique_strength="0" notnull_strength="0" constraints="0"/>
<constraint exp_strength="0" field="ext_gemein" unique_strength="0" notnull_strength="0" constraints="0"/>
<constraint exp_strength="0" field="ext_ortste" unique_strength="0" notnull_strength="0" constraints="0"/>
<constraint exp_strength="0" field="ext_strass" unique_strength="0" notnull_strength="0" constraints="0"/>
<constraint exp_strength="0" field="ext_hausnu" unique_strength="0" notnull_strength="0" constraints="0"/>
<constraint exp_strength="0" field="ext_gemark" unique_strength="0" notnull_strength="0" constraints="0"/>
<constraint exp_strength="0" field="ext_flurst" unique_strength="0" notnull_strength="0" constraints="0"/>
<constraint exp_strength="0" field="ext_kchar1" unique_strength="0" notnull_strength="0" constraints="0"/>
<constraint exp_strength="0" field="ext_kchar2" unique_strength="0" notnull_strength="0" constraints="0"/>
<constraint exp_strength="0" field="ext_kchar3" unique_strength="0" notnull_strength="0" constraints="0"/>
<constraint exp_strength="0" field="ext_datier" unique_strength="0" notnull_strength="0" constraints="0"/>
<constraint exp_strength="0" field="ext_typ" unique_strength="0" notnull_strength="0" constraints="0"/>
<constraint exp_strength="0" field="gd_ueberar" unique_strength="0" notnull_strength="0" constraints="0"/>
<constraint exp_strength="0" field="sort" unique_strength="0" notnull_strength="0" constraints="0"/>
<constraint exp_strength="0" field="Stand" unique_strength="0" notnull_strength="0" constraints="0"/>
</constraints>
<constraintExpressions>
<constraint field="gml_id" desc="" exp=""/>
<constraint field="objectid" desc="" exp=""/>
<constraint field="obj_nr" desc="" exp=""/>
<constraint field="typ" desc="" exp=""/>
<constraint field="text_1" desc="" exp=""/>
<constraint field="ext_objnr" desc="" exp=""/>
<constraint field="ext_hida_n" desc="" exp=""/>
<constraint field="ext_eigenn" desc="" exp=""/>
<constraint field="ext_kreis" desc="" exp=""/>
<constraint field="ext_gemein" desc="" exp=""/>
<constraint field="ext_ortste" desc="" exp=""/>
<constraint field="ext_strass" desc="" exp=""/>
<constraint field="ext_hausnu" desc="" exp=""/>
<constraint field="ext_gemark" desc="" exp=""/>
<constraint field="ext_flurst" desc="" exp=""/>
<constraint field="ext_kchar1" desc="" exp=""/>
<constraint field="ext_kchar2" desc="" exp=""/>
<constraint field="ext_kchar3" desc="" exp=""/>
<constraint field="ext_datier" desc="" exp=""/>
<constraint field="ext_typ" desc="" exp=""/>
<constraint field="gd_ueberar" desc="" exp=""/>
<constraint field="sort" desc="" exp=""/>
<constraint field="Stand" desc="" exp=""/>
</constraintExpressions>
<expressionfields/>
<attributeactions>
<defaultAction key="Canvas" value="{00000000-0000-0000-0000-000000000000}"/>
</attributeactions>
<attributetableconfig sortOrder="0" actionWidgetStyle="dropDown" sortExpression="&quot;gml_id&quot;">
<columns>
<column width="-1" name="gml_id" type="field" hidden="0"/>
<column width="-1" name="objectid" type="field" hidden="0"/>
<column width="-1" name="obj_nr" type="field" hidden="0"/>
<column width="-1" name="typ" type="field" hidden="0"/>
<column width="-1" name="text_1" type="field" hidden="0"/>
<column width="-1" name="ext_objnr" type="field" hidden="0"/>
<column width="-1" name="ext_hida_n" type="field" hidden="0"/>
<column width="-1" name="ext_eigenn" type="field" hidden="0"/>
<column width="-1" name="ext_kreis" type="field" hidden="0"/>
<column width="-1" name="ext_gemein" type="field" hidden="0"/>
<column width="-1" name="ext_ortste" type="field" hidden="0"/>
<column width="-1" name="ext_strass" type="field" hidden="0"/>
<column width="-1" name="ext_hausnu" type="field" hidden="0"/>
<column width="-1" name="ext_gemark" type="field" hidden="0"/>
<column width="-1" name="ext_flurst" type="field" hidden="0"/>
<column width="-1" name="ext_kchar1" type="field" hidden="0"/>
<column width="-1" name="ext_kchar2" type="field" hidden="0"/>
<column width="-1" name="ext_kchar3" type="field" hidden="0"/>
<column width="-1" name="ext_datier" type="field" hidden="0"/>
<column width="-1" name="ext_typ" type="field" hidden="0"/>
<column width="-1" name="gd_ueberar" type="field" hidden="0"/>
<column width="-1" name="sort" type="field" hidden="0"/>
<column width="-1" name="Stand" type="field" hidden="0"/>
<column width="-1" type="actions" hidden="1"/>
</columns>
</attributetableconfig>
<conditionalstyles>
<rowstyles/>
<fieldstyles/>
</conditionalstyles>
<storedexpressions/>
<editform tolerant="1"></editform>
<editforminit/>
<editforminitcodesource>0</editforminitcodesource>
<editforminitfilepath></editforminitfilepath>
<editforminitcode><![CDATA[# -*- coding: utf-8 -*-
"""
QGIS forms can have a Python function that is called when the form is
opened.
Use this function to add extra logic to your forms.
Enter the name of the function in the "Python Init function"
field.
An example follows:
"""
from qgis.PyQt.QtWidgets import QWidget
def my_form_open(dialog, layer, feature):
geom = feature.geometry()
control = dialog.findChild(QWidget, "MyLineEdit")
]]></editforminitcode>
<featformsuppress>0</featformsuppress>
<editorlayout>generatedlayout</editorlayout>
<editable>
<field name="Stand" editable="1"/>
<field name="ext_datier" editable="1"/>
<field name="ext_eigenn" editable="1"/>
<field name="ext_flurst" editable="1"/>
<field name="ext_gemark" editable="1"/>
<field name="ext_gemein" editable="1"/>
<field name="ext_hausnu" editable="1"/>
<field name="ext_hida_n" editable="1"/>
<field name="ext_kchar1" editable="1"/>
<field name="ext_kchar2" editable="1"/>
<field name="ext_kchar3" editable="1"/>
<field name="ext_kreis" editable="1"/>
<field name="ext_objnr" editable="1"/>
<field name="ext_ortste" editable="1"/>
<field name="ext_strass" editable="1"/>
<field name="ext_typ" editable="1"/>
<field name="gd_ueberar" editable="1"/>
<field name="gml_id" editable="1"/>
<field name="obj_nr" editable="1"/>
<field name="objectid" editable="1"/>
<field name="sort" editable="1"/>
<field name="text_1" editable="1"/>
<field name="typ" editable="1"/>
</editable>
<labelOnTop>
<field name="Stand" labelOnTop="0"/>
<field name="ext_datier" labelOnTop="0"/>
<field name="ext_eigenn" labelOnTop="0"/>
<field name="ext_flurst" labelOnTop="0"/>
<field name="ext_gemark" labelOnTop="0"/>
<field name="ext_gemein" labelOnTop="0"/>
<field name="ext_hausnu" labelOnTop="0"/>
<field name="ext_hida_n" labelOnTop="0"/>
<field name="ext_kchar1" labelOnTop="0"/>
<field name="ext_kchar2" labelOnTop="0"/>
<field name="ext_kchar3" labelOnTop="0"/>
<field name="ext_kreis" labelOnTop="0"/>
<field name="ext_objnr" labelOnTop="0"/>
<field name="ext_ortste" labelOnTop="0"/>
<field name="ext_strass" labelOnTop="0"/>
<field name="ext_typ" labelOnTop="0"/>
<field name="gd_ueberar" labelOnTop="0"/>
<field name="gml_id" labelOnTop="0"/>
<field name="obj_nr" labelOnTop="0"/>
<field name="objectid" labelOnTop="0"/>
<field name="sort" labelOnTop="0"/>
<field name="text_1" labelOnTop="0"/>
<field name="typ" labelOnTop="0"/>
</labelOnTop>
<dataDefinedFieldProperties/>
<widgets/>
<previewExpression>"gml_id"</previewExpression>
<mapTip></mapTip>
<layerGeometryType>2</layerGeometryType>
</qgis>

View File

@@ -0,0 +1,349 @@
<!DOCTYPE qgis PUBLIC 'http://mrcc.com/qgis.dtd' 'SYSTEM'>
<qgis labelsEnabled="1" version="3.40.4-Bratislava" styleCategories="Symbology|Labeling">
<renderer-v2 enableorderby="0" type="singleSymbol" referencescale="-1" forceraster="0" symbollevels="0">
<symbols>
<symbol name="0" type="fill" force_rhr="0" clip_to_extent="1" is_animated="0" frame_rate="10" alpha="1">
<data_defined_properties>
<Option type="Map">
<Option name="name" type="QString" value=""/>
<Option name="properties"/>
<Option name="type" type="QString" value="collection"/>
</Option>
</data_defined_properties>
<layer id="{bc287a30-ef97-44d4-ac42-1890985a8e6e}" class="SimpleFill" locked="0" enabled="1" pass="0">
<Option type="Map">
<Option name="border_width_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="color" type="QString" value="229,182,54,255,rgb:0.89803921568627454,0.71372549019607845,0.21176470588235294,1"/>
<Option name="joinstyle" type="QString" value="bevel"/>
<Option name="offset" type="QString" value="0,0"/>
<Option name="offset_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="offset_unit" type="QString" value="MM"/>
<Option name="outline_color" type="QString" value="35,35,35,255,rgb:0.13725490196078433,0.13725490196078433,0.13725490196078433,1"/>
<Option name="outline_style" type="QString" value="solid"/>
<Option name="outline_width" type="QString" value="0.5"/>
<Option name="outline_width_unit" type="QString" value="MM"/>
<Option name="style" type="QString" value="no"/>
</Option>
<data_defined_properties>
<Option type="Map">
<Option name="name" type="QString" value=""/>
<Option name="properties"/>
<Option name="type" type="QString" value="collection"/>
</Option>
</data_defined_properties>
</layer>
</symbol>
</symbols>
<rotation/>
<sizescale/>
<data-defined-properties>
<Option type="Map">
<Option name="name" type="QString" value=""/>
<Option name="properties"/>
<Option name="type" type="QString" value="collection"/>
</Option>
</data-defined-properties>
</renderer-v2>
<selection mode="Default">
<selectionColor invalid="1"/>
<selectionSymbol>
<symbol name="" type="fill" force_rhr="0" clip_to_extent="1" is_animated="0" frame_rate="10" alpha="1">
<data_defined_properties>
<Option type="Map">
<Option name="name" type="QString" value=""/>
<Option name="properties"/>
<Option name="type" type="QString" value="collection"/>
</Option>
</data_defined_properties>
<layer id="{819785db-4b31-4c4c-8332-821c09f81921}" class="SimpleFill" locked="0" enabled="1" pass="0">
<Option type="Map">
<Option name="border_width_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="color" type="QString" value="0,0,255,255,rgb:0,0,1,1"/>
<Option name="joinstyle" type="QString" value="bevel"/>
<Option name="offset" type="QString" value="0,0"/>
<Option name="offset_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="offset_unit" type="QString" value="MM"/>
<Option name="outline_color" type="QString" value="35,35,35,255,rgb:0.13725490196078433,0.13725490196078433,0.13725490196078433,1"/>
<Option name="outline_style" type="QString" value="solid"/>
<Option name="outline_width" type="QString" value="0.26"/>
<Option name="outline_width_unit" type="QString" value="MM"/>
<Option name="style" type="QString" value="solid"/>
</Option>
<data_defined_properties>
<Option type="Map">
<Option name="name" type="QString" value=""/>
<Option name="properties"/>
<Option name="type" type="QString" value="collection"/>
</Option>
</data_defined_properties>
</layer>
</symbol>
</selectionSymbol>
</selection>
<labeling type="rule-based">
<rules key="{15ec465c-d050-4a64-b4ba-262af80bbb43}">
<rule key="{b56520a8-9937-40dd-b8fe-c4386271088d}" filter="&quot;flurstuecksnummer_ax_flurstuecksnummer_nenner&quot; IS NULL" description="FlstNr_ohne_Zusatz">
<settings calloutType="simple">
<text-style forcedItalic="0" fontUnderline="0" previewBkgrdColor="255,255,255,255,rgb:1,1,1,1" fontItalic="0" tabStopDistanceUnit="Point" textOpacity="1" multilineHeight="1" fontFamily="Times New Roman" fontStrikeout="0" capitalization="0" fieldName="flurstuecksnummer_ax_flurstuecksnummer_zaehler" legendString="Aa" fontSizeUnit="Point" fontWeight="50" textOrientation="horizontal" multilineHeightUnit="Percentage" fontKerning="1" tabStopDistanceMapUnitScale="3x:0,0,0,0,0,0" forcedBold="0" fontWordSpacing="0" fontLetterSpacing="0" fontSizeMapUnitScale="3x:0,0,0,0,0,0" allowHtml="0" isExpression="0" useSubstitutions="0" textColor="0,0,0,255,rgb:0,0,0,1" blendMode="0" fontSize="7" namedStyle="Standard" tabStopDistance="80">
<families/>
<text-buffer bufferBlendMode="0" bufferSizeUnits="MM" bufferOpacity="1" bufferJoinStyle="128" bufferNoFill="1" bufferSizeMapUnitScale="3x:0,0,0,0,0,0" bufferDraw="1" bufferColor="255,255,255,255,rgb:1,1,1,1" bufferSize="1"/>
<text-mask maskEnabled="0" maskSizeMapUnitScale="3x:0,0,0,0,0,0" maskSizeUnits="MM" maskJoinStyle="128" maskSize2="1.5" maskSize="1.5" maskOpacity="1" maskType="0" maskedSymbolLayers=""/>
<background shapeOffsetX="0" shapeRadiiY="0" shapeSVGFile="" shapeRotation="0" shapeBorderWidth="0" shapeRadiiX="0" shapeSizeX="0" shapeBorderWidthMapUnitScale="3x:0,0,0,0,0,0" shapeSizeUnit="MM" shapeRotationType="0" shapeBorderColor="128,128,128,255,rgb:0.50196078431372548,0.50196078431372548,0.50196078431372548,1" shapeJoinStyle="64" shapeRadiiMapUnitScale="3x:0,0,0,0,0,0" shapeType="0" shapeOffsetMapUnitScale="3x:0,0,0,0,0,0" shapeDraw="0" shapeBorderWidthUnit="MM" shapeFillColor="255,255,255,255,rgb:1,1,1,1" shapeOffsetUnit="MM" shapeRadiiUnit="MM" shapeSizeMapUnitScale="3x:0,0,0,0,0,0" shapeOffsetY="0" shapeBlendMode="0" shapeSizeType="0" shapeSizeY="0" shapeOpacity="1">
<symbol name="markerSymbol" type="marker" force_rhr="0" clip_to_extent="1" is_animated="0" frame_rate="10" alpha="1">
<data_defined_properties>
<Option type="Map">
<Option name="name" type="QString" value=""/>
<Option name="properties"/>
<Option name="type" type="QString" value="collection"/>
</Option>
</data_defined_properties>
<layer id="" class="SimpleMarker" locked="0" enabled="1" pass="0">
<Option type="Map">
<Option name="angle" type="QString" value="0"/>
<Option name="cap_style" type="QString" value="square"/>
<Option name="color" type="QString" value="141,90,153,255,rgb:0.55294117647058827,0.35294117647058826,0.59999999999999998,1"/>
<Option name="horizontal_anchor_point" type="QString" value="1"/>
<Option name="joinstyle" type="QString" value="bevel"/>
<Option name="name" type="QString" value="circle"/>
<Option name="offset" type="QString" value="0,0"/>
<Option name="offset_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="offset_unit" type="QString" value="MM"/>
<Option name="outline_color" type="QString" value="35,35,35,255,rgb:0.13725490196078433,0.13725490196078433,0.13725490196078433,1"/>
<Option name="outline_style" type="QString" value="solid"/>
<Option name="outline_width" type="QString" value="0"/>
<Option name="outline_width_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="outline_width_unit" type="QString" value="MM"/>
<Option name="scale_method" type="QString" value="diameter"/>
<Option name="size" type="QString" value="2"/>
<Option name="size_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="size_unit" type="QString" value="MM"/>
<Option name="vertical_anchor_point" type="QString" value="1"/>
</Option>
<data_defined_properties>
<Option type="Map">
<Option name="name" type="QString" value=""/>
<Option name="properties"/>
<Option name="type" type="QString" value="collection"/>
</Option>
</data_defined_properties>
</layer>
</symbol>
<symbol name="fillSymbol" type="fill" force_rhr="0" clip_to_extent="1" is_animated="0" frame_rate="10" alpha="1">
<data_defined_properties>
<Option type="Map">
<Option name="name" type="QString" value=""/>
<Option name="properties"/>
<Option name="type" type="QString" value="collection"/>
</Option>
</data_defined_properties>
<layer id="" class="SimpleFill" locked="0" enabled="1" pass="0">
<Option type="Map">
<Option name="border_width_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="color" type="QString" value="255,255,255,255,rgb:1,1,1,1"/>
<Option name="joinstyle" type="QString" value="bevel"/>
<Option name="offset" type="QString" value="0,0"/>
<Option name="offset_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="offset_unit" type="QString" value="MM"/>
<Option name="outline_color" type="QString" value="128,128,128,255,rgb:0.50196078431372548,0.50196078431372548,0.50196078431372548,1"/>
<Option name="outline_style" type="QString" value="no"/>
<Option name="outline_width" type="QString" value="0"/>
<Option name="outline_width_unit" type="QString" value="MM"/>
<Option name="style" type="QString" value="solid"/>
</Option>
<data_defined_properties>
<Option type="Map">
<Option name="name" type="QString" value=""/>
<Option name="properties"/>
<Option name="type" type="QString" value="collection"/>
</Option>
</data_defined_properties>
</layer>
</symbol>
</background>
<shadow shadowRadiusAlphaOnly="0" shadowOffsetAngle="135" shadowOpacity="0.69999999999999996" shadowOffsetUnit="MM" shadowColor="0,0,0,255,rgb:0,0,0,1" shadowRadiusMapUnitScale="3x:0,0,0,0,0,0" shadowRadius="1.5" shadowBlendMode="6" shadowScale="100" shadowDraw="0" shadowUnder="0" shadowOffsetDist="1" shadowRadiusUnit="MM" shadowOffsetMapUnitScale="3x:0,0,0,0,0,0" shadowOffsetGlobal="1"/>
<dd_properties>
<Option type="Map">
<Option name="name" type="QString" value=""/>
<Option name="properties"/>
<Option name="type" type="QString" value="collection"/>
</Option>
</dd_properties>
<substitutions/>
</text-style>
<text-format multilineAlign="3" autoWrapLength="0" reverseDirectionSymbol="0" plussign="0" rightDirectionSymbol=">" addDirectionSymbol="0" leftDirectionSymbol="&lt;" formatNumbers="0" decimals="3" placeDirectionSymbol="0" wrapChar="" useMaxLineLengthForAutoWrap="1"/>
<placement lineAnchorClipping="0" maximumDistanceMapUnitScale="3x:0,0,0,0,0,0" xOffset="0" maximumDistance="0" geometryGenerator="" distMapUnitScale="3x:0,0,0,0,0,0" predefinedPositionOrder="TR,TL,BR,BL,R,L,TSR,BSR" layerType="PolygonGeometry" lineAnchorPercent="0.5" rotationUnit="AngleDegrees" repeatDistanceMapUnitScale="3x:0,0,0,0,0,0" priority="9" yOffset="0" quadOffset="4" polygonPlacementFlags="2" centroidInside="1" placement="1" placementFlags="10" prioritization="PreferCloser" overrunDistance="0" offsetUnits="MM" maxCurvedCharAngleOut="-25" preserveRotation="1" lineAnchorTextPoint="CenterOfText" overlapHandling="PreventOverlap" rotationAngle="0" repeatDistance="0" offsetType="0" distUnits="MM" allowDegraded="0" overrunDistanceUnit="MM" centroidWhole="0" geometryGeneratorType="PointGeometry" fitInPolygonOnly="0" geometryGeneratorEnabled="0" dist="0" maxCurvedCharAngleIn="25" overrunDistanceMapUnitScale="3x:0,0,0,0,0,0" maximumDistanceUnit="MM" lineAnchorType="0" repeatDistanceUnits="MM" labelOffsetMapUnitScale="3x:0,0,0,0,0,0"/>
<rendering fontMinPixelSize="3" fontMaxPixelSize="10000" maxNumLabels="2000" obstacleFactor="1" mergeLines="0" fontLimitPixelSize="0" limitNumLabels="0" minFeatureSize="0" scaleMin="0" scaleVisibility="0" labelPerPart="0" scaleMax="0" obstacleType="1" upsidedownLabels="0" drawLabels="1" zIndex="0" unplacedVisibility="0" obstacle="1"/>
<dd_properties>
<Option type="Map">
<Option name="name" type="QString" value=""/>
<Option name="properties"/>
<Option name="type" type="QString" value="collection"/>
</Option>
</dd_properties>
<callout type="simple">
<Option type="Map">
<Option name="anchorPoint" type="QString" value="centroid"/>
<Option name="blendMode" type="int" value="0"/>
<Option name="ddProperties" type="Map">
<Option name="name" type="QString" value=""/>
<Option name="properties"/>
<Option name="type" type="QString" value="collection"/>
</Option>
<Option name="drawToAllParts" type="bool" value="false"/>
<Option name="enabled" type="QString" value="1"/>
<Option name="labelAnchorPoint" type="QString" value="point_on_exterior"/>
<Option name="lineSymbol" type="QString" value="&lt;symbol name=&quot;symbol&quot; type=&quot;line&quot; force_rhr=&quot;0&quot; clip_to_extent=&quot;1&quot; is_animated=&quot;0&quot; frame_rate=&quot;10&quot; alpha=&quot;1&quot;>&lt;data_defined_properties>&lt;Option type=&quot;Map&quot;>&lt;Option name=&quot;name&quot; type=&quot;QString&quot; value=&quot;&quot;/>&lt;Option name=&quot;properties&quot;/>&lt;Option name=&quot;type&quot; type=&quot;QString&quot; value=&quot;collection&quot;/>&lt;/Option>&lt;/data_defined_properties>&lt;layer id=&quot;{3356d22c-5f69-4911-8e91-fcf32e8243fa}&quot; class=&quot;SimpleLine&quot; locked=&quot;0&quot; enabled=&quot;1&quot; pass=&quot;0&quot;>&lt;Option type=&quot;Map&quot;>&lt;Option name=&quot;align_dash_pattern&quot; type=&quot;QString&quot; value=&quot;0&quot;/>&lt;Option name=&quot;capstyle&quot; type=&quot;QString&quot; value=&quot;square&quot;/>&lt;Option name=&quot;customdash&quot; type=&quot;QString&quot; value=&quot;5;2&quot;/>&lt;Option name=&quot;customdash_map_unit_scale&quot; type=&quot;QString&quot; value=&quot;3x:0,0,0,0,0,0&quot;/>&lt;Option name=&quot;customdash_unit&quot; type=&quot;QString&quot; value=&quot;MM&quot;/>&lt;Option name=&quot;dash_pattern_offset&quot; type=&quot;QString&quot; value=&quot;0&quot;/>&lt;Option name=&quot;dash_pattern_offset_map_unit_scale&quot; type=&quot;QString&quot; value=&quot;3x:0,0,0,0,0,0&quot;/>&lt;Option name=&quot;dash_pattern_offset_unit&quot; type=&quot;QString&quot; value=&quot;MM&quot;/>&lt;Option name=&quot;draw_inside_polygon&quot; type=&quot;QString&quot; value=&quot;0&quot;/>&lt;Option name=&quot;joinstyle&quot; type=&quot;QString&quot; value=&quot;bevel&quot;/>&lt;Option name=&quot;line_color&quot; type=&quot;QString&quot; value=&quot;60,60,60,255,rgb:0.23529411764705882,0.23529411764705882,0.23529411764705882,1&quot;/>&lt;Option name=&quot;line_style&quot; type=&quot;QString&quot; value=&quot;solid&quot;/>&lt;Option name=&quot;line_width&quot; type=&quot;QString&quot; value=&quot;0.3&quot;/>&lt;Option name=&quot;line_width_unit&quot; type=&quot;QString&quot; value=&quot;MM&quot;/>&lt;Option name=&quot;offset&quot; type=&quot;QString&quot; value=&quot;0&quot;/>&lt;Option name=&quot;offset_map_unit_scale&quot; type=&quot;QString&quot; value=&quot;3x:0,0,0,0,0,0&quot;/>&lt;Option name=&quot;offset_unit&quot; type=&quot;QString&quot; value=&quot;MM&quot;/>&lt;Option name=&quot;ring_filter&quot; type=&quot;QString&quot; value=&quot;0&quot;/>&lt;Option name=&quot;trim_distance_end&quot; type=&quot;QString&quot; value=&quot;0&quot;/>&lt;Option name=&quot;trim_distance_end_map_unit_scale&quot; type=&quot;QString&quot; value=&quot;3x:0,0,0,0,0,0&quot;/>&lt;Option name=&quot;trim_distance_end_unit&quot; type=&quot;QString&quot; value=&quot;MM&quot;/>&lt;Option name=&quot;trim_distance_start&quot; type=&quot;QString&quot; value=&quot;0&quot;/>&lt;Option name=&quot;trim_distance_start_map_unit_scale&quot; type=&quot;QString&quot; value=&quot;3x:0,0,0,0,0,0&quot;/>&lt;Option name=&quot;trim_distance_start_unit&quot; type=&quot;QString&quot; value=&quot;MM&quot;/>&lt;Option name=&quot;tweak_dash_pattern_on_corners&quot; type=&quot;QString&quot; value=&quot;0&quot;/>&lt;Option name=&quot;use_custom_dash&quot; type=&quot;QString&quot; value=&quot;0&quot;/>&lt;Option name=&quot;width_map_unit_scale&quot; type=&quot;QString&quot; value=&quot;3x:0,0,0,0,0,0&quot;/>&lt;/Option>&lt;data_defined_properties>&lt;Option type=&quot;Map&quot;>&lt;Option name=&quot;name&quot; type=&quot;QString&quot; value=&quot;&quot;/>&lt;Option name=&quot;properties&quot;/>&lt;Option name=&quot;type&quot; type=&quot;QString&quot; value=&quot;collection&quot;/>&lt;/Option>&lt;/data_defined_properties>&lt;/layer>&lt;/symbol>"/>
<Option name="minLength" type="double" value="0"/>
<Option name="minLengthMapUnitScale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="minLengthUnit" type="QString" value="MM"/>
<Option name="offsetFromAnchor" type="double" value="0"/>
<Option name="offsetFromAnchorMapUnitScale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="offsetFromAnchorUnit" type="QString" value="MM"/>
<Option name="offsetFromLabel" type="double" value="0"/>
<Option name="offsetFromLabelMapUnitScale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="offsetFromLabelUnit" type="QString" value="MM"/>
</Option>
</callout>
</settings>
</rule>
<rule key="{a9800348-c55c-45d0-95ce-be6db84663c8}" filter="&quot;flurstuecksnummer_ax_flurstuecksnummer_nenner&quot; IS NOT NULL" description="Flst_num_Zusatz">
<settings calloutType="simple">
<text-style forcedItalic="0" fontUnderline="0" previewBkgrdColor="255,255,255,255,rgb:1,1,1,1" fontItalic="0" tabStopDistanceUnit="Point" textOpacity="1" multilineHeight="1" fontFamily="Times New Roman" fontStrikeout="0" capitalization="0" fieldName="&quot;flurstuecksnummer_ax_flurstuecksnummer_zaehler&quot; || '\n' || &quot;flurstuecksnummer_ax_flurstuecksnummer_nenner&quot; " legendString="Aa" fontSizeUnit="Point" fontWeight="50" textOrientation="horizontal" multilineHeightUnit="Percentage" fontKerning="1" tabStopDistanceMapUnitScale="3x:0,0,0,0,0,0" forcedBold="0" fontWordSpacing="0" fontLetterSpacing="0" fontSizeMapUnitScale="3x:0,0,0,0,0,0" allowHtml="0" isExpression="1" useSubstitutions="0" textColor="0,0,0,255,rgb:0,0,0,1" blendMode="0" fontSize="7" namedStyle="Standard" tabStopDistance="80">
<families/>
<text-buffer bufferBlendMode="0" bufferSizeUnits="MM" bufferOpacity="1" bufferJoinStyle="128" bufferNoFill="1" bufferSizeMapUnitScale="3x:0,0,0,0,0,0" bufferDraw="1" bufferColor="255,255,255,255,rgb:1,1,1,1" bufferSize="0.5"/>
<text-mask maskEnabled="0" maskSizeMapUnitScale="3x:0,0,0,0,0,0" maskSizeUnits="MM" maskJoinStyle="128" maskSize2="1.5" maskSize="1.5" maskOpacity="1" maskType="0" maskedSymbolLayers=""/>
<background shapeOffsetX="0" shapeRadiiY="0" shapeSVGFile="" shapeRotation="0" shapeBorderWidth="0" shapeRadiiX="0" shapeSizeX="4" shapeBorderWidthMapUnitScale="3x:0,0,0,0,0,0" shapeSizeUnit="MM" shapeRotationType="0" shapeBorderColor="128,128,128,255,rgb:0.50196078431372548,0.50196078431372548,0.50196078431372548,1" shapeJoinStyle="64" shapeRadiiMapUnitScale="3x:0,0,0,0,0,0" shapeType="5" shapeOffsetMapUnitScale="3x:0,0,0,0,0,0" shapeDraw="1" shapeBorderWidthUnit="MM" shapeFillColor="255,255,255,255,rgb:1,1,1,1" shapeOffsetUnit="MM" shapeRadiiUnit="MM" shapeSizeMapUnitScale="3x:0,0,0,0,0,0" shapeOffsetY="0" shapeBlendMode="0" shapeSizeType="1" shapeSizeY="0" shapeOpacity="1">
<symbol name="markerSymbol" type="marker" force_rhr="0" clip_to_extent="1" is_animated="0" frame_rate="10" alpha="1">
<data_defined_properties>
<Option type="Map">
<Option name="name" type="QString" value=""/>
<Option name="properties"/>
<Option name="type" type="QString" value="collection"/>
</Option>
</data_defined_properties>
<layer id="" class="SimpleMarker" locked="0" enabled="1" pass="0">
<Option type="Map">
<Option name="angle" type="QString" value="90"/>
<Option name="cap_style" type="QString" value="square"/>
<Option name="color" type="QString" value="255,158,23,255,rgb:1,0.61960784313725492,0.09019607843137255,1"/>
<Option name="horizontal_anchor_point" type="QString" value="1"/>
<Option name="joinstyle" type="QString" value="bevel"/>
<Option name="name" type="QString" value="line"/>
<Option name="offset" type="QString" value="0,0"/>
<Option name="offset_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="offset_unit" type="QString" value="MM"/>
<Option name="outline_color" type="QString" value="35,35,35,255,rgb:0.13725490196078433,0.13725490196078433,0.13725490196078433,1"/>
<Option name="outline_style" type="QString" value="solid"/>
<Option name="outline_width" type="QString" value="0.3"/>
<Option name="outline_width_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="outline_width_unit" type="QString" value="MM"/>
<Option name="scale_method" type="QString" value="diameter"/>
<Option name="size" type="QString" value="4"/>
<Option name="size_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="size_unit" type="QString" value="MM"/>
<Option name="vertical_anchor_point" type="QString" value="1"/>
</Option>
<data_defined_properties>
<Option type="Map">
<Option name="name" type="QString" value=""/>
<Option name="properties"/>
<Option name="type" type="QString" value="collection"/>
</Option>
</data_defined_properties>
</layer>
</symbol>
<symbol name="fillSymbol" type="fill" force_rhr="0" clip_to_extent="1" is_animated="0" frame_rate="10" alpha="1">
<data_defined_properties>
<Option type="Map">
<Option name="name" type="QString" value=""/>
<Option name="properties"/>
<Option name="type" type="QString" value="collection"/>
</Option>
</data_defined_properties>
<layer id="" class="SimpleFill" locked="0" enabled="1" pass="0">
<Option type="Map">
<Option name="border_width_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="color" type="QString" value="255,255,255,255,rgb:1,1,1,1"/>
<Option name="joinstyle" type="QString" value="bevel"/>
<Option name="offset" type="QString" value="0,0"/>
<Option name="offset_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="offset_unit" type="QString" value="MM"/>
<Option name="outline_color" type="QString" value="128,128,128,255,rgb:0.50196078431372548,0.50196078431372548,0.50196078431372548,1"/>
<Option name="outline_style" type="QString" value="no"/>
<Option name="outline_width" type="QString" value="0"/>
<Option name="outline_width_unit" type="QString" value="MM"/>
<Option name="style" type="QString" value="solid"/>
</Option>
<data_defined_properties>
<Option type="Map">
<Option name="name" type="QString" value=""/>
<Option name="properties"/>
<Option name="type" type="QString" value="collection"/>
</Option>
</data_defined_properties>
</layer>
</symbol>
</background>
<shadow shadowRadiusAlphaOnly="0" shadowOffsetAngle="135" shadowOpacity="0.69999999999999996" shadowOffsetUnit="MM" shadowColor="0,0,0,255,rgb:0,0,0,1" shadowRadiusMapUnitScale="3x:0,0,0,0,0,0" shadowRadius="1.5" shadowBlendMode="6" shadowScale="100" shadowDraw="0" shadowUnder="0" shadowOffsetDist="1" shadowRadiusUnit="MM" shadowOffsetMapUnitScale="3x:0,0,0,0,0,0" shadowOffsetGlobal="1"/>
<dd_properties>
<Option type="Map">
<Option name="name" type="QString" value=""/>
<Option name="properties"/>
<Option name="type" type="QString" value="collection"/>
</Option>
</dd_properties>
<substitutions/>
</text-style>
<text-format multilineAlign="3" autoWrapLength="0" reverseDirectionSymbol="0" plussign="0" rightDirectionSymbol=">" addDirectionSymbol="0" leftDirectionSymbol="&lt;" formatNumbers="0" decimals="3" placeDirectionSymbol="0" wrapChar="" useMaxLineLengthForAutoWrap="1"/>
<placement lineAnchorClipping="0" maximumDistanceMapUnitScale="3x:0,0,0,0,0,0" xOffset="0" maximumDistance="0" geometryGenerator="" distMapUnitScale="3x:0,0,0,0,0,0" predefinedPositionOrder="TR,TL,BR,BL,R,L,TSR,BSR" layerType="PolygonGeometry" lineAnchorPercent="0.5" rotationUnit="AngleDegrees" repeatDistanceMapUnitScale="3x:0,0,0,0,0,0" priority="5" yOffset="0" quadOffset="4" polygonPlacementFlags="2" centroidInside="1" placement="1" placementFlags="10" prioritization="PreferCloser" overrunDistance="0" offsetUnits="MM" maxCurvedCharAngleOut="-25" preserveRotation="1" lineAnchorTextPoint="CenterOfText" overlapHandling="PreventOverlap" rotationAngle="0" repeatDistance="0" offsetType="0" distUnits="MM" allowDegraded="0" overrunDistanceUnit="MM" centroidWhole="0" geometryGeneratorType="PointGeometry" fitInPolygonOnly="0" geometryGeneratorEnabled="0" dist="0" maxCurvedCharAngleIn="25" overrunDistanceMapUnitScale="3x:0,0,0,0,0,0" maximumDistanceUnit="MM" lineAnchorType="0" repeatDistanceUnits="MM" labelOffsetMapUnitScale="3x:0,0,0,0,0,0"/>
<rendering fontMinPixelSize="3" fontMaxPixelSize="10000" maxNumLabels="2000" obstacleFactor="1" mergeLines="0" fontLimitPixelSize="0" limitNumLabels="0" minFeatureSize="0" scaleMin="0" scaleVisibility="0" labelPerPart="0" scaleMax="0" obstacleType="1" upsidedownLabels="0" drawLabels="1" zIndex="0" unplacedVisibility="0" obstacle="1"/>
<dd_properties>
<Option type="Map">
<Option name="name" type="QString" value=""/>
<Option name="properties" type="Map">
<Option name="FontStyle" type="Map">
<Option name="active" type="bool" value="false"/>
<Option name="field" type="QString" value="flstnrzae"/>
<Option name="type" type="int" value="2"/>
</Option>
<Option name="Underline" type="Map">
<Option name="active" type="bool" value="false"/>
<Option name="field" type="QString" value="flstnrzae"/>
<Option name="type" type="int" value="2"/>
</Option>
</Option>
<Option name="type" type="QString" value="collection"/>
</Option>
</dd_properties>
<callout type="simple">
<Option type="Map">
<Option name="anchorPoint" type="QString" value="pole_of_inaccessibility"/>
<Option name="blendMode" type="int" value="0"/>
<Option name="ddProperties" type="Map">
<Option name="name" type="QString" value=""/>
<Option name="properties"/>
<Option name="type" type="QString" value="collection"/>
</Option>
<Option name="drawToAllParts" type="bool" value="false"/>
<Option name="enabled" type="QString" value="0"/>
<Option name="labelAnchorPoint" type="QString" value="point_on_exterior"/>
<Option name="lineSymbol" type="QString" value="&lt;symbol name=&quot;symbol&quot; type=&quot;line&quot; force_rhr=&quot;0&quot; clip_to_extent=&quot;1&quot; is_animated=&quot;0&quot; frame_rate=&quot;10&quot; alpha=&quot;1&quot;>&lt;data_defined_properties>&lt;Option type=&quot;Map&quot;>&lt;Option name=&quot;name&quot; type=&quot;QString&quot; value=&quot;&quot;/>&lt;Option name=&quot;properties&quot;/>&lt;Option name=&quot;type&quot; type=&quot;QString&quot; value=&quot;collection&quot;/>&lt;/Option>&lt;/data_defined_properties>&lt;layer id=&quot;{0a6da4bc-e8f1-4ec2-8062-844ead072d33}&quot; class=&quot;SimpleLine&quot; locked=&quot;0&quot; enabled=&quot;1&quot; pass=&quot;0&quot;>&lt;Option type=&quot;Map&quot;>&lt;Option name=&quot;align_dash_pattern&quot; type=&quot;QString&quot; value=&quot;0&quot;/>&lt;Option name=&quot;capstyle&quot; type=&quot;QString&quot; value=&quot;square&quot;/>&lt;Option name=&quot;customdash&quot; type=&quot;QString&quot; value=&quot;5;2&quot;/>&lt;Option name=&quot;customdash_map_unit_scale&quot; type=&quot;QString&quot; value=&quot;3x:0,0,0,0,0,0&quot;/>&lt;Option name=&quot;customdash_unit&quot; type=&quot;QString&quot; value=&quot;MM&quot;/>&lt;Option name=&quot;dash_pattern_offset&quot; type=&quot;QString&quot; value=&quot;0&quot;/>&lt;Option name=&quot;dash_pattern_offset_map_unit_scale&quot; type=&quot;QString&quot; value=&quot;3x:0,0,0,0,0,0&quot;/>&lt;Option name=&quot;dash_pattern_offset_unit&quot; type=&quot;QString&quot; value=&quot;MM&quot;/>&lt;Option name=&quot;draw_inside_polygon&quot; type=&quot;QString&quot; value=&quot;0&quot;/>&lt;Option name=&quot;joinstyle&quot; type=&quot;QString&quot; value=&quot;bevel&quot;/>&lt;Option name=&quot;line_color&quot; type=&quot;QString&quot; value=&quot;60,60,60,255,rgb:0.23529411764705882,0.23529411764705882,0.23529411764705882,1&quot;/>&lt;Option name=&quot;line_style&quot; type=&quot;QString&quot; value=&quot;solid&quot;/>&lt;Option name=&quot;line_width&quot; type=&quot;QString&quot; value=&quot;0.3&quot;/>&lt;Option name=&quot;line_width_unit&quot; type=&quot;QString&quot; value=&quot;MM&quot;/>&lt;Option name=&quot;offset&quot; type=&quot;QString&quot; value=&quot;0&quot;/>&lt;Option name=&quot;offset_map_unit_scale&quot; type=&quot;QString&quot; value=&quot;3x:0,0,0,0,0,0&quot;/>&lt;Option name=&quot;offset_unit&quot; type=&quot;QString&quot; value=&quot;MM&quot;/>&lt;Option name=&quot;ring_filter&quot; type=&quot;QString&quot; value=&quot;0&quot;/>&lt;Option name=&quot;trim_distance_end&quot; type=&quot;QString&quot; value=&quot;0&quot;/>&lt;Option name=&quot;trim_distance_end_map_unit_scale&quot; type=&quot;QString&quot; value=&quot;3x:0,0,0,0,0,0&quot;/>&lt;Option name=&quot;trim_distance_end_unit&quot; type=&quot;QString&quot; value=&quot;MM&quot;/>&lt;Option name=&quot;trim_distance_start&quot; type=&quot;QString&quot; value=&quot;0&quot;/>&lt;Option name=&quot;trim_distance_start_map_unit_scale&quot; type=&quot;QString&quot; value=&quot;3x:0,0,0,0,0,0&quot;/>&lt;Option name=&quot;trim_distance_start_unit&quot; type=&quot;QString&quot; value=&quot;MM&quot;/>&lt;Option name=&quot;tweak_dash_pattern_on_corners&quot; type=&quot;QString&quot; value=&quot;0&quot;/>&lt;Option name=&quot;use_custom_dash&quot; type=&quot;QString&quot; value=&quot;0&quot;/>&lt;Option name=&quot;width_map_unit_scale&quot; type=&quot;QString&quot; value=&quot;3x:0,0,0,0,0,0&quot;/>&lt;/Option>&lt;data_defined_properties>&lt;Option type=&quot;Map&quot;>&lt;Option name=&quot;name&quot; type=&quot;QString&quot; value=&quot;&quot;/>&lt;Option name=&quot;properties&quot;/>&lt;Option name=&quot;type&quot; type=&quot;QString&quot; value=&quot;collection&quot;/>&lt;/Option>&lt;/data_defined_properties>&lt;/layer>&lt;/symbol>"/>
<Option name="minLength" type="double" value="0"/>
<Option name="minLengthMapUnitScale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="minLengthUnit" type="QString" value="MM"/>
<Option name="offsetFromAnchor" type="double" value="0"/>
<Option name="offsetFromAnchorMapUnitScale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="offsetFromAnchorUnit" type="QString" value="MM"/>
<Option name="offsetFromLabel" type="double" value="0"/>
<Option name="offsetFromLabelMapUnitScale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="offsetFromLabelUnit" type="QString" value="MM"/>
</Option>
</callout>
</settings>
</rule>
</rules>
</labeling>
<blendMode>0</blendMode>
<featureBlendMode>0</featureBlendMode>
<layerGeometryType>2</layerGeometryType>
</qgis>

371
assets/GIS_LfULG_LSG.qml Normal file
View File

@@ -0,0 +1,371 @@
<!DOCTYPE qgis PUBLIC 'http://mrcc.com/qgis.dtd' 'SYSTEM'>
<qgis styleCategories="Symbology" version="3.40.7-Bratislava">
<renderer-v2 type="singleSymbol" forceraster="0" enableorderby="0" symbollevels="0" referencescale="-1">
<symbols>
<symbol type="fill" force_rhr="0" is_animated="0" frame_rate="10" name="0" alpha="1" clip_to_extent="1">
<data_defined_properties>
<Option type="Map">
<Option type="QString" value="" name="name"/>
<Option name="properties"/>
<Option type="QString" value="collection" name="type"/>
</Option>
</data_defined_properties>
<layer class="MarkerLine" id="{edf1fe5f-96c0-427c-ac7b-b04c95e0da9c}" enabled="1" locked="0" pass="0">
<Option type="Map">
<Option type="QString" value="4" name="average_angle_length"/>
<Option type="QString" value="3x:0,0,0,0,0,0" name="average_angle_map_unit_scale"/>
<Option type="QString" value="MM" name="average_angle_unit"/>
<Option type="QString" value="5" name="interval"/>
<Option type="QString" value="3x:0,0,0,0,0,0" name="interval_map_unit_scale"/>
<Option type="QString" value="MM" name="interval_unit"/>
<Option type="QString" value="0" name="offset"/>
<Option type="QString" value="0" name="offset_along_line"/>
<Option type="QString" value="3x:0,0,0,0,0,0" name="offset_along_line_map_unit_scale"/>
<Option type="QString" value="MM" name="offset_along_line_unit"/>
<Option type="QString" value="3x:0,0,0,0,0,0" name="offset_map_unit_scale"/>
<Option type="QString" value="Pixel" name="offset_unit"/>
<Option type="bool" value="true" name="place_on_every_part"/>
<Option type="QString" value="Interval" name="placements"/>
<Option type="QString" value="1" name="ring_filter"/>
<Option type="QString" value="1" name="rotate"/>
</Option>
<data_defined_properties>
<Option type="Map">
<Option type="QString" value="" name="name"/>
<Option name="properties"/>
<Option type="QString" value="collection" name="type"/>
</Option>
</data_defined_properties>
<symbol type="marker" force_rhr="0" is_animated="0" frame_rate="10" name="@0@0" alpha="1" clip_to_extent="1">
<data_defined_properties>
<Option type="Map">
<Option type="QString" value="" name="name"/>
<Option name="properties"/>
<Option type="QString" value="collection" name="type"/>
</Option>
</data_defined_properties>
<layer class="SimpleMarker" id="{857cb357-9b68-40ea-9e9f-edbdbd7de638}" enabled="1" locked="0" pass="0">
<Option type="Map">
<Option type="QString" value="90" name="angle"/>
<Option type="QString" value="square" name="cap_style"/>
<Option type="QString" value="255,0,0,255,rgb:1,0,0,1" name="color"/>
<Option type="QString" value="1" name="horizontal_anchor_point"/>
<Option type="QString" value="bevel" name="joinstyle"/>
<Option type="QString" value="line" name="name"/>
<Option type="QString" value="1.99999999999999978,-1.5" name="offset"/>
<Option type="QString" value="3x:0,0,0,0,0,0" name="offset_map_unit_scale"/>
<Option type="QString" value="MM" name="offset_unit"/>
<Option type="QString" value="128,128,128,255,rgb:0.50196078431372548,0.50196078431372548,0.50196078431372548,1" name="outline_color"/>
<Option type="QString" value="solid" name="outline_style"/>
<Option type="QString" value="0.5" name="outline_width"/>
<Option type="QString" value="3x:0,0,0,0,0,0" name="outline_width_map_unit_scale"/>
<Option type="QString" value="MM" name="outline_width_unit"/>
<Option type="QString" value="diameter" name="scale_method"/>
<Option type="QString" value="3" name="size"/>
<Option type="QString" value="3x:0,0,0,0,0,0" name="size_map_unit_scale"/>
<Option type="QString" value="MM" name="size_unit"/>
<Option type="QString" value="1" name="vertical_anchor_point"/>
</Option>
<data_defined_properties>
<Option type="Map">
<Option type="QString" value="" name="name"/>
<Option name="properties"/>
<Option type="QString" value="collection" name="type"/>
</Option>
</data_defined_properties>
</layer>
<layer class="SimpleMarker" id="{8da6ec0d-bd1d-4942-8241-be9e412a4ecd}" enabled="1" locked="0" pass="0">
<Option type="Map">
<Option type="QString" value="0" name="angle"/>
<Option type="QString" value="square" name="cap_style"/>
<Option type="QString" value="128,128,128,255,rgb:0.50196078431372548,0.50196078431372548,0.50196078431372548,1" name="color"/>
<Option type="QString" value="1" name="horizontal_anchor_point"/>
<Option type="QString" value="bevel" name="joinstyle"/>
<Option type="QString" value="line" name="name"/>
<Option type="QString" value="3,1" name="offset"/>
<Option type="QString" value="3x:0,0,0,0,0,0" name="offset_map_unit_scale"/>
<Option type="QString" value="MM" name="offset_unit"/>
<Option type="QString" value="128,128,128,255,rgb:0.50196078431372548,0.50196078431372548,0.50196078431372548,1" name="outline_color"/>
<Option type="QString" value="solid" name="outline_style"/>
<Option type="QString" value="0.5" name="outline_width"/>
<Option type="QString" value="3x:0,0,0,0,0,0" name="outline_width_map_unit_scale"/>
<Option type="QString" value="MM" name="outline_width_unit"/>
<Option type="QString" value="diameter" name="scale_method"/>
<Option type="QString" value="2" name="size"/>
<Option type="QString" value="3x:0,0,0,0,0,0" name="size_map_unit_scale"/>
<Option type="QString" value="MM" name="size_unit"/>
<Option type="QString" value="1" name="vertical_anchor_point"/>
</Option>
<data_defined_properties>
<Option type="Map">
<Option type="QString" value="" name="name"/>
<Option name="properties"/>
<Option type="QString" value="collection" name="type"/>
</Option>
</data_defined_properties>
</layer>
<layer class="SimpleMarker" id="{cf06f0f3-27d8-4b64-b56f-6bda0ed8508c}" enabled="1" locked="0" pass="0">
<Option type="Map">
<Option type="QString" value="0" name="angle"/>
<Option type="QString" value="square" name="cap_style"/>
<Option type="QString" value="255,0,0,255,rgb:1,0,0,1" name="color"/>
<Option type="QString" value="1" name="horizontal_anchor_point"/>
<Option type="QString" value="bevel" name="joinstyle"/>
<Option type="QString" value="line" name="name"/>
<Option type="QString" value="2,1" name="offset"/>
<Option type="QString" value="3x:0,0,0,0,0,0" name="offset_map_unit_scale"/>
<Option type="QString" value="MM" name="offset_unit"/>
<Option type="QString" value="128,128,128,255,rgb:0.50196078431372548,0.50196078431372548,0.50196078431372548,1" name="outline_color"/>
<Option type="QString" value="solid" name="outline_style"/>
<Option type="QString" value="0.5" name="outline_width"/>
<Option type="QString" value="3x:0,0,0,0,0,0" name="outline_width_map_unit_scale"/>
<Option type="QString" value="MM" name="outline_width_unit"/>
<Option type="QString" value="diameter" name="scale_method"/>
<Option type="QString" value="2" name="size"/>
<Option type="QString" value="3x:0,0,0,0,0,0" name="size_map_unit_scale"/>
<Option type="QString" value="MM" name="size_unit"/>
<Option type="QString" value="1" name="vertical_anchor_point"/>
</Option>
<data_defined_properties>
<Option type="Map">
<Option type="QString" value="" name="name"/>
<Option name="properties"/>
<Option type="QString" value="collection" name="type"/>
</Option>
</data_defined_properties>
</layer>
<layer class="SimpleMarker" id="{0f1b9591-1b5b-4e8a-8353-c0a7caaf7b21}" enabled="1" locked="0" pass="0">
<Option type="Map">
<Option type="QString" value="0" name="angle"/>
<Option type="QString" value="square" name="cap_style"/>
<Option type="QString" value="128,128,128,255,rgb:0.50196078431372548,0.50196078431372548,0.50196078431372548,1" name="color"/>
<Option type="QString" value="1" name="horizontal_anchor_point"/>
<Option type="QString" value="bevel" name="joinstyle"/>
<Option type="QString" value="line" name="name"/>
<Option type="QString" value="1,1" name="offset"/>
<Option type="QString" value="3x:0,0,0,0,0,0" name="offset_map_unit_scale"/>
<Option type="QString" value="MM" name="offset_unit"/>
<Option type="QString" value="128,128,128,255,rgb:0.50196078431372548,0.50196078431372548,0.50196078431372548,1" name="outline_color"/>
<Option type="QString" value="solid" name="outline_style"/>
<Option type="QString" value="0.5" name="outline_width"/>
<Option type="QString" value="3x:0,0,0,0,0,0" name="outline_width_map_unit_scale"/>
<Option type="QString" value="MM" name="outline_width_unit"/>
<Option type="QString" value="diameter" name="scale_method"/>
<Option type="QString" value="2" name="size"/>
<Option type="QString" value="3x:0,0,0,0,0,0" name="size_map_unit_scale"/>
<Option type="QString" value="MM" name="size_unit"/>
<Option type="QString" value="1" name="vertical_anchor_point"/>
</Option>
<data_defined_properties>
<Option type="Map">
<Option type="QString" value="" name="name"/>
<Option name="properties"/>
<Option type="QString" value="collection" name="type"/>
</Option>
</data_defined_properties>
</layer>
<layer class="SimpleMarker" id="{c9ae8a84-1a7d-4599-b27d-37bc1484098b}" enabled="1" locked="0" pass="0">
<Option type="Map">
<Option type="QString" value="0" name="angle"/>
<Option type="QString" value="square" name="cap_style"/>
<Option type="QString" value="128,128,128,255,rgb:0.50196078431372548,0.50196078431372548,0.50196078431372548,1" name="color"/>
<Option type="QString" value="1" name="horizontal_anchor_point"/>
<Option type="QString" value="bevel" name="joinstyle"/>
<Option type="QString" value="line" name="name"/>
<Option type="QString" value="0,1" name="offset"/>
<Option type="QString" value="3x:0,0,0,0,0,0" name="offset_map_unit_scale"/>
<Option type="QString" value="MM" name="offset_unit"/>
<Option type="QString" value="128,128,128,255,rgb:0.50196078431372548,0.50196078431372548,0.50196078431372548,1" name="outline_color"/>
<Option type="QString" value="solid" name="outline_style"/>
<Option type="QString" value="0.5" name="outline_width"/>
<Option type="QString" value="3x:0,0,0,0,0,0" name="outline_width_map_unit_scale"/>
<Option type="QString" value="MM" name="outline_width_unit"/>
<Option type="QString" value="diameter" name="scale_method"/>
<Option type="QString" value="2" name="size"/>
<Option type="QString" value="3x:0,0,0,0,0,0" name="size_map_unit_scale"/>
<Option type="QString" value="MM" name="size_unit"/>
<Option type="QString" value="1" name="vertical_anchor_point"/>
</Option>
<data_defined_properties>
<Option type="Map">
<Option type="QString" value="" name="name"/>
<Option name="properties"/>
<Option type="QString" value="collection" name="type"/>
</Option>
</data_defined_properties>
</layer>
</symbol>
</layer>
<layer class="SimpleLine" id="{fd1fd75a-85c6-4ace-a1bc-300a87cb1bcf}" enabled="1" locked="0" pass="0">
<Option type="Map">
<Option type="QString" value="0" name="align_dash_pattern"/>
<Option type="QString" value="square" name="capstyle"/>
<Option type="QString" value="5;2" name="customdash"/>
<Option type="QString" value="3x:0,0,0,0,0,0" name="customdash_map_unit_scale"/>
<Option type="QString" value="MM" name="customdash_unit"/>
<Option type="QString" value="0" name="dash_pattern_offset"/>
<Option type="QString" value="3x:0,0,0,0,0,0" name="dash_pattern_offset_map_unit_scale"/>
<Option type="QString" value="MM" name="dash_pattern_offset_unit"/>
<Option type="QString" value="0" name="draw_inside_polygon"/>
<Option type="QString" value="bevel" name="joinstyle"/>
<Option type="QString" value="128,128,128,255,rgb:0.50196078431372548,0.50196078431372548,0.50196078431372548,1" name="line_color"/>
<Option type="QString" value="solid" name="line_style"/>
<Option type="QString" value="0.5" name="line_width"/>
<Option type="QString" value="MM" name="line_width_unit"/>
<Option type="QString" value="0" name="offset"/>
<Option type="QString" value="3x:0,0,0,0,0,0" name="offset_map_unit_scale"/>
<Option type="QString" value="MM" name="offset_unit"/>
<Option type="QString" value="0" name="ring_filter"/>
<Option type="QString" value="0" name="trim_distance_end"/>
<Option type="QString" value="3x:0,0,0,0,0,0" name="trim_distance_end_map_unit_scale"/>
<Option type="QString" value="MM" name="trim_distance_end_unit"/>
<Option type="QString" value="0" name="trim_distance_start"/>
<Option type="QString" value="3x:0,0,0,0,0,0" name="trim_distance_start_map_unit_scale"/>
<Option type="QString" value="MM" name="trim_distance_start_unit"/>
<Option type="QString" value="0" name="tweak_dash_pattern_on_corners"/>
<Option type="QString" value="0" name="use_custom_dash"/>
<Option type="QString" value="3x:0,0,0,0,0,0" name="width_map_unit_scale"/>
</Option>
<data_defined_properties>
<Option type="Map">
<Option type="QString" value="" name="name"/>
<Option name="properties"/>
<Option type="QString" value="collection" name="type"/>
</Option>
</data_defined_properties>
</layer>
<layer class="CentroidFill" id="{801668fb-6226-4c79-a72a-ec430781b326}" enabled="1" locked="0" pass="0">
<Option type="Map">
<Option type="QString" value="1" name="clip_on_current_part_only"/>
<Option type="QString" value="1" name="clip_points"/>
<Option type="QString" value="1" name="point_on_all_parts"/>
<Option type="QString" value="1" name="point_on_surface"/>
</Option>
<data_defined_properties>
<Option type="Map">
<Option type="QString" value="" name="name"/>
<Option name="properties"/>
<Option type="QString" value="collection" name="type"/>
</Option>
</data_defined_properties>
<symbol type="marker" force_rhr="0" is_animated="0" frame_rate="10" name="@0@2" alpha="1" clip_to_extent="1">
<data_defined_properties>
<Option type="Map">
<Option type="QString" value="" name="name"/>
<Option name="properties"/>
<Option type="QString" value="collection" name="type"/>
</Option>
</data_defined_properties>
<layer class="SimpleMarker" id="{d075cd2b-6c94-49c8-b6a6-61d75f00fbc5}" enabled="1" locked="0" pass="0">
<Option type="Map">
<Option type="QString" value="0" name="angle"/>
<Option type="QString" value="square" name="cap_style"/>
<Option type="QString" value="255,0,0,0,rgb:1,0,0,0" name="color"/>
<Option type="QString" value="1" name="horizontal_anchor_point"/>
<Option type="QString" value="bevel" name="joinstyle"/>
<Option type="QString" value="circle" name="name"/>
<Option type="QString" value="0,0" name="offset"/>
<Option type="QString" value="3x:0,0,0,0,0,0" name="offset_map_unit_scale"/>
<Option type="QString" value="MapUnit" name="offset_unit"/>
<Option type="QString" value="0,0,0,255,rgb:0,0,0,1" name="outline_color"/>
<Option type="QString" value="solid" name="outline_style"/>
<Option type="QString" value="0.5" name="outline_width"/>
<Option type="QString" value="3x:0,0,0,0,0,0" name="outline_width_map_unit_scale"/>
<Option type="QString" value="MM" name="outline_width_unit"/>
<Option type="QString" value="diameter" name="scale_method"/>
<Option type="QString" value="15" name="size"/>
<Option type="QString" value="3x:0,0,0,0,0,0" name="size_map_unit_scale"/>
<Option type="QString" value="MM" name="size_unit"/>
<Option type="QString" value="1" name="vertical_anchor_point"/>
</Option>
<data_defined_properties>
<Option type="Map">
<Option type="QString" value="" name="name"/>
<Option name="properties"/>
<Option type="QString" value="collection" name="type"/>
</Option>
</data_defined_properties>
</layer>
<layer class="FontMarker" id="{d6023cfc-3bfd-46de-9557-e37b755164f3}" enabled="1" locked="0" pass="0">
<Option type="Map">
<Option type="QString" value="0" name="angle"/>
<Option type="QString" value="L" name="chr"/>
<Option type="QString" value="0,0,0,255,rgb:0,0,0,1" name="color"/>
<Option type="QString" value="Arial" name="font"/>
<Option type="QString" value="Standard" name="font_style"/>
<Option type="QString" value="1" name="horizontal_anchor_point"/>
<Option type="QString" value="bevel" name="joinstyle"/>
<Option type="QString" value="0,0" name="offset"/>
<Option type="QString" value="3x:0,0,0,0,0,0" name="offset_map_unit_scale"/>
<Option type="QString" value="MapUnit" name="offset_unit"/>
<Option type="QString" value="35,35,35,255,rgb:0.13725490196078433,0.13725490196078433,0.13725490196078433,1" name="outline_color"/>
<Option type="QString" value="0" name="outline_width"/>
<Option type="QString" value="3x:0,0,0,0,0,0" name="outline_width_map_unit_scale"/>
<Option type="QString" value="MM" name="outline_width_unit"/>
<Option type="QString" value="5" name="size"/>
<Option type="QString" value="3x:0,0,0,0,0,0" name="size_map_unit_scale"/>
<Option type="QString" value="MM" name="size_unit"/>
<Option type="QString" value="1" name="vertical_anchor_point"/>
</Option>
<data_defined_properties>
<Option type="Map">
<Option type="QString" value="" name="name"/>
<Option name="properties"/>
<Option type="QString" value="collection" name="type"/>
</Option>
</data_defined_properties>
</layer>
</symbol>
</layer>
</symbol>
</symbols>
<rotation/>
<sizescale/>
<data-defined-properties>
<Option type="Map">
<Option type="QString" value="" name="name"/>
<Option name="properties"/>
<Option type="QString" value="collection" name="type"/>
</Option>
</data-defined-properties>
</renderer-v2>
<selection mode="Default">
<selectionColor invalid="1"/>
<selectionSymbol>
<symbol type="fill" force_rhr="0" is_animated="0" frame_rate="10" name="" alpha="1" clip_to_extent="1">
<data_defined_properties>
<Option type="Map">
<Option type="QString" value="" name="name"/>
<Option name="properties"/>
<Option type="QString" value="collection" name="type"/>
</Option>
</data_defined_properties>
<layer class="SimpleFill" id="{790c0e9c-4587-46ac-845d-d8d4c15b81b7}" enabled="1" locked="0" pass="0">
<Option type="Map">
<Option type="QString" value="3x:0,0,0,0,0,0" name="border_width_map_unit_scale"/>
<Option type="QString" value="0,0,255,255,rgb:0,0,1,1" name="color"/>
<Option type="QString" value="bevel" name="joinstyle"/>
<Option type="QString" value="0,0" name="offset"/>
<Option type="QString" value="3x:0,0,0,0,0,0" name="offset_map_unit_scale"/>
<Option type="QString" value="MM" name="offset_unit"/>
<Option type="QString" value="35,35,35,255,rgb:0.13725490196078433,0.13725490196078433,0.13725490196078433,1" name="outline_color"/>
<Option type="QString" value="solid" name="outline_style"/>
<Option type="QString" value="0.26" name="outline_width"/>
<Option type="QString" value="MM" name="outline_width_unit"/>
<Option type="QString" value="solid" name="style"/>
</Option>
<data_defined_properties>
<Option type="Map">
<Option type="QString" value="" name="name"/>
<Option name="properties"/>
<Option type="QString" value="collection" name="type"/>
</Option>
</data_defined_properties>
</layer>
</symbol>
</selectionSymbol>
</selection>
<blendMode>0</blendMode>
<featureBlendMode>0</featureBlendMode>
<layerGeometryType>2</layerGeometryType>
</qgis>

View File

@@ -0,0 +1,575 @@
<!DOCTYPE qgis PUBLIC 'http://mrcc.com/qgis.dtd' 'SYSTEM'>
<qgis simplifyAlgorithm="0" simplifyDrawingTol="1" styleCategories="AllStyleCategories" labelsEnabled="1" simplifyLocal="1" version="3.16.0-Hannover" simplifyMaxScale="1" minScale="100000000" readOnly="0" hasScaleBasedVisibilityFlag="0" maxScale="0" simplifyDrawingHints="1">
<flags>
<Identifiable>1</Identifiable>
<Removable>1</Removable>
<Searchable>1</Searchable>
</flags>
<temporal fixedDuration="0" startField="" enabled="0" durationUnit="min" accumulate="0" mode="0" endField="" startExpression="" endExpression="" durationField="">
<fixedRange>
<start></start>
<end></end>
</fixedRange>
</temporal>
<renderer-v2 enableorderby="0" symbollevels="0" forceraster="0" type="singleSymbol">
<symbols>
<symbol name="0" clip_to_extent="1" force_rhr="0" alpha="1" type="fill">
<layer class="LinePatternFill" enabled="1" locked="0" pass="0">
<prop v="-45" k="angle"/>
<prop v="213,180,60,255" k="color"/>
<prop v="25" k="distance"/>
<prop v="3x:0,0,0,0,0,0" k="distance_map_unit_scale"/>
<prop v="Pixel" k="distance_unit"/>
<prop v="0.26" k="line_width"/>
<prop v="3x:0,0,0,0,0,0" k="line_width_map_unit_scale"/>
<prop v="MM" k="line_width_unit"/>
<prop v="0" k="offset"/>
<prop v="3x:0,0,0,0,0,0" k="offset_map_unit_scale"/>
<prop v="MM" k="offset_unit"/>
<prop v="3x:0,0,0,0,0,0" k="outline_width_map_unit_scale"/>
<prop v="MM" k="outline_width_unit"/>
<data_defined_properties>
<Option type="Map">
<Option value="" name="name" type="QString"/>
<Option name="properties"/>
<Option value="collection" name="type" type="QString"/>
</Option>
</data_defined_properties>
<symbol name="@0@0" clip_to_extent="1" force_rhr="0" alpha="1" type="line">
<layer class="SimpleLine" enabled="1" locked="0" pass="0">
<prop v="0" k="align_dash_pattern"/>
<prop v="square" k="capstyle"/>
<prop v="5;2" k="customdash"/>
<prop v="3x:0,0,0,0,0,0" k="customdash_map_unit_scale"/>
<prop v="Pixel" k="customdash_unit"/>
<prop v="0" k="dash_pattern_offset"/>
<prop v="3x:0,0,0,0,0,0" k="dash_pattern_offset_map_unit_scale"/>
<prop v="MM" k="dash_pattern_offset_unit"/>
<prop v="0" k="draw_inside_polygon"/>
<prop v="bevel" k="joinstyle"/>
<prop v="103,229,0,255" k="line_color"/>
<prop v="solid" k="line_style"/>
<prop v="2" k="line_width"/>
<prop v="Pixel" k="line_width_unit"/>
<prop v="0" k="offset"/>
<prop v="3x:0,0,0,0,0,0" k="offset_map_unit_scale"/>
<prop v="Pixel" k="offset_unit"/>
<prop v="0" k="ring_filter"/>
<prop v="0" k="tweak_dash_pattern_on_corners"/>
<prop v="0" k="use_custom_dash"/>
<prop v="3x:0,0,0,0,0,0" k="width_map_unit_scale"/>
<data_defined_properties>
<Option type="Map">
<Option value="" name="name" type="QString"/>
<Option name="properties"/>
<Option value="collection" name="type" type="QString"/>
</Option>
</data_defined_properties>
</layer>
</symbol>
</layer>
<layer class="LinePatternFill" enabled="1" locked="0" pass="0">
<prop v="45" k="angle"/>
<prop v="213,180,60,255" k="color"/>
<prop v="25" k="distance"/>
<prop v="3x:0,0,0,0,0,0" k="distance_map_unit_scale"/>
<prop v="Pixel" k="distance_unit"/>
<prop v="0.26" k="line_width"/>
<prop v="3x:0,0,0,0,0,0" k="line_width_map_unit_scale"/>
<prop v="MM" k="line_width_unit"/>
<prop v="0" k="offset"/>
<prop v="3x:0,0,0,0,0,0" k="offset_map_unit_scale"/>
<prop v="MM" k="offset_unit"/>
<prop v="3x:0,0,0,0,0,0" k="outline_width_map_unit_scale"/>
<prop v="MM" k="outline_width_unit"/>
<data_defined_properties>
<Option type="Map">
<Option value="" name="name" type="QString"/>
<Option name="properties"/>
<Option value="collection" name="type" type="QString"/>
</Option>
</data_defined_properties>
<symbol name="@0@1" clip_to_extent="1" force_rhr="0" alpha="1" type="line">
<layer class="SimpleLine" enabled="1" locked="0" pass="0">
<prop v="0" k="align_dash_pattern"/>
<prop v="square" k="capstyle"/>
<prop v="5;2" k="customdash"/>
<prop v="3x:0,0,0,0,0,0" k="customdash_map_unit_scale"/>
<prop v="Pixel" k="customdash_unit"/>
<prop v="0" k="dash_pattern_offset"/>
<prop v="3x:0,0,0,0,0,0" k="dash_pattern_offset_map_unit_scale"/>
<prop v="MM" k="dash_pattern_offset_unit"/>
<prop v="0" k="draw_inside_polygon"/>
<prop v="bevel" k="joinstyle"/>
<prop v="103,229,0,255" k="line_color"/>
<prop v="solid" k="line_style"/>
<prop v="2" k="line_width"/>
<prop v="Pixel" k="line_width_unit"/>
<prop v="0" k="offset"/>
<prop v="3x:0,0,0,0,0,0" k="offset_map_unit_scale"/>
<prop v="Pixel" k="offset_unit"/>
<prop v="0" k="ring_filter"/>
<prop v="0" k="tweak_dash_pattern_on_corners"/>
<prop v="0" k="use_custom_dash"/>
<prop v="3x:0,0,0,0,0,0" k="width_map_unit_scale"/>
<data_defined_properties>
<Option type="Map">
<Option value="" name="name" type="QString"/>
<Option name="properties"/>
<Option value="collection" name="type" type="QString"/>
</Option>
</data_defined_properties>
</layer>
</symbol>
</layer>
<layer class="SimpleLine" enabled="1" locked="0" pass="0">
<prop v="0" k="align_dash_pattern"/>
<prop v="square" k="capstyle"/>
<prop v="5;2" k="customdash"/>
<prop v="3x:0,0,0,0,0,0" k="customdash_map_unit_scale"/>
<prop v="MM" k="customdash_unit"/>
<prop v="0" k="dash_pattern_offset"/>
<prop v="3x:0,0,0,0,0,0" k="dash_pattern_offset_map_unit_scale"/>
<prop v="MM" k="dash_pattern_offset_unit"/>
<prop v="0" k="draw_inside_polygon"/>
<prop v="bevel" k="joinstyle"/>
<prop v="0,168,0,255" k="line_color"/>
<prop v="solid" k="line_style"/>
<prop v="2" k="line_width"/>
<prop v="Pixel" k="line_width_unit"/>
<prop v="0" k="offset"/>
<prop v="3x:0,0,0,0,0,0" k="offset_map_unit_scale"/>
<prop v="MM" k="offset_unit"/>
<prop v="0" k="ring_filter"/>
<prop v="0" k="tweak_dash_pattern_on_corners"/>
<prop v="0" k="use_custom_dash"/>
<prop v="3x:0,0,0,0,0,0" k="width_map_unit_scale"/>
<data_defined_properties>
<Option type="Map">
<Option value="" name="name" type="QString"/>
<Option name="properties"/>
<Option value="collection" name="type" type="QString"/>
</Option>
</data_defined_properties>
</layer>
</symbol>
</symbols>
<rotation/>
<sizescale/>
</renderer-v2>
<labeling type="simple">
<settings calloutType="simple">
<text-style fontWeight="75" fontSizeUnit="Pixel" fontSize="15" fontUnderline="0" previewBkgrdColor="255,255,255,255" multilineHeight="1" isExpression="1" textOpacity="1" textOrientation="horizontal" textColor="0,0,0,255" blendMode="0" fontSizeMapUnitScale="3x:0,0,0,0,0,0" capitalization="0" fontStrikeout="0" fontKerning="1" fontLetterSpacing="0" fontWordSpacing="0" allowHtml="0" fontItalic="0" useSubstitutions="0" fieldName=" 'FFH' || '\n' || &quot;SN_NR&quot;&#xd;&#xa; " fontFamily="Verdana" namedStyle="Bold">
<text-buffer bufferColor="255,255,255,255" bufferSize="1" bufferNoFill="1" bufferJoinStyle="128" bufferBlendMode="0" bufferSizeMapUnitScale="3x:0,0,0,0,0,0" bufferSizeUnits="MM" bufferOpacity="1" bufferDraw="0"/>
<text-mask maskEnabled="0" maskOpacity="1" maskJoinStyle="128" maskSizeUnits="MM" maskSize="1.5" maskedSymbolLayers="" maskType="0" maskSizeMapUnitScale="3x:0,0,0,0,0,0"/>
<background shapeBorderColor="128,128,128,255" shapeOffsetUnit="MM" shapeType="0" shapeSizeMapUnitScale="3x:0,0,0,0,0,0" shapeSizeX="0" shapeRotation="0" shapeSizeUnit="MM" shapeSVGFile="" shapeRadiiMapUnitScale="3x:0,0,0,0,0,0" shapeRotationType="0" shapeBorderWidthUnit="MM" shapeRadiiUnit="MM" shapeOffsetMapUnitScale="3x:0,0,0,0,0,0" shapeBorderWidth="0" shapeOpacity="1" shapeDraw="0" shapeSizeType="0" shapeRadiiX="0" shapeSizeY="0" shapeBorderWidthMapUnitScale="3x:0,0,0,0,0,0" shapeRadiiY="0" shapeJoinStyle="64" shapeOffsetX="0" shapeOffsetY="0" shapeFillColor="255,255,255,255" shapeBlendMode="0">
<symbol name="markerSymbol" clip_to_extent="1" force_rhr="0" alpha="1" type="marker">
<layer class="SimpleMarker" enabled="1" locked="0" pass="0">
<prop v="0" k="angle"/>
<prop v="232,113,141,255" k="color"/>
<prop v="1" k="horizontal_anchor_point"/>
<prop v="bevel" k="joinstyle"/>
<prop v="circle" k="name"/>
<prop v="0,0" k="offset"/>
<prop v="3x:0,0,0,0,0,0" k="offset_map_unit_scale"/>
<prop v="MM" k="offset_unit"/>
<prop v="35,35,35,255" k="outline_color"/>
<prop v="solid" k="outline_style"/>
<prop v="0" k="outline_width"/>
<prop v="3x:0,0,0,0,0,0" k="outline_width_map_unit_scale"/>
<prop v="MM" k="outline_width_unit"/>
<prop v="diameter" k="scale_method"/>
<prop v="2" k="size"/>
<prop v="3x:0,0,0,0,0,0" k="size_map_unit_scale"/>
<prop v="MM" k="size_unit"/>
<prop v="1" k="vertical_anchor_point"/>
<data_defined_properties>
<Option type="Map">
<Option value="" name="name" type="QString"/>
<Option name="properties"/>
<Option value="collection" name="type" type="QString"/>
</Option>
</data_defined_properties>
</layer>
</symbol>
</background>
<shadow shadowRadiusMapUnitScale="3x:0,0,0,0,0,0" shadowRadiusAlphaOnly="0" shadowScale="100" shadowColor="0,0,0,255" shadowOffsetAngle="135" shadowOffsetDist="1" shadowRadius="1.5" shadowRadiusUnit="MM" shadowDraw="0" shadowOffsetMapUnitScale="3x:0,0,0,0,0,0" shadowOpacity="0.7" shadowUnder="0" shadowOffsetUnit="MM" shadowOffsetGlobal="1" shadowBlendMode="6"/>
<dd_properties>
<Option type="Map">
<Option value="" name="name" type="QString"/>
<Option name="properties"/>
<Option value="collection" name="type" type="QString"/>
</Option>
</dd_properties>
<substitutions/>
</text-style>
<text-format addDirectionSymbol="0" decimals="3" plussign="0" wrapChar="" placeDirectionSymbol="0" reverseDirectionSymbol="0" autoWrapLength="0" useMaxLineLengthForAutoWrap="1" rightDirectionSymbol=">" leftDirectionSymbol="&lt;" formatNumbers="0" multilineAlign="3"/>
<placement placement="5" lineAnchorPercent="0.5" fitInPolygonOnly="0" quadOffset="5" geometryGenerator="" offsetUnits="MM" layerType="PolygonGeometry" labelOffsetMapUnitScale="3x:0,0,0,0,0,0" xOffset="0" overrunDistanceUnit="MM" overrunDistanceMapUnitScale="3x:0,0,0,0,0,0" distMapUnitScale="3x:0,0,0,0,0,0" maxCurvedCharAngleIn="25" repeatDistanceUnits="MM" geometryGeneratorEnabled="0" centroidInside="1" preserveRotation="1" priority="5" overrunDistance="0" predefinedPositionOrder="TR,TL,BR,BL,R,L,TSR,BSR" yOffset="0" placementFlags="10" offsetType="0" centroidWhole="0" distUnits="MM" dist="0" maxCurvedCharAngleOut="-25" polygonPlacementFlags="2" repeatDistance="0" repeatDistanceMapUnitScale="3x:0,0,0,0,0,0" lineAnchorType="0" rotationAngle="0" geometryGeneratorType="PointGeometry"/>
<rendering minFeatureSize="0" displayAll="0" obstacleFactor="1" mergeLines="0" fontLimitPixelSize="0" zIndex="0" scaleVisibility="0" labelPerPart="0" scaleMax="0" drawLabels="1" obstacleType="1" limitNumLabels="0" scaleMin="0" fontMaxPixelSize="10000" upsidedownLabels="0" fontMinPixelSize="3" obstacle="1" maxNumLabels="2000"/>
<dd_properties>
<Option type="Map">
<Option value="" name="name" type="QString"/>
<Option name="properties"/>
<Option value="collection" name="type" type="QString"/>
</Option>
</dd_properties>
<callout type="simple">
<Option type="Map">
<Option value="pole_of_inaccessibility" name="anchorPoint" type="QString"/>
<Option name="ddProperties" type="Map">
<Option value="" name="name" type="QString"/>
<Option name="properties"/>
<Option value="collection" name="type" type="QString"/>
</Option>
<Option value="false" name="drawToAllParts" type="bool"/>
<Option value="0" name="enabled" type="QString"/>
<Option value="point_on_exterior" name="labelAnchorPoint" type="QString"/>
<Option value="&lt;symbol name=&quot;symbol&quot; clip_to_extent=&quot;1&quot; force_rhr=&quot;0&quot; alpha=&quot;1&quot; type=&quot;line&quot;>&lt;layer class=&quot;SimpleLine&quot; enabled=&quot;1&quot; locked=&quot;0&quot; pass=&quot;0&quot;>&lt;prop v=&quot;0&quot; k=&quot;align_dash_pattern&quot;/>&lt;prop v=&quot;square&quot; k=&quot;capstyle&quot;/>&lt;prop v=&quot;5;2&quot; k=&quot;customdash&quot;/>&lt;prop v=&quot;3x:0,0,0,0,0,0&quot; k=&quot;customdash_map_unit_scale&quot;/>&lt;prop v=&quot;MM&quot; k=&quot;customdash_unit&quot;/>&lt;prop v=&quot;0&quot; k=&quot;dash_pattern_offset&quot;/>&lt;prop v=&quot;3x:0,0,0,0,0,0&quot; k=&quot;dash_pattern_offset_map_unit_scale&quot;/>&lt;prop v=&quot;MM&quot; k=&quot;dash_pattern_offset_unit&quot;/>&lt;prop v=&quot;0&quot; k=&quot;draw_inside_polygon&quot;/>&lt;prop v=&quot;bevel&quot; k=&quot;joinstyle&quot;/>&lt;prop v=&quot;60,60,60,255&quot; k=&quot;line_color&quot;/>&lt;prop v=&quot;solid&quot; k=&quot;line_style&quot;/>&lt;prop v=&quot;0.3&quot; k=&quot;line_width&quot;/>&lt;prop v=&quot;MM&quot; k=&quot;line_width_unit&quot;/>&lt;prop v=&quot;0&quot; k=&quot;offset&quot;/>&lt;prop v=&quot;3x:0,0,0,0,0,0&quot; k=&quot;offset_map_unit_scale&quot;/>&lt;prop v=&quot;MM&quot; k=&quot;offset_unit&quot;/>&lt;prop v=&quot;0&quot; k=&quot;ring_filter&quot;/>&lt;prop v=&quot;0&quot; k=&quot;tweak_dash_pattern_on_corners&quot;/>&lt;prop v=&quot;0&quot; k=&quot;use_custom_dash&quot;/>&lt;prop v=&quot;3x:0,0,0,0,0,0&quot; k=&quot;width_map_unit_scale&quot;/>&lt;data_defined_properties>&lt;Option type=&quot;Map&quot;>&lt;Option value=&quot;&quot; name=&quot;name&quot; type=&quot;QString&quot;/>&lt;Option name=&quot;properties&quot;/>&lt;Option value=&quot;collection&quot; name=&quot;type&quot; type=&quot;QString&quot;/>&lt;/Option>&lt;/data_defined_properties>&lt;/layer>&lt;/symbol>" name="lineSymbol" type="QString"/>
<Option value="0" name="minLength" type="double"/>
<Option value="3x:0,0,0,0,0,0" name="minLengthMapUnitScale" type="QString"/>
<Option value="MM" name="minLengthUnit" type="QString"/>
<Option value="0" name="offsetFromAnchor" type="double"/>
<Option value="3x:0,0,0,0,0,0" name="offsetFromAnchorMapUnitScale" type="QString"/>
<Option value="MM" name="offsetFromAnchorUnit" type="QString"/>
<Option value="0" name="offsetFromLabel" type="double"/>
<Option value="3x:0,0,0,0,0,0" name="offsetFromLabelMapUnitScale" type="QString"/>
<Option value="MM" name="offsetFromLabelUnit" type="QString"/>
</Option>
</callout>
</settings>
</labeling>
<customproperties>
<property key="embeddedWidgets/count" value="0"/>
<property key="variableNames"/>
<property key="variableValues"/>
</customproperties>
<blendMode>0</blendMode>
<featureBlendMode>0</featureBlendMode>
<layerOpacity>1</layerOpacity>
<SingleCategoryDiagramRenderer diagramType="Histogram" attributeLegend="1">
<DiagramCategory height="15" enabled="0" sizeScale="3x:0,0,0,0,0,0" direction="0" penColor="#000000" opacity="1" labelPlacementMethod="XHeight" lineSizeType="MM" diagramOrientation="Up" backgroundColor="#ffffff" spacing="5" maxScaleDenominator="1e+08" scaleDependency="Area" sizeType="MM" barWidth="5" scaleBasedVisibility="0" spacingUnit="MM" minScaleDenominator="0" spacingUnitScale="3x:0,0,0,0,0,0" minimumSize="0" rotationOffset="270" backgroundAlpha="255" showAxis="1" penWidth="0" width="15" lineSizeScale="3x:0,0,0,0,0,0" penAlpha="255">
<fontProperties style="" description="MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0"/>
<axisSymbol>
<symbol name="" clip_to_extent="1" force_rhr="0" alpha="1" type="line">
<layer class="SimpleLine" enabled="1" locked="0" pass="0">
<prop v="0" k="align_dash_pattern"/>
<prop v="square" k="capstyle"/>
<prop v="5;2" k="customdash"/>
<prop v="3x:0,0,0,0,0,0" k="customdash_map_unit_scale"/>
<prop v="MM" k="customdash_unit"/>
<prop v="0" k="dash_pattern_offset"/>
<prop v="3x:0,0,0,0,0,0" k="dash_pattern_offset_map_unit_scale"/>
<prop v="MM" k="dash_pattern_offset_unit"/>
<prop v="0" k="draw_inside_polygon"/>
<prop v="bevel" k="joinstyle"/>
<prop v="35,35,35,255" k="line_color"/>
<prop v="solid" k="line_style"/>
<prop v="0.26" k="line_width"/>
<prop v="MM" k="line_width_unit"/>
<prop v="0" k="offset"/>
<prop v="3x:0,0,0,0,0,0" k="offset_map_unit_scale"/>
<prop v="MM" k="offset_unit"/>
<prop v="0" k="ring_filter"/>
<prop v="0" k="tweak_dash_pattern_on_corners"/>
<prop v="0" k="use_custom_dash"/>
<prop v="3x:0,0,0,0,0,0" k="width_map_unit_scale"/>
<data_defined_properties>
<Option type="Map">
<Option value="" name="name" type="QString"/>
<Option name="properties"/>
<Option value="collection" name="type" type="QString"/>
</Option>
</data_defined_properties>
</layer>
</symbol>
</axisSymbol>
</DiagramCategory>
</SingleCategoryDiagramRenderer>
<DiagramLayerSettings priority="0" placement="1" linePlacementFlags="18" obstacle="0" showAll="1" zIndex="0" dist="0">
<properties>
<Option type="Map">
<Option value="" name="name" type="QString"/>
<Option name="properties"/>
<Option value="collection" name="type" type="QString"/>
</Option>
</properties>
</DiagramLayerSettings>
<geometryOptions removeDuplicateNodes="0" geometryPrecision="0">
<activeChecks/>
<checkConfiguration type="Map">
<Option name="QgsGeometryGapCheck" type="Map">
<Option value="0" name="allowedGapsBuffer" type="double"/>
<Option value="false" name="allowedGapsEnabled" type="bool"/>
<Option value="" name="allowedGapsLayer" type="QString"/>
</Option>
</checkConfiguration>
</geometryOptions>
<legend type="default-vector"/>
<referencedLayers/>
<fieldConfiguration>
<field configurationFlags="None" name="OBJECTID">
<editWidget type="Range">
<config>
<Option/>
</config>
</editWidget>
</field>
<field configurationFlags="None" name="AREA">
<editWidget type="TextEdit">
<config>
<Option/>
</config>
</editWidget>
</field>
<field configurationFlags="None" name="PERIMETER">
<editWidget type="TextEdit">
<config>
<Option/>
</config>
</editWidget>
</field>
<field configurationFlags="None" name="TEILFL_BEZ">
<editWidget type="TextEdit">
<config>
<Option/>
</config>
</editWidget>
</field>
<field configurationFlags="None" name="INFO">
<editWidget type="TextEdit">
<config>
<Option/>
</config>
</editWidget>
</field>
<field configurationFlags="None" name="TEILFL">
<editWidget type="TextEdit">
<config>
<Option/>
</config>
</editWidget>
</field>
<field configurationFlags="None" name="EU_NR">
<editWidget type="TextEdit">
<config>
<Option/>
</config>
</editWidget>
</field>
<field configurationFlags="None" name="SN_NR">
<editWidget type="TextEdit">
<config>
<Option/>
</config>
</editWidget>
</field>
<field configurationFlags="None" name="GEBIET">
<editWidget type="TextEdit">
<config>
<Option/>
</config>
</editWidget>
</field>
<field configurationFlags="None" name="MELDEFLAEC">
<editWidget type="TextEdit">
<config>
<Option/>
</config>
</editWidget>
</field>
<field configurationFlags="None" name="LEGENDE">
<editWidget type="TextEdit">
<config>
<Option/>
</config>
</editWidget>
</field>
<field configurationFlags="None" name="ERFASSUNG">
<editWidget type="TextEdit">
<config>
<Option/>
</config>
</editWidget>
</field>
<field configurationFlags="None" name="RECHTS_GL">
<editWidget type="TextEdit">
<config>
<Option/>
</config>
</editWidget>
</field>
<field configurationFlags="None" name="SHAPE.AREA">
<editWidget type="TextEdit">
<config>
<Option/>
</config>
</editWidget>
</field>
<field configurationFlags="None" name="SHAPE.LEN">
<editWidget type="TextEdit">
<config>
<Option/>
</config>
</editWidget>
</field>
</fieldConfiguration>
<aliases>
<alias name="" index="0" field="OBJECTID"/>
<alias name="" index="1" field="AREA"/>
<alias name="" index="2" field="PERIMETER"/>
<alias name="" index="3" field="TEILFL_BEZ"/>
<alias name="" index="4" field="INFO"/>
<alias name="" index="5" field="TEILFL"/>
<alias name="" index="6" field="EU_NR"/>
<alias name="" index="7" field="SN_NR"/>
<alias name="" index="8" field="GEBIET"/>
<alias name="" index="9" field="MELDEFLAEC"/>
<alias name="" index="10" field="LEGENDE"/>
<alias name="" index="11" field="ERFASSUNG"/>
<alias name="" index="12" field="RECHTS_GL"/>
<alias name="" index="13" field="SHAPE.AREA"/>
<alias name="" index="14" field="SHAPE.LEN"/>
</aliases>
<defaults>
<default expression="" applyOnUpdate="0" field="OBJECTID"/>
<default expression="" applyOnUpdate="0" field="AREA"/>
<default expression="" applyOnUpdate="0" field="PERIMETER"/>
<default expression="" applyOnUpdate="0" field="TEILFL_BEZ"/>
<default expression="" applyOnUpdate="0" field="INFO"/>
<default expression="" applyOnUpdate="0" field="TEILFL"/>
<default expression="" applyOnUpdate="0" field="EU_NR"/>
<default expression="" applyOnUpdate="0" field="SN_NR"/>
<default expression="" applyOnUpdate="0" field="GEBIET"/>
<default expression="" applyOnUpdate="0" field="MELDEFLAEC"/>
<default expression="" applyOnUpdate="0" field="LEGENDE"/>
<default expression="" applyOnUpdate="0" field="ERFASSUNG"/>
<default expression="" applyOnUpdate="0" field="RECHTS_GL"/>
<default expression="" applyOnUpdate="0" field="SHAPE.AREA"/>
<default expression="" applyOnUpdate="0" field="SHAPE.LEN"/>
</defaults>
<constraints>
<constraint exp_strength="0" unique_strength="0" notnull_strength="0" constraints="0" field="OBJECTID"/>
<constraint exp_strength="0" unique_strength="0" notnull_strength="0" constraints="0" field="AREA"/>
<constraint exp_strength="0" unique_strength="0" notnull_strength="0" constraints="0" field="PERIMETER"/>
<constraint exp_strength="0" unique_strength="0" notnull_strength="0" constraints="0" field="TEILFL_BEZ"/>
<constraint exp_strength="0" unique_strength="0" notnull_strength="0" constraints="0" field="INFO"/>
<constraint exp_strength="0" unique_strength="0" notnull_strength="0" constraints="0" field="TEILFL"/>
<constraint exp_strength="0" unique_strength="0" notnull_strength="0" constraints="0" field="EU_NR"/>
<constraint exp_strength="0" unique_strength="0" notnull_strength="0" constraints="0" field="SN_NR"/>
<constraint exp_strength="0" unique_strength="0" notnull_strength="0" constraints="0" field="GEBIET"/>
<constraint exp_strength="0" unique_strength="0" notnull_strength="0" constraints="0" field="MELDEFLAEC"/>
<constraint exp_strength="0" unique_strength="0" notnull_strength="0" constraints="0" field="LEGENDE"/>
<constraint exp_strength="0" unique_strength="0" notnull_strength="0" constraints="0" field="ERFASSUNG"/>
<constraint exp_strength="0" unique_strength="0" notnull_strength="0" constraints="0" field="RECHTS_GL"/>
<constraint exp_strength="0" unique_strength="0" notnull_strength="0" constraints="0" field="SHAPE.AREA"/>
<constraint exp_strength="0" unique_strength="0" notnull_strength="0" constraints="0" field="SHAPE.LEN"/>
</constraints>
<constraintExpressions>
<constraint exp="" desc="" field="OBJECTID"/>
<constraint exp="" desc="" field="AREA"/>
<constraint exp="" desc="" field="PERIMETER"/>
<constraint exp="" desc="" field="TEILFL_BEZ"/>
<constraint exp="" desc="" field="INFO"/>
<constraint exp="" desc="" field="TEILFL"/>
<constraint exp="" desc="" field="EU_NR"/>
<constraint exp="" desc="" field="SN_NR"/>
<constraint exp="" desc="" field="GEBIET"/>
<constraint exp="" desc="" field="MELDEFLAEC"/>
<constraint exp="" desc="" field="LEGENDE"/>
<constraint exp="" desc="" field="ERFASSUNG"/>
<constraint exp="" desc="" field="RECHTS_GL"/>
<constraint exp="" desc="" field="SHAPE.AREA"/>
<constraint exp="" desc="" field="SHAPE.LEN"/>
</constraintExpressions>
<expressionfields/>
<attributeactions>
<defaultAction key="Canvas" value="{00000000-0000-0000-0000-000000000000}"/>
</attributeactions>
<attributetableconfig sortExpression="" actionWidgetStyle="dropDown" sortOrder="0">
<columns>
<column name="OBJECTID" width="-1" hidden="0" type="field"/>
<column name="AREA" width="-1" hidden="0" type="field"/>
<column name="PERIMETER" width="-1" hidden="0" type="field"/>
<column name="TEILFL_BEZ" width="-1" hidden="0" type="field"/>
<column name="INFO" width="-1" hidden="0" type="field"/>
<column name="TEILFL" width="-1" hidden="0" type="field"/>
<column name="EU_NR" width="-1" hidden="0" type="field"/>
<column name="SN_NR" width="-1" hidden="0" type="field"/>
<column name="GEBIET" width="-1" hidden="0" type="field"/>
<column name="MELDEFLAEC" width="-1" hidden="0" type="field"/>
<column name="LEGENDE" width="-1" hidden="0" type="field"/>
<column name="ERFASSUNG" width="-1" hidden="0" type="field"/>
<column name="RECHTS_GL" width="-1" hidden="0" type="field"/>
<column name="SHAPE.AREA" width="-1" hidden="0" type="field"/>
<column name="SHAPE.LEN" width="-1" hidden="0" type="field"/>
<column width="-1" hidden="1" type="actions"/>
</columns>
</attributetableconfig>
<conditionalstyles>
<rowstyles/>
<fieldstyles/>
</conditionalstyles>
<storedexpressions/>
<editform tolerant="1"></editform>
<editforminit/>
<editforminitcodesource>0</editforminitcodesource>
<editforminitfilepath></editforminitfilepath>
<editforminitcode><![CDATA[# -*- coding: utf-8 -*-
"""
QGIS forms can have a Python function that is called when the form is
opened.
Use this function to add extra logic to your forms.
Enter the name of the function in the "Python Init function"
field.
An example follows:
"""
from qgis.PyQt.QtWidgets import QWidget
def my_form_open(dialog, layer, feature):
geom = feature.geometry()
control = dialog.findChild(QWidget, "MyLineEdit")
]]></editforminitcode>
<featformsuppress>0</featformsuppress>
<editorlayout>generatedlayout</editorlayout>
<editable>
<field name="AREA" editable="1"/>
<field name="ERFASSUNG" editable="1"/>
<field name="EU_NR" editable="1"/>
<field name="GEBIET" editable="1"/>
<field name="INFO" editable="1"/>
<field name="LEGENDE" editable="1"/>
<field name="MELDEFLAEC" editable="1"/>
<field name="OBJECTID" editable="1"/>
<field name="PERIMETER" editable="1"/>
<field name="RECHTS_GL" editable="1"/>
<field name="SHAPE.AREA" editable="1"/>
<field name="SHAPE.LEN" editable="1"/>
<field name="SN_NR" editable="1"/>
<field name="TEILFL" editable="1"/>
<field name="TEILFL_BEZ" editable="1"/>
</editable>
<labelOnTop>
<field name="AREA" labelOnTop="0"/>
<field name="ERFASSUNG" labelOnTop="0"/>
<field name="EU_NR" labelOnTop="0"/>
<field name="GEBIET" labelOnTop="0"/>
<field name="INFO" labelOnTop="0"/>
<field name="LEGENDE" labelOnTop="0"/>
<field name="MELDEFLAEC" labelOnTop="0"/>
<field name="OBJECTID" labelOnTop="0"/>
<field name="PERIMETER" labelOnTop="0"/>
<field name="RECHTS_GL" labelOnTop="0"/>
<field name="SHAPE.AREA" labelOnTop="0"/>
<field name="SHAPE.LEN" labelOnTop="0"/>
<field name="SN_NR" labelOnTop="0"/>
<field name="TEILFL" labelOnTop="0"/>
<field name="TEILFL_BEZ" labelOnTop="0"/>
</labelOnTop>
<dataDefinedFieldProperties/>
<widgets/>
<previewExpression>"OBJECTID"</previewExpression>
<mapTip></mapTip>
<layerGeometryType>2</layerGeometryType>
</qgis>

View File

@@ -0,0 +1,536 @@
<!DOCTYPE qgis PUBLIC 'http://mrcc.com/qgis.dtd' 'SYSTEM'>
<qgis simplifyAlgorithm="0" simplifyDrawingTol="1" styleCategories="AllStyleCategories" labelsEnabled="1" simplifyLocal="1" version="3.16.0-Hannover" simplifyMaxScale="1" minScale="100000000" readOnly="0" hasScaleBasedVisibilityFlag="0" maxScale="0" simplifyDrawingHints="1">
<flags>
<Identifiable>1</Identifiable>
<Removable>1</Removable>
<Searchable>1</Searchable>
</flags>
<temporal fixedDuration="0" startField="" enabled="0" durationUnit="min" accumulate="0" mode="0" endField="" startExpression="" endExpression="" durationField="">
<fixedRange>
<start></start>
<end></end>
</fixedRange>
</temporal>
<renderer-v2 enableorderby="0" symbollevels="0" forceraster="0" type="singleSymbol">
<symbols>
<symbol name="0" clip_to_extent="1" force_rhr="0" alpha="1" type="fill">
<layer class="LinePatternFill" enabled="1" locked="0" pass="0">
<prop v="-45" k="angle"/>
<prop v="213,180,60,255" k="color"/>
<prop v="25" k="distance"/>
<prop v="3x:0,0,0,0,0,0" k="distance_map_unit_scale"/>
<prop v="Pixel" k="distance_unit"/>
<prop v="0.26" k="line_width"/>
<prop v="3x:0,0,0,0,0,0" k="line_width_map_unit_scale"/>
<prop v="MM" k="line_width_unit"/>
<prop v="0" k="offset"/>
<prop v="3x:0,0,0,0,0,0" k="offset_map_unit_scale"/>
<prop v="MM" k="offset_unit"/>
<prop v="3x:0,0,0,0,0,0" k="outline_width_map_unit_scale"/>
<prop v="MM" k="outline_width_unit"/>
<data_defined_properties>
<Option type="Map">
<Option value="" name="name" type="QString"/>
<Option name="properties"/>
<Option value="collection" name="type" type="QString"/>
</Option>
</data_defined_properties>
<symbol name="@0@0" clip_to_extent="1" force_rhr="0" alpha="1" type="line">
<layer class="SimpleLine" enabled="1" locked="0" pass="0">
<prop v="0" k="align_dash_pattern"/>
<prop v="square" k="capstyle"/>
<prop v="5;2" k="customdash"/>
<prop v="3x:0,0,0,0,0,0" k="customdash_map_unit_scale"/>
<prop v="Pixel" k="customdash_unit"/>
<prop v="0" k="dash_pattern_offset"/>
<prop v="3x:0,0,0,0,0,0" k="dash_pattern_offset_map_unit_scale"/>
<prop v="MM" k="dash_pattern_offset_unit"/>
<prop v="0" k="draw_inside_polygon"/>
<prop v="bevel" k="joinstyle"/>
<prop v="103,229,0,255" k="line_color"/>
<prop v="solid" k="line_style"/>
<prop v="2" k="line_width"/>
<prop v="Pixel" k="line_width_unit"/>
<prop v="0" k="offset"/>
<prop v="3x:0,0,0,0,0,0" k="offset_map_unit_scale"/>
<prop v="Pixel" k="offset_unit"/>
<prop v="0" k="ring_filter"/>
<prop v="0" k="tweak_dash_pattern_on_corners"/>
<prop v="0" k="use_custom_dash"/>
<prop v="3x:0,0,0,0,0,0" k="width_map_unit_scale"/>
<data_defined_properties>
<Option type="Map">
<Option value="" name="name" type="QString"/>
<Option name="properties"/>
<Option value="collection" name="type" type="QString"/>
</Option>
</data_defined_properties>
</layer>
</symbol>
</layer>
<layer class="LinePatternFill" enabled="1" locked="0" pass="0">
<prop v="45" k="angle"/>
<prop v="213,180,60,255" k="color"/>
<prop v="25" k="distance"/>
<prop v="3x:0,0,0,0,0,0" k="distance_map_unit_scale"/>
<prop v="Pixel" k="distance_unit"/>
<prop v="0.26" k="line_width"/>
<prop v="3x:0,0,0,0,0,0" k="line_width_map_unit_scale"/>
<prop v="MM" k="line_width_unit"/>
<prop v="0" k="offset"/>
<prop v="3x:0,0,0,0,0,0" k="offset_map_unit_scale"/>
<prop v="MM" k="offset_unit"/>
<prop v="3x:0,0,0,0,0,0" k="outline_width_map_unit_scale"/>
<prop v="MM" k="outline_width_unit"/>
<data_defined_properties>
<Option type="Map">
<Option value="" name="name" type="QString"/>
<Option name="properties"/>
<Option value="collection" name="type" type="QString"/>
</Option>
</data_defined_properties>
<symbol name="@0@1" clip_to_extent="1" force_rhr="0" alpha="1" type="line">
<layer class="SimpleLine" enabled="1" locked="0" pass="0">
<prop v="0" k="align_dash_pattern"/>
<prop v="square" k="capstyle"/>
<prop v="5;2" k="customdash"/>
<prop v="3x:0,0,0,0,0,0" k="customdash_map_unit_scale"/>
<prop v="Pixel" k="customdash_unit"/>
<prop v="0" k="dash_pattern_offset"/>
<prop v="3x:0,0,0,0,0,0" k="dash_pattern_offset_map_unit_scale"/>
<prop v="MM" k="dash_pattern_offset_unit"/>
<prop v="0" k="draw_inside_polygon"/>
<prop v="bevel" k="joinstyle"/>
<prop v="103,229,0,255" k="line_color"/>
<prop v="solid" k="line_style"/>
<prop v="2" k="line_width"/>
<prop v="Pixel" k="line_width_unit"/>
<prop v="0" k="offset"/>
<prop v="3x:0,0,0,0,0,0" k="offset_map_unit_scale"/>
<prop v="Pixel" k="offset_unit"/>
<prop v="0" k="ring_filter"/>
<prop v="0" k="tweak_dash_pattern_on_corners"/>
<prop v="0" k="use_custom_dash"/>
<prop v="3x:0,0,0,0,0,0" k="width_map_unit_scale"/>
<data_defined_properties>
<Option type="Map">
<Option value="" name="name" type="QString"/>
<Option name="properties"/>
<Option value="collection" name="type" type="QString"/>
</Option>
</data_defined_properties>
</layer>
</symbol>
</layer>
<layer class="SimpleLine" enabled="1" locked="0" pass="0">
<prop v="0" k="align_dash_pattern"/>
<prop v="square" k="capstyle"/>
<prop v="5;2" k="customdash"/>
<prop v="3x:0,0,0,0,0,0" k="customdash_map_unit_scale"/>
<prop v="MM" k="customdash_unit"/>
<prop v="0" k="dash_pattern_offset"/>
<prop v="3x:0,0,0,0,0,0" k="dash_pattern_offset_map_unit_scale"/>
<prop v="MM" k="dash_pattern_offset_unit"/>
<prop v="0" k="draw_inside_polygon"/>
<prop v="bevel" k="joinstyle"/>
<prop v="0,168,0,255" k="line_color"/>
<prop v="solid" k="line_style"/>
<prop v="2" k="line_width"/>
<prop v="Pixel" k="line_width_unit"/>
<prop v="0" k="offset"/>
<prop v="3x:0,0,0,0,0,0" k="offset_map_unit_scale"/>
<prop v="MM" k="offset_unit"/>
<prop v="0" k="ring_filter"/>
<prop v="0" k="tweak_dash_pattern_on_corners"/>
<prop v="0" k="use_custom_dash"/>
<prop v="3x:0,0,0,0,0,0" k="width_map_unit_scale"/>
<data_defined_properties>
<Option type="Map">
<Option value="" name="name" type="QString"/>
<Option name="properties"/>
<Option value="collection" name="type" type="QString"/>
</Option>
</data_defined_properties>
</layer>
</symbol>
</symbols>
<rotation/>
<sizescale/>
</renderer-v2>
<labeling type="simple">
<settings calloutType="simple">
<text-style fontWeight="75" fontSizeUnit="Pixel" fontSize="15" fontUnderline="0" previewBkgrdColor="255,255,255,255" multilineHeight="1" isExpression="1" textOpacity="1" textOrientation="horizontal" textColor="0,0,0,255" blendMode="0" fontSizeMapUnitScale="3x:0,0,0,0,0,0" capitalization="0" fontStrikeout="0" fontKerning="1" fontLetterSpacing="0" fontWordSpacing="0" allowHtml="0" fontItalic="0" useSubstitutions="0" fieldName="'SPA' || '\n' || &quot;LANDINT_NR&quot;" fontFamily="Verdana" namedStyle="Bold">
<text-buffer bufferColor="255,255,255,255" bufferSize="1" bufferNoFill="1" bufferJoinStyle="128" bufferBlendMode="0" bufferSizeMapUnitScale="3x:0,0,0,0,0,0" bufferSizeUnits="MM" bufferOpacity="1" bufferDraw="0"/>
<text-mask maskEnabled="0" maskOpacity="1" maskJoinStyle="128" maskSizeUnits="MM" maskSize="1.5" maskedSymbolLayers="" maskType="0" maskSizeMapUnitScale="3x:0,0,0,0,0,0"/>
<background shapeBorderColor="128,128,128,255" shapeOffsetUnit="MM" shapeType="0" shapeSizeMapUnitScale="3x:0,0,0,0,0,0" shapeSizeX="0" shapeRotation="0" shapeSizeUnit="MM" shapeSVGFile="" shapeRadiiMapUnitScale="3x:0,0,0,0,0,0" shapeRotationType="0" shapeBorderWidthUnit="MM" shapeRadiiUnit="MM" shapeOffsetMapUnitScale="3x:0,0,0,0,0,0" shapeBorderWidth="0" shapeOpacity="1" shapeDraw="0" shapeSizeType="0" shapeRadiiX="0" shapeSizeY="0" shapeBorderWidthMapUnitScale="3x:0,0,0,0,0,0" shapeRadiiY="0" shapeJoinStyle="64" shapeOffsetX="0" shapeOffsetY="0" shapeFillColor="255,255,255,255" shapeBlendMode="0">
<symbol name="markerSymbol" clip_to_extent="1" force_rhr="0" alpha="1" type="marker">
<layer class="SimpleMarker" enabled="1" locked="0" pass="0">
<prop v="0" k="angle"/>
<prop v="243,166,178,255" k="color"/>
<prop v="1" k="horizontal_anchor_point"/>
<prop v="bevel" k="joinstyle"/>
<prop v="circle" k="name"/>
<prop v="0,0" k="offset"/>
<prop v="3x:0,0,0,0,0,0" k="offset_map_unit_scale"/>
<prop v="MM" k="offset_unit"/>
<prop v="35,35,35,255" k="outline_color"/>
<prop v="solid" k="outline_style"/>
<prop v="0" k="outline_width"/>
<prop v="3x:0,0,0,0,0,0" k="outline_width_map_unit_scale"/>
<prop v="MM" k="outline_width_unit"/>
<prop v="diameter" k="scale_method"/>
<prop v="2" k="size"/>
<prop v="3x:0,0,0,0,0,0" k="size_map_unit_scale"/>
<prop v="MM" k="size_unit"/>
<prop v="1" k="vertical_anchor_point"/>
<data_defined_properties>
<Option type="Map">
<Option value="" name="name" type="QString"/>
<Option name="properties"/>
<Option value="collection" name="type" type="QString"/>
</Option>
</data_defined_properties>
</layer>
</symbol>
</background>
<shadow shadowRadiusMapUnitScale="3x:0,0,0,0,0,0" shadowRadiusAlphaOnly="0" shadowScale="100" shadowColor="0,0,0,255" shadowOffsetAngle="135" shadowOffsetDist="1" shadowRadius="1.5" shadowRadiusUnit="MM" shadowDraw="0" shadowOffsetMapUnitScale="3x:0,0,0,0,0,0" shadowOpacity="0.7" shadowUnder="0" shadowOffsetUnit="MM" shadowOffsetGlobal="1" shadowBlendMode="6"/>
<dd_properties>
<Option type="Map">
<Option value="" name="name" type="QString"/>
<Option name="properties"/>
<Option value="collection" name="type" type="QString"/>
</Option>
</dd_properties>
<substitutions/>
</text-style>
<text-format addDirectionSymbol="0" decimals="3" plussign="0" wrapChar="" placeDirectionSymbol="0" reverseDirectionSymbol="0" autoWrapLength="0" useMaxLineLengthForAutoWrap="1" rightDirectionSymbol=">" leftDirectionSymbol="&lt;" formatNumbers="0" multilineAlign="3"/>
<placement placement="5" lineAnchorPercent="0.5" fitInPolygonOnly="0" quadOffset="4" geometryGenerator="" offsetUnits="MM" layerType="PolygonGeometry" labelOffsetMapUnitScale="3x:0,0,0,0,0,0" xOffset="0" overrunDistanceUnit="MM" overrunDistanceMapUnitScale="3x:0,0,0,0,0,0" distMapUnitScale="3x:0,0,0,0,0,0" maxCurvedCharAngleIn="25" repeatDistanceUnits="MM" geometryGeneratorEnabled="0" centroidInside="1" preserveRotation="1" priority="5" overrunDistance="0" predefinedPositionOrder="TR,TL,BR,BL,R,L,TSR,BSR" yOffset="0" placementFlags="10" offsetType="0" centroidWhole="0" distUnits="MM" dist="0" maxCurvedCharAngleOut="-25" polygonPlacementFlags="2" repeatDistance="0" repeatDistanceMapUnitScale="3x:0,0,0,0,0,0" lineAnchorType="0" rotationAngle="0" geometryGeneratorType="PointGeometry"/>
<rendering minFeatureSize="0" displayAll="0" obstacleFactor="1" mergeLines="0" fontLimitPixelSize="0" zIndex="0" scaleVisibility="0" labelPerPart="0" scaleMax="0" drawLabels="1" obstacleType="1" limitNumLabels="0" scaleMin="0" fontMaxPixelSize="10000" upsidedownLabels="0" fontMinPixelSize="3" obstacle="1" maxNumLabels="2000"/>
<dd_properties>
<Option type="Map">
<Option value="" name="name" type="QString"/>
<Option name="properties"/>
<Option value="collection" name="type" type="QString"/>
</Option>
</dd_properties>
<callout type="simple">
<Option type="Map">
<Option value="pole_of_inaccessibility" name="anchorPoint" type="QString"/>
<Option name="ddProperties" type="Map">
<Option value="" name="name" type="QString"/>
<Option name="properties"/>
<Option value="collection" name="type" type="QString"/>
</Option>
<Option value="false" name="drawToAllParts" type="bool"/>
<Option value="0" name="enabled" type="QString"/>
<Option value="point_on_exterior" name="labelAnchorPoint" type="QString"/>
<Option value="&lt;symbol name=&quot;symbol&quot; clip_to_extent=&quot;1&quot; force_rhr=&quot;0&quot; alpha=&quot;1&quot; type=&quot;line&quot;>&lt;layer class=&quot;SimpleLine&quot; enabled=&quot;1&quot; locked=&quot;0&quot; pass=&quot;0&quot;>&lt;prop v=&quot;0&quot; k=&quot;align_dash_pattern&quot;/>&lt;prop v=&quot;square&quot; k=&quot;capstyle&quot;/>&lt;prop v=&quot;5;2&quot; k=&quot;customdash&quot;/>&lt;prop v=&quot;3x:0,0,0,0,0,0&quot; k=&quot;customdash_map_unit_scale&quot;/>&lt;prop v=&quot;MM&quot; k=&quot;customdash_unit&quot;/>&lt;prop v=&quot;0&quot; k=&quot;dash_pattern_offset&quot;/>&lt;prop v=&quot;3x:0,0,0,0,0,0&quot; k=&quot;dash_pattern_offset_map_unit_scale&quot;/>&lt;prop v=&quot;MM&quot; k=&quot;dash_pattern_offset_unit&quot;/>&lt;prop v=&quot;0&quot; k=&quot;draw_inside_polygon&quot;/>&lt;prop v=&quot;bevel&quot; k=&quot;joinstyle&quot;/>&lt;prop v=&quot;60,60,60,255&quot; k=&quot;line_color&quot;/>&lt;prop v=&quot;solid&quot; k=&quot;line_style&quot;/>&lt;prop v=&quot;0.3&quot; k=&quot;line_width&quot;/>&lt;prop v=&quot;MM&quot; k=&quot;line_width_unit&quot;/>&lt;prop v=&quot;0&quot; k=&quot;offset&quot;/>&lt;prop v=&quot;3x:0,0,0,0,0,0&quot; k=&quot;offset_map_unit_scale&quot;/>&lt;prop v=&quot;MM&quot; k=&quot;offset_unit&quot;/>&lt;prop v=&quot;0&quot; k=&quot;ring_filter&quot;/>&lt;prop v=&quot;0&quot; k=&quot;tweak_dash_pattern_on_corners&quot;/>&lt;prop v=&quot;0&quot; k=&quot;use_custom_dash&quot;/>&lt;prop v=&quot;3x:0,0,0,0,0,0&quot; k=&quot;width_map_unit_scale&quot;/>&lt;data_defined_properties>&lt;Option type=&quot;Map&quot;>&lt;Option value=&quot;&quot; name=&quot;name&quot; type=&quot;QString&quot;/>&lt;Option name=&quot;properties&quot;/>&lt;Option value=&quot;collection&quot; name=&quot;type&quot; type=&quot;QString&quot;/>&lt;/Option>&lt;/data_defined_properties>&lt;/layer>&lt;/symbol>" name="lineSymbol" type="QString"/>
<Option value="0" name="minLength" type="double"/>
<Option value="3x:0,0,0,0,0,0" name="minLengthMapUnitScale" type="QString"/>
<Option value="MM" name="minLengthUnit" type="QString"/>
<Option value="0" name="offsetFromAnchor" type="double"/>
<Option value="3x:0,0,0,0,0,0" name="offsetFromAnchorMapUnitScale" type="QString"/>
<Option value="MM" name="offsetFromAnchorUnit" type="QString"/>
<Option value="0" name="offsetFromLabel" type="double"/>
<Option value="3x:0,0,0,0,0,0" name="offsetFromLabelMapUnitScale" type="QString"/>
<Option value="MM" name="offsetFromLabelUnit" type="QString"/>
</Option>
</callout>
</settings>
</labeling>
<customproperties>
<property key="dualview/previewExpressions">
<value>"OBJECTID_1"</value>
</property>
<property key="embeddedWidgets/count" value="0"/>
<property key="variableNames"/>
<property key="variableValues"/>
</customproperties>
<blendMode>0</blendMode>
<featureBlendMode>0</featureBlendMode>
<layerOpacity>1</layerOpacity>
<SingleCategoryDiagramRenderer diagramType="Histogram" attributeLegend="1">
<DiagramCategory height="15" enabled="0" sizeScale="3x:0,0,0,0,0,0" direction="0" penColor="#000000" opacity="1" labelPlacementMethod="XHeight" lineSizeType="MM" diagramOrientation="Up" backgroundColor="#ffffff" spacing="5" maxScaleDenominator="1e+08" scaleDependency="Area" sizeType="MM" barWidth="5" scaleBasedVisibility="0" spacingUnit="MM" minScaleDenominator="0" spacingUnitScale="3x:0,0,0,0,0,0" minimumSize="0" rotationOffset="270" backgroundAlpha="255" showAxis="1" penWidth="0" width="15" lineSizeScale="3x:0,0,0,0,0,0" penAlpha="255">
<fontProperties style="" description="MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0"/>
<axisSymbol>
<symbol name="" clip_to_extent="1" force_rhr="0" alpha="1" type="line">
<layer class="SimpleLine" enabled="1" locked="0" pass="0">
<prop v="0" k="align_dash_pattern"/>
<prop v="square" k="capstyle"/>
<prop v="5;2" k="customdash"/>
<prop v="3x:0,0,0,0,0,0" k="customdash_map_unit_scale"/>
<prop v="MM" k="customdash_unit"/>
<prop v="0" k="dash_pattern_offset"/>
<prop v="3x:0,0,0,0,0,0" k="dash_pattern_offset_map_unit_scale"/>
<prop v="MM" k="dash_pattern_offset_unit"/>
<prop v="0" k="draw_inside_polygon"/>
<prop v="bevel" k="joinstyle"/>
<prop v="35,35,35,255" k="line_color"/>
<prop v="solid" k="line_style"/>
<prop v="0.26" k="line_width"/>
<prop v="MM" k="line_width_unit"/>
<prop v="0" k="offset"/>
<prop v="3x:0,0,0,0,0,0" k="offset_map_unit_scale"/>
<prop v="MM" k="offset_unit"/>
<prop v="0" k="ring_filter"/>
<prop v="0" k="tweak_dash_pattern_on_corners"/>
<prop v="0" k="use_custom_dash"/>
<prop v="3x:0,0,0,0,0,0" k="width_map_unit_scale"/>
<data_defined_properties>
<Option type="Map">
<Option value="" name="name" type="QString"/>
<Option name="properties"/>
<Option value="collection" name="type" type="QString"/>
</Option>
</data_defined_properties>
</layer>
</symbol>
</axisSymbol>
</DiagramCategory>
</SingleCategoryDiagramRenderer>
<DiagramLayerSettings priority="0" placement="1" linePlacementFlags="18" obstacle="0" showAll="1" zIndex="0" dist="0">
<properties>
<Option type="Map">
<Option value="" name="name" type="QString"/>
<Option name="properties"/>
<Option value="collection" name="type" type="QString"/>
</Option>
</properties>
</DiagramLayerSettings>
<geometryOptions removeDuplicateNodes="0" geometryPrecision="0">
<activeChecks/>
<checkConfiguration type="Map">
<Option name="QgsGeometryGapCheck" type="Map">
<Option value="0" name="allowedGapsBuffer" type="double"/>
<Option value="false" name="allowedGapsEnabled" type="bool"/>
<Option value="" name="allowedGapsLayer" type="QString"/>
</Option>
</checkConfiguration>
</geometryOptions>
<legend type="default-vector"/>
<referencedLayers/>
<fieldConfiguration>
<field configurationFlags="None" name="OBJECTID_1">
<editWidget type="Range">
<config>
<Option/>
</config>
</editWidget>
</field>
<field configurationFlags="None" name="OBJECTID">
<editWidget type="Range">
<config>
<Option/>
</config>
</editWidget>
</field>
<field configurationFlags="None" name="AREA">
<editWidget type="TextEdit">
<config>
<Option/>
</config>
</editWidget>
</field>
<field configurationFlags="None" name="PERIMETER">
<editWidget type="TextEdit">
<config>
<Option/>
</config>
</editWidget>
</field>
<field configurationFlags="None" name="GEBIET">
<editWidget type="TextEdit">
<config>
<Option/>
</config>
</editWidget>
</field>
<field configurationFlags="None" name="LANDINT_NR">
<editWidget type="TextEdit">
<config>
<Option/>
</config>
</editWidget>
</field>
<field configurationFlags="None" name="ERFASSUNG">
<editWidget type="TextEdit">
<config>
<Option/>
</config>
</editWidget>
</field>
<field configurationFlags="None" name="INFO">
<editWidget type="TextEdit">
<config>
<Option/>
</config>
</editWidget>
</field>
<field configurationFlags="None" name="EU_NR">
<editWidget type="TextEdit">
<config>
<Option/>
</config>
</editWidget>
</field>
<field configurationFlags="None" name="RECHTS_GL">
<editWidget type="TextEdit">
<config>
<Option/>
</config>
</editWidget>
</field>
<field configurationFlags="None" name="SHAPE.AREA">
<editWidget type="TextEdit">
<config>
<Option/>
</config>
</editWidget>
</field>
<field configurationFlags="None" name="SHAPE.LEN">
<editWidget type="TextEdit">
<config>
<Option/>
</config>
</editWidget>
</field>
</fieldConfiguration>
<aliases>
<alias name="" index="0" field="OBJECTID_1"/>
<alias name="" index="1" field="OBJECTID"/>
<alias name="" index="2" field="AREA"/>
<alias name="" index="3" field="PERIMETER"/>
<alias name="" index="4" field="GEBIET"/>
<alias name="" index="5" field="LANDINT_NR"/>
<alias name="" index="6" field="ERFASSUNG"/>
<alias name="" index="7" field="INFO"/>
<alias name="" index="8" field="EU_NR"/>
<alias name="" index="9" field="RECHTS_GL"/>
<alias name="" index="10" field="SHAPE.AREA"/>
<alias name="" index="11" field="SHAPE.LEN"/>
</aliases>
<defaults>
<default expression="" applyOnUpdate="0" field="OBJECTID_1"/>
<default expression="" applyOnUpdate="0" field="OBJECTID"/>
<default expression="" applyOnUpdate="0" field="AREA"/>
<default expression="" applyOnUpdate="0" field="PERIMETER"/>
<default expression="" applyOnUpdate="0" field="GEBIET"/>
<default expression="" applyOnUpdate="0" field="LANDINT_NR"/>
<default expression="" applyOnUpdate="0" field="ERFASSUNG"/>
<default expression="" applyOnUpdate="0" field="INFO"/>
<default expression="" applyOnUpdate="0" field="EU_NR"/>
<default expression="" applyOnUpdate="0" field="RECHTS_GL"/>
<default expression="" applyOnUpdate="0" field="SHAPE.AREA"/>
<default expression="" applyOnUpdate="0" field="SHAPE.LEN"/>
</defaults>
<constraints>
<constraint exp_strength="0" unique_strength="0" notnull_strength="0" constraints="0" field="OBJECTID_1"/>
<constraint exp_strength="0" unique_strength="0" notnull_strength="0" constraints="0" field="OBJECTID"/>
<constraint exp_strength="0" unique_strength="0" notnull_strength="0" constraints="0" field="AREA"/>
<constraint exp_strength="0" unique_strength="0" notnull_strength="0" constraints="0" field="PERIMETER"/>
<constraint exp_strength="0" unique_strength="0" notnull_strength="0" constraints="0" field="GEBIET"/>
<constraint exp_strength="0" unique_strength="0" notnull_strength="0" constraints="0" field="LANDINT_NR"/>
<constraint exp_strength="0" unique_strength="0" notnull_strength="0" constraints="0" field="ERFASSUNG"/>
<constraint exp_strength="0" unique_strength="0" notnull_strength="0" constraints="0" field="INFO"/>
<constraint exp_strength="0" unique_strength="0" notnull_strength="0" constraints="0" field="EU_NR"/>
<constraint exp_strength="0" unique_strength="0" notnull_strength="0" constraints="0" field="RECHTS_GL"/>
<constraint exp_strength="0" unique_strength="0" notnull_strength="0" constraints="0" field="SHAPE.AREA"/>
<constraint exp_strength="0" unique_strength="0" notnull_strength="0" constraints="0" field="SHAPE.LEN"/>
</constraints>
<constraintExpressions>
<constraint exp="" desc="" field="OBJECTID_1"/>
<constraint exp="" desc="" field="OBJECTID"/>
<constraint exp="" desc="" field="AREA"/>
<constraint exp="" desc="" field="PERIMETER"/>
<constraint exp="" desc="" field="GEBIET"/>
<constraint exp="" desc="" field="LANDINT_NR"/>
<constraint exp="" desc="" field="ERFASSUNG"/>
<constraint exp="" desc="" field="INFO"/>
<constraint exp="" desc="" field="EU_NR"/>
<constraint exp="" desc="" field="RECHTS_GL"/>
<constraint exp="" desc="" field="SHAPE.AREA"/>
<constraint exp="" desc="" field="SHAPE.LEN"/>
</constraintExpressions>
<expressionfields/>
<attributeactions>
<defaultAction key="Canvas" value="{00000000-0000-0000-0000-000000000000}"/>
</attributeactions>
<attributetableconfig sortExpression="" actionWidgetStyle="dropDown" sortOrder="0">
<columns>
<column name="OBJECTID_1" width="-1" hidden="0" type="field"/>
<column name="OBJECTID" width="-1" hidden="0" type="field"/>
<column name="AREA" width="-1" hidden="0" type="field"/>
<column name="PERIMETER" width="-1" hidden="0" type="field"/>
<column name="GEBIET" width="-1" hidden="0" type="field"/>
<column name="LANDINT_NR" width="-1" hidden="0" type="field"/>
<column name="ERFASSUNG" width="-1" hidden="0" type="field"/>
<column name="INFO" width="-1" hidden="0" type="field"/>
<column name="EU_NR" width="-1" hidden="0" type="field"/>
<column name="RECHTS_GL" width="-1" hidden="0" type="field"/>
<column name="SHAPE.AREA" width="-1" hidden="0" type="field"/>
<column name="SHAPE.LEN" width="-1" hidden="0" type="field"/>
<column width="-1" hidden="1" type="actions"/>
</columns>
</attributetableconfig>
<conditionalstyles>
<rowstyles/>
<fieldstyles/>
</conditionalstyles>
<storedexpressions/>
<editform tolerant="1"></editform>
<editforminit/>
<editforminitcodesource>0</editforminitcodesource>
<editforminitfilepath></editforminitfilepath>
<editforminitcode><![CDATA[# -*- coding: utf-8 -*-
"""
QGIS forms can have a Python function that is called when the form is
opened.
Use this function to add extra logic to your forms.
Enter the name of the function in the "Python Init function"
field.
An example follows:
"""
from qgis.PyQt.QtWidgets import QWidget
def my_form_open(dialog, layer, feature):
geom = feature.geometry()
control = dialog.findChild(QWidget, "MyLineEdit")
]]></editforminitcode>
<featformsuppress>0</featformsuppress>
<editorlayout>generatedlayout</editorlayout>
<editable>
<field name="AREA" editable="1"/>
<field name="ERFASSUNG" editable="1"/>
<field name="EU_NR" editable="1"/>
<field name="GEBIET" editable="1"/>
<field name="INFO" editable="1"/>
<field name="LANDINT_NR" editable="1"/>
<field name="OBJECTID" editable="1"/>
<field name="OBJECTID_1" editable="1"/>
<field name="PERIMETER" editable="1"/>
<field name="RECHTS_GL" editable="1"/>
<field name="SHAPE.AREA" editable="1"/>
<field name="SHAPE.LEN" editable="1"/>
</editable>
<labelOnTop>
<field name="AREA" labelOnTop="0"/>
<field name="ERFASSUNG" labelOnTop="0"/>
<field name="EU_NR" labelOnTop="0"/>
<field name="GEBIET" labelOnTop="0"/>
<field name="INFO" labelOnTop="0"/>
<field name="LANDINT_NR" labelOnTop="0"/>
<field name="OBJECTID" labelOnTop="0"/>
<field name="OBJECTID_1" labelOnTop="0"/>
<field name="PERIMETER" labelOnTop="0"/>
<field name="RECHTS_GL" labelOnTop="0"/>
<field name="SHAPE.AREA" labelOnTop="0"/>
<field name="SHAPE.LEN" labelOnTop="0"/>
</labelOnTop>
<dataDefinedFieldProperties/>
<widgets/>
<previewExpression>"OBJECTID_1"</previewExpression>
<mapTip></mapTip>
<layerGeometryType>2</layerGeometryType>
</qgis>

View File

@@ -0,0 +1,86 @@
<!DOCTYPE qgis PUBLIC 'http://mrcc.com/qgis.dtd' 'SYSTEM'>
<qgis labelsEnabled="0" version="3.40.7-Bratislava" styleCategories="Symbology|Labeling">
<renderer-v2 referencescale="-1" type="singleSymbol" enableorderby="0" symbollevels="0" forceraster="0">
<symbols>
<symbol force_rhr="0" alpha="1" name="0" frame_rate="10" is_animated="0" type="fill" clip_to_extent="1">
<data_defined_properties>
<Option type="Map">
<Option value="" name="name" type="QString"/>
<Option name="properties"/>
<Option value="collection" name="type" type="QString"/>
</Option>
</data_defined_properties>
<layer enabled="1" id="{51b633ae-19c8-494c-9f61-fed6d0658609}" pass="0" locked="0" class="SimpleFill">
<Option type="Map">
<Option value="3x:0,0,0,0,0,0" name="border_width_map_unit_scale" type="QString"/>
<Option value="0,170,127,255,rgb:0,0.66666666666666663,0.49803921568627452,1" name="color" type="QString"/>
<Option value="bevel" name="joinstyle" type="QString"/>
<Option value="0,0" name="offset" type="QString"/>
<Option value="3x:0,0,0,0,0,0" name="offset_map_unit_scale" type="QString"/>
<Option value="MM" name="offset_unit" type="QString"/>
<Option value="35,35,35,255,rgb:0.13725490196078433,0.13725490196078433,0.13725490196078433,1" name="outline_color" type="QString"/>
<Option value="solid" name="outline_style" type="QString"/>
<Option value="0.26" name="outline_width" type="QString"/>
<Option value="MM" name="outline_width_unit" type="QString"/>
<Option value="solid" name="style" type="QString"/>
</Option>
<data_defined_properties>
<Option type="Map">
<Option value="" name="name" type="QString"/>
<Option name="properties"/>
<Option value="collection" name="type" type="QString"/>
</Option>
</data_defined_properties>
</layer>
</symbol>
</symbols>
<rotation/>
<sizescale/>
<data-defined-properties>
<Option type="Map">
<Option value="" name="name" type="QString"/>
<Option name="properties"/>
<Option value="collection" name="type" type="QString"/>
</Option>
</data-defined-properties>
</renderer-v2>
<selection mode="Default">
<selectionColor invalid="1"/>
<selectionSymbol>
<symbol force_rhr="0" alpha="1" name="" frame_rate="10" is_animated="0" type="fill" clip_to_extent="1">
<data_defined_properties>
<Option type="Map">
<Option value="" name="name" type="QString"/>
<Option name="properties"/>
<Option value="collection" name="type" type="QString"/>
</Option>
</data_defined_properties>
<layer enabled="1" id="{196362a1-d1f5-42ac-83e1-fde17aedfc32}" pass="0" locked="0" class="SimpleFill">
<Option type="Map">
<Option value="3x:0,0,0,0,0,0" name="border_width_map_unit_scale" type="QString"/>
<Option value="0,0,255,255,rgb:0,0,1,1" name="color" type="QString"/>
<Option value="bevel" name="joinstyle" type="QString"/>
<Option value="0,0" name="offset" type="QString"/>
<Option value="3x:0,0,0,0,0,0" name="offset_map_unit_scale" type="QString"/>
<Option value="MM" name="offset_unit" type="QString"/>
<Option value="35,35,35,255,rgb:0.13725490196078433,0.13725490196078433,0.13725490196078433,1" name="outline_color" type="QString"/>
<Option value="solid" name="outline_style" type="QString"/>
<Option value="0.26" name="outline_width" type="QString"/>
<Option value="MM" name="outline_width_unit" type="QString"/>
<Option value="solid" name="style" type="QString"/>
</Option>
<data_defined_properties>
<Option type="Map">
<Option value="" name="name" type="QString"/>
<Option name="properties"/>
<Option value="collection" name="type" type="QString"/>
</Option>
</data_defined_properties>
</layer>
</symbol>
</selectionSymbol>
</selection>
<blendMode>0</blendMode>
<featureBlendMode>0</featureBlendMode>
<layerGeometryType>2</layerGeometryType>
</qgis>

View File

@@ -0,0 +1,86 @@
<!DOCTYPE qgis PUBLIC 'http://mrcc.com/qgis.dtd' 'SYSTEM'>
<qgis labelsEnabled="0" version="3.40.7-Bratislava" styleCategories="Symbology|Labeling">
<renderer-v2 referencescale="-1" type="singleSymbol" enableorderby="0" symbollevels="0" forceraster="0">
<symbols>
<symbol force_rhr="0" alpha="1" name="0" frame_rate="10" is_animated="0" type="fill" clip_to_extent="1">
<data_defined_properties>
<Option type="Map">
<Option value="" name="name" type="QString"/>
<Option name="properties"/>
<Option value="collection" name="type" type="QString"/>
</Option>
</data_defined_properties>
<layer enabled="1" id="{aee1670c-f16b-4ce8-9910-bc0fd065e8e8}" pass="0" locked="0" class="SimpleFill">
<Option type="Map">
<Option value="3x:0,0,0,0,0,0" name="border_width_map_unit_scale" type="QString"/>
<Option value="231,113,72,255,rgb:0.90588235294117647,0.44313725490196076,0.28235294117647058,1" name="color" type="QString"/>
<Option value="bevel" name="joinstyle" type="QString"/>
<Option value="0,0" name="offset" type="QString"/>
<Option value="3x:0,0,0,0,0,0" name="offset_map_unit_scale" type="QString"/>
<Option value="MM" name="offset_unit" type="QString"/>
<Option value="64,74,255,255,rgb:0.25098039215686274,0.29019607843137257,1,1" name="outline_color" type="QString"/>
<Option value="dash" name="outline_style" type="QString"/>
<Option value="0.26" name="outline_width" type="QString"/>
<Option value="MM" name="outline_width_unit" type="QString"/>
<Option value="no" name="style" type="QString"/>
</Option>
<data_defined_properties>
<Option type="Map">
<Option value="" name="name" type="QString"/>
<Option name="properties"/>
<Option value="collection" name="type" type="QString"/>
</Option>
</data_defined_properties>
</layer>
</symbol>
</symbols>
<rotation/>
<sizescale/>
<data-defined-properties>
<Option type="Map">
<Option value="" name="name" type="QString"/>
<Option name="properties"/>
<Option value="collection" name="type" type="QString"/>
</Option>
</data-defined-properties>
</renderer-v2>
<selection mode="Default">
<selectionColor invalid="1"/>
<selectionSymbol>
<symbol force_rhr="0" alpha="1" name="" frame_rate="10" is_animated="0" type="fill" clip_to_extent="1">
<data_defined_properties>
<Option type="Map">
<Option value="" name="name" type="QString"/>
<Option name="properties"/>
<Option value="collection" name="type" type="QString"/>
</Option>
</data_defined_properties>
<layer enabled="1" id="{5f015e2e-554f-4515-ab45-c44905dfe509}" pass="0" locked="0" class="SimpleFill">
<Option type="Map">
<Option value="3x:0,0,0,0,0,0" name="border_width_map_unit_scale" type="QString"/>
<Option value="0,0,255,255,rgb:0,0,1,1" name="color" type="QString"/>
<Option value="bevel" name="joinstyle" type="QString"/>
<Option value="0,0" name="offset" type="QString"/>
<Option value="3x:0,0,0,0,0,0" name="offset_map_unit_scale" type="QString"/>
<Option value="MM" name="offset_unit" type="QString"/>
<Option value="35,35,35,255,rgb:0.13725490196078433,0.13725490196078433,0.13725490196078433,1" name="outline_color" type="QString"/>
<Option value="solid" name="outline_style" type="QString"/>
<Option value="0.26" name="outline_width" type="QString"/>
<Option value="MM" name="outline_width_unit" type="QString"/>
<Option value="solid" name="style" type="QString"/>
</Option>
<data_defined_properties>
<Option type="Map">
<Option value="" name="name" type="QString"/>
<Option name="properties"/>
<Option value="collection" name="type" type="QString"/>
</Option>
</data_defined_properties>
</layer>
</symbol>
</selectionSymbol>
</selection>
<blendMode>0</blendMode>
<featureBlendMode>0</featureBlendMode>
<layerGeometryType>2</layerGeometryType>
</qgis>

BIN
assets/Linkliste.xlsx Normal file

Binary file not shown.

86
assets/Standgewässer.qml Normal file
View File

@@ -0,0 +1,86 @@
<!DOCTYPE qgis PUBLIC 'http://mrcc.com/qgis.dtd' 'SYSTEM'>
<qgis labelsEnabled="0" version="3.40.7-Bratislava" styleCategories="Symbology|Labeling">
<renderer-v2 referencescale="-1" type="singleSymbol" enableorderby="0" symbollevels="0" forceraster="0">
<symbols>
<symbol force_rhr="0" alpha="1" name="0" frame_rate="10" is_animated="0" type="fill" clip_to_extent="1">
<data_defined_properties>
<Option type="Map">
<Option value="" name="name" type="QString"/>
<Option name="properties"/>
<Option value="collection" name="type" type="QString"/>
</Option>
</data_defined_properties>
<layer enabled="1" id="{a2788a8d-f4df-42c4-9934-2bbbe85406e8}" pass="0" locked="0" class="SimpleFill">
<Option type="Map">
<Option value="3x:0,0,0,0,0,0" name="border_width_map_unit_scale" type="QString"/>
<Option value="32,129,255,255,rgb:0.12549019607843137,0.50588235294117645,1,1" name="color" type="QString"/>
<Option value="bevel" name="joinstyle" type="QString"/>
<Option value="0,0" name="offset" type="QString"/>
<Option value="3x:0,0,0,0,0,0" name="offset_map_unit_scale" type="QString"/>
<Option value="MM" name="offset_unit" type="QString"/>
<Option value="35,35,35,255,rgb:0.13725490196078433,0.13725490196078433,0.13725490196078433,1" name="outline_color" type="QString"/>
<Option value="solid" name="outline_style" type="QString"/>
<Option value="0.26" name="outline_width" type="QString"/>
<Option value="MM" name="outline_width_unit" type="QString"/>
<Option value="solid" name="style" type="QString"/>
</Option>
<data_defined_properties>
<Option type="Map">
<Option value="" name="name" type="QString"/>
<Option name="properties"/>
<Option value="collection" name="type" type="QString"/>
</Option>
</data_defined_properties>
</layer>
</symbol>
</symbols>
<rotation/>
<sizescale/>
<data-defined-properties>
<Option type="Map">
<Option value="" name="name" type="QString"/>
<Option name="properties"/>
<Option value="collection" name="type" type="QString"/>
</Option>
</data-defined-properties>
</renderer-v2>
<selection mode="Default">
<selectionColor invalid="1"/>
<selectionSymbol>
<symbol force_rhr="0" alpha="1" name="" frame_rate="10" is_animated="0" type="fill" clip_to_extent="1">
<data_defined_properties>
<Option type="Map">
<Option value="" name="name" type="QString"/>
<Option name="properties"/>
<Option value="collection" name="type" type="QString"/>
</Option>
</data_defined_properties>
<layer enabled="1" id="{9dbcfb26-6cfe-454c-ae48-813791c1dfd4}" pass="0" locked="0" class="SimpleFill">
<Option type="Map">
<Option value="3x:0,0,0,0,0,0" name="border_width_map_unit_scale" type="QString"/>
<Option value="0,0,255,255,rgb:0,0,1,1" name="color" type="QString"/>
<Option value="bevel" name="joinstyle" type="QString"/>
<Option value="0,0" name="offset" type="QString"/>
<Option value="3x:0,0,0,0,0,0" name="offset_map_unit_scale" type="QString"/>
<Option value="MM" name="offset_unit" type="QString"/>
<Option value="35,35,35,255,rgb:0.13725490196078433,0.13725490196078433,0.13725490196078433,1" name="outline_color" type="QString"/>
<Option value="solid" name="outline_style" type="QString"/>
<Option value="0.26" name="outline_width" type="QString"/>
<Option value="MM" name="outline_width_unit" type="QString"/>
<Option value="solid" name="style" type="QString"/>
</Option>
<data_defined_properties>
<Option type="Map">
<Option value="" name="name" type="QString"/>
<Option name="properties"/>
<Option value="collection" name="type" type="QString"/>
</Option>
</data_defined_properties>
</layer>
</symbol>
</selectionSymbol>
</selection>
<blendMode>0</blendMode>
<featureBlendMode>0</featureBlendMode>
<layerGeometryType>2</layerGeometryType>
</qgis>

View File

@@ -0,0 +1,86 @@
<!DOCTYPE qgis PUBLIC 'http://mrcc.com/qgis.dtd' 'SYSTEM'>
<qgis labelsEnabled="0" version="3.40.7-Bratislava" styleCategories="Symbology|Labeling">
<renderer-v2 referencescale="-1" type="singleSymbol" enableorderby="0" symbollevels="0" forceraster="0">
<symbols>
<symbol force_rhr="0" alpha="1" name="0" frame_rate="10" is_animated="0" type="fill" clip_to_extent="1">
<data_defined_properties>
<Option type="Map">
<Option value="" name="name" type="QString"/>
<Option name="properties"/>
<Option value="collection" name="type" type="QString"/>
</Option>
</data_defined_properties>
<layer enabled="1" id="{e3273eed-9cb5-4040-b82c-2ce3ac4ae803}" pass="0" locked="0" class="SimpleFill">
<Option type="Map">
<Option value="3x:0,0,0,0,0,0" name="border_width_map_unit_scale" type="QString"/>
<Option value="187,235,255,255,rgb:0.73333333333333328,0.92156862745098034,1,1" name="color" type="QString"/>
<Option value="bevel" name="joinstyle" type="QString"/>
<Option value="0,0" name="offset" type="QString"/>
<Option value="3x:0,0,0,0,0,0" name="offset_map_unit_scale" type="QString"/>
<Option value="MM" name="offset_unit" type="QString"/>
<Option value="0,85,255,255,rgb:0,0.33333333333333331,1,1" name="outline_color" type="QString"/>
<Option value="dot" name="outline_style" type="QString"/>
<Option value="0.26" name="outline_width" type="QString"/>
<Option value="MM" name="outline_width_unit" type="QString"/>
<Option value="no" name="style" type="QString"/>
</Option>
<data_defined_properties>
<Option type="Map">
<Option value="" name="name" type="QString"/>
<Option name="properties"/>
<Option value="collection" name="type" type="QString"/>
</Option>
</data_defined_properties>
</layer>
</symbol>
</symbols>
<rotation/>
<sizescale/>
<data-defined-properties>
<Option type="Map">
<Option value="" name="name" type="QString"/>
<Option name="properties"/>
<Option value="collection" name="type" type="QString"/>
</Option>
</data-defined-properties>
</renderer-v2>
<selection mode="Default">
<selectionColor invalid="1"/>
<selectionSymbol>
<symbol force_rhr="0" alpha="1" name="" frame_rate="10" is_animated="0" type="fill" clip_to_extent="1">
<data_defined_properties>
<Option type="Map">
<Option value="" name="name" type="QString"/>
<Option name="properties"/>
<Option value="collection" name="type" type="QString"/>
</Option>
</data_defined_properties>
<layer enabled="1" id="{bbb5064e-a0e4-45ae-8768-88e448d64bd4}" pass="0" locked="0" class="SimpleFill">
<Option type="Map">
<Option value="3x:0,0,0,0,0,0" name="border_width_map_unit_scale" type="QString"/>
<Option value="0,0,255,255,rgb:0,0,1,1" name="color" type="QString"/>
<Option value="bevel" name="joinstyle" type="QString"/>
<Option value="0,0" name="offset" type="QString"/>
<Option value="3x:0,0,0,0,0,0" name="offset_map_unit_scale" type="QString"/>
<Option value="MM" name="offset_unit" type="QString"/>
<Option value="35,35,35,255,rgb:0.13725490196078433,0.13725490196078433,0.13725490196078433,1" name="outline_color" type="QString"/>
<Option value="solid" name="outline_style" type="QString"/>
<Option value="0.26" name="outline_width" type="QString"/>
<Option value="MM" name="outline_width_unit" type="QString"/>
<Option value="solid" name="style" type="QString"/>
</Option>
<data_defined_properties>
<Option type="Map">
<Option value="" name="name" type="QString"/>
<Option name="properties"/>
<Option value="collection" name="type" type="QString"/>
</Option>
</data_defined_properties>
</layer>
</symbol>
</selectionSymbol>
</selection>
<blendMode>0</blendMode>
<featureBlendMode>0</featureBlendMode>
<layerGeometryType>2</layerGeometryType>
</qgis>

140
assets/Verfahrensgebiet.qml Normal file
View File

@@ -0,0 +1,140 @@
<!DOCTYPE qgis PUBLIC 'http://mrcc.com/qgis.dtd' 'SYSTEM'>
<qgis version="3.40.7-Bratislava" styleCategories="Symbology">
<renderer-v2 referencescale="-1" forceraster="0" enableorderby="0" type="singleSymbol" symbollevels="0">
<symbols>
<symbol is_animated="0" frame_rate="10" clip_to_extent="1" type="fill" alpha="1" force_rhr="0" name="0">
<data_defined_properties>
<Option type="Map">
<Option type="QString" value="" name="name"/>
<Option name="properties"/>
<Option type="QString" value="collection" name="type"/>
</Option>
</data_defined_properties>
<layer locked="0" id="{feca00b2-500a-4c9a-b285-67ba2d99d8f6}" enabled="1" class="SimpleLine" pass="0">
<Option type="Map">
<Option type="QString" value="0" name="align_dash_pattern"/>
<Option type="QString" value="square" name="capstyle"/>
<Option type="QString" value="5;2" name="customdash"/>
<Option type="QString" value="3x:0,0,0,0,0,0" name="customdash_map_unit_scale"/>
<Option type="QString" value="MM" name="customdash_unit"/>
<Option type="QString" value="0" name="dash_pattern_offset"/>
<Option type="QString" value="3x:0,0,0,0,0,0" name="dash_pattern_offset_map_unit_scale"/>
<Option type="QString" value="MM" name="dash_pattern_offset_unit"/>
<Option type="QString" value="0" name="draw_inside_polygon"/>
<Option type="QString" value="round" name="joinstyle"/>
<Option type="QString" value="215,168,255,255,rgb:0.84313725490196079,0.6588235294117647,1,1" name="line_color"/>
<Option type="QString" value="solid" name="line_style"/>
<Option type="QString" value="1.5" name="line_width"/>
<Option type="QString" value="MM" name="line_width_unit"/>
<Option type="QString" value="-0.75" name="offset"/>
<Option type="QString" value="3x:0,0,0,0,0,0" name="offset_map_unit_scale"/>
<Option type="QString" value="MM" name="offset_unit"/>
<Option type="QString" value="0" name="ring_filter"/>
<Option type="QString" value="0" name="trim_distance_end"/>
<Option type="QString" value="3x:0,0,0,0,0,0" name="trim_distance_end_map_unit_scale"/>
<Option type="QString" value="MM" name="trim_distance_end_unit"/>
<Option type="QString" value="0" name="trim_distance_start"/>
<Option type="QString" value="3x:0,0,0,0,0,0" name="trim_distance_start_map_unit_scale"/>
<Option type="QString" value="MM" name="trim_distance_start_unit"/>
<Option type="QString" value="0" name="tweak_dash_pattern_on_corners"/>
<Option type="QString" value="0" name="use_custom_dash"/>
<Option type="QString" value="3x:0,0,0,0,0,0" name="width_map_unit_scale"/>
</Option>
<data_defined_properties>
<Option type="Map">
<Option type="QString" value="" name="name"/>
<Option name="properties"/>
<Option type="QString" value="collection" name="type"/>
</Option>
</data_defined_properties>
</layer>
<layer locked="0" id="{fdc4d6fd-0995-41df-bbfb-19970b4fc2cc}" enabled="1" class="SimpleLine" pass="0">
<Option type="Map">
<Option type="QString" value="0" name="align_dash_pattern"/>
<Option type="QString" value="square" name="capstyle"/>
<Option type="QString" value="5;2" name="customdash"/>
<Option type="QString" value="3x:0,0,0,0,0,0" name="customdash_map_unit_scale"/>
<Option type="QString" value="MM" name="customdash_unit"/>
<Option type="QString" value="0" name="dash_pattern_offset"/>
<Option type="QString" value="3x:0,0,0,0,0,0" name="dash_pattern_offset_map_unit_scale"/>
<Option type="QString" value="MM" name="dash_pattern_offset_unit"/>
<Option type="QString" value="0" name="draw_inside_polygon"/>
<Option type="QString" value="round" name="joinstyle"/>
<Option type="QString" value="204,174,137,255,rgb:0.80000000000000004,0.68235294117647061,0.53725490196078429,1" name="line_color"/>
<Option type="QString" value="solid" name="line_style"/>
<Option type="QString" value="0.5" name="line_width"/>
<Option type="QString" value="MM" name="line_width_unit"/>
<Option type="QString" value="0" name="offset"/>
<Option type="QString" value="3x:0,0,0,0,0,0" name="offset_map_unit_scale"/>
<Option type="QString" value="MM" name="offset_unit"/>
<Option type="QString" value="0" name="ring_filter"/>
<Option type="QString" value="0" name="trim_distance_end"/>
<Option type="QString" value="3x:0,0,0,0,0,0" name="trim_distance_end_map_unit_scale"/>
<Option type="QString" value="MM" name="trim_distance_end_unit"/>
<Option type="QString" value="0" name="trim_distance_start"/>
<Option type="QString" value="3x:0,0,0,0,0,0" name="trim_distance_start_map_unit_scale"/>
<Option type="QString" value="MM" name="trim_distance_start_unit"/>
<Option type="QString" value="0" name="tweak_dash_pattern_on_corners"/>
<Option type="QString" value="0" name="use_custom_dash"/>
<Option type="QString" value="3x:0,0,0,0,0,0" name="width_map_unit_scale"/>
</Option>
<data_defined_properties>
<Option type="Map">
<Option type="QString" value="" name="name"/>
<Option name="properties"/>
<Option type="QString" value="collection" name="type"/>
</Option>
</data_defined_properties>
</layer>
</symbol>
</symbols>
<rotation/>
<sizescale/>
<data-defined-properties>
<Option type="Map">
<Option type="QString" value="" name="name"/>
<Option name="properties"/>
<Option type="QString" value="collection" name="type"/>
</Option>
</data-defined-properties>
</renderer-v2>
<selection mode="Default">
<selectionColor invalid="1"/>
<selectionSymbol>
<symbol is_animated="0" frame_rate="10" clip_to_extent="1" type="fill" alpha="1" force_rhr="0" name="">
<data_defined_properties>
<Option type="Map">
<Option type="QString" value="" name="name"/>
<Option name="properties"/>
<Option type="QString" value="collection" name="type"/>
</Option>
</data_defined_properties>
<layer locked="0" id="{f18003f5-220a-487f-8a6d-b24facc4c1a5}" enabled="1" class="SimpleFill" pass="0">
<Option type="Map">
<Option type="QString" value="3x:0,0,0,0,0,0" name="border_width_map_unit_scale"/>
<Option type="QString" value="0,0,255,255,rgb:0,0,1,1" name="color"/>
<Option type="QString" value="bevel" name="joinstyle"/>
<Option type="QString" value="0,0" name="offset"/>
<Option type="QString" value="3x:0,0,0,0,0,0" name="offset_map_unit_scale"/>
<Option type="QString" value="MM" name="offset_unit"/>
<Option type="QString" value="35,35,35,255,rgb:0.13725490196078433,0.13725490196078433,0.13725490196078433,1" name="outline_color"/>
<Option type="QString" value="solid" name="outline_style"/>
<Option type="QString" value="0.26" name="outline_width"/>
<Option type="QString" value="MM" name="outline_width_unit"/>
<Option type="QString" value="solid" name="style"/>
</Option>
<data_defined_properties>
<Option type="Map">
<Option type="QString" value="" name="name"/>
<Option name="properties"/>
<Option type="QString" value="collection" name="type"/>
</Option>
</data_defined_properties>
</layer>
</symbol>
</selectionSymbol>
</selection>
<blendMode>0</blendMode>
<featureBlendMode>0</featureBlendMode>
<layerGeometryType>2</layerGeometryType>
</qgis>

189
assets/WEA_wald.qml Normal file
View File

@@ -0,0 +1,189 @@
<!DOCTYPE qgis PUBLIC 'http://mrcc.com/qgis.dtd' 'SYSTEM'>
<qgis labelsEnabled="0" version="3.40.7-Bratislava" styleCategories="Symbology|Labeling">
<renderer-v2 referencescale="-1" attr="WEA_KAT" type="categorizedSymbol" enableorderby="0" symbollevels="0" forceraster="0">
<categories>
<category render="true" value="A" label="A" uuid="{a493e3ec-8448-4033-a408-6f5f74aec791}" type="string" symbol="0"/>
<category render="true" value="B" label="B" uuid="{589d5abd-c75b-48e8-ade4-5b8a3d2b6195}" type="string" symbol="1"/>
<category render="true" value="C" label="C" uuid="{3bf350c1-f0ef-4280-a08f-19b2f57130fd}" type="string" symbol="2"/>
</categories>
<symbols>
<symbol force_rhr="0" alpha="1" name="0" frame_rate="10" is_animated="0" type="fill" clip_to_extent="1">
<data_defined_properties>
<Option type="Map">
<Option value="" name="name" type="QString"/>
<Option name="properties"/>
<Option value="collection" name="type" type="QString"/>
</Option>
</data_defined_properties>
<layer enabled="1" id="{b8ee3477-3916-448a-8351-c62eaec5cbd4}" pass="0" locked="0" class="SimpleFill">
<Option type="Map">
<Option value="3x:0,0,0,0,0,0" name="border_width_map_unit_scale" type="QString"/>
<Option value="99,213,43,255,hsv:0.27777777777777779,0.80000000000000004,0.83529411764705885,1" name="color" type="QString"/>
<Option value="bevel" name="joinstyle" type="QString"/>
<Option value="0,0" name="offset" type="QString"/>
<Option value="3x:0,0,0,0,0,0" name="offset_map_unit_scale" type="QString"/>
<Option value="MM" name="offset_unit" type="QString"/>
<Option value="35,35,35,255,rgb:0.13725490196078433,0.13725490196078433,0.13725490196078433,1" name="outline_color" type="QString"/>
<Option value="solid" name="outline_style" type="QString"/>
<Option value="0.26" name="outline_width" type="QString"/>
<Option value="MM" name="outline_width_unit" type="QString"/>
<Option value="solid" name="style" type="QString"/>
</Option>
<data_defined_properties>
<Option type="Map">
<Option value="" name="name" type="QString"/>
<Option name="properties"/>
<Option value="collection" name="type" type="QString"/>
</Option>
</data_defined_properties>
</layer>
</symbol>
<symbol force_rhr="0" alpha="1" name="1" frame_rate="10" is_animated="0" type="fill" clip_to_extent="1">
<data_defined_properties>
<Option type="Map">
<Option value="" name="name" type="QString"/>
<Option name="properties"/>
<Option value="collection" name="type" type="QString"/>
</Option>
</data_defined_properties>
<layer enabled="1" id="{86c7ac31-2afd-4384-996e-585e69cff44d}" pass="0" locked="0" class="SimpleFill">
<Option type="Map">
<Option value="3x:0,0,0,0,0,0" name="border_width_map_unit_scale" type="QString"/>
<Option value="255,170,0,255,rgb:1,0.66666666666666663,0,1" name="color" type="QString"/>
<Option value="bevel" name="joinstyle" type="QString"/>
<Option value="0,0" name="offset" type="QString"/>
<Option value="3x:0,0,0,0,0,0" name="offset_map_unit_scale" type="QString"/>
<Option value="MM" name="offset_unit" type="QString"/>
<Option value="35,35,35,255,rgb:0.13725490196078433,0.13725490196078433,0.13725490196078433,1" name="outline_color" type="QString"/>
<Option value="solid" name="outline_style" type="QString"/>
<Option value="0.26" name="outline_width" type="QString"/>
<Option value="MM" name="outline_width_unit" type="QString"/>
<Option value="solid" name="style" type="QString"/>
</Option>
<data_defined_properties>
<Option type="Map">
<Option value="" name="name" type="QString"/>
<Option name="properties"/>
<Option value="collection" name="type" type="QString"/>
</Option>
</data_defined_properties>
</layer>
</symbol>
<symbol force_rhr="0" alpha="1" name="2" frame_rate="10" is_animated="0" type="fill" clip_to_extent="1">
<data_defined_properties>
<Option type="Map">
<Option value="" name="name" type="QString"/>
<Option name="properties"/>
<Option value="collection" name="type" type="QString"/>
</Option>
</data_defined_properties>
<layer enabled="1" id="{b2db4925-4441-458f-9fd8-e8939e7b8ec9}" pass="0" locked="0" class="SimpleFill">
<Option type="Map">
<Option value="3x:0,0,0,0,0,0" name="border_width_map_unit_scale" type="QString"/>
<Option value="218,110,85,255,hsv:0.03055555555555555,0.60784313725490191,0.85490196078431369,1" name="color" type="QString"/>
<Option value="bevel" name="joinstyle" type="QString"/>
<Option value="0,0" name="offset" type="QString"/>
<Option value="3x:0,0,0,0,0,0" name="offset_map_unit_scale" type="QString"/>
<Option value="MM" name="offset_unit" type="QString"/>
<Option value="35,35,35,255,rgb:0.13725490196078433,0.13725490196078433,0.13725490196078433,1" name="outline_color" type="QString"/>
<Option value="solid" name="outline_style" type="QString"/>
<Option value="0.26" name="outline_width" type="QString"/>
<Option value="MM" name="outline_width_unit" type="QString"/>
<Option value="solid" name="style" type="QString"/>
</Option>
<data_defined_properties>
<Option type="Map">
<Option value="" name="name" type="QString"/>
<Option name="properties"/>
<Option value="collection" name="type" type="QString"/>
</Option>
</data_defined_properties>
</layer>
</symbol>
</symbols>
<source-symbol>
<symbol force_rhr="0" alpha="1" name="0" frame_rate="10" is_animated="0" type="fill" clip_to_extent="1">
<data_defined_properties>
<Option type="Map">
<Option value="" name="name" type="QString"/>
<Option name="properties"/>
<Option value="collection" name="type" type="QString"/>
</Option>
</data_defined_properties>
<layer enabled="1" id="{d73d1702-c6a5-489a-9eea-e4f3a56547e2}" pass="0" locked="0" class="SimpleFill">
<Option type="Map">
<Option value="3x:0,0,0,0,0,0" name="border_width_map_unit_scale" type="QString"/>
<Option value="255,158,23,255,rgb:1,0.61960784313725492,0.09019607843137255,1" name="color" type="QString"/>
<Option value="bevel" name="joinstyle" type="QString"/>
<Option value="0,0" name="offset" type="QString"/>
<Option value="3x:0,0,0,0,0,0" name="offset_map_unit_scale" type="QString"/>
<Option value="MM" name="offset_unit" type="QString"/>
<Option value="35,35,35,255,rgb:0.13725490196078433,0.13725490196078433,0.13725490196078433,1" name="outline_color" type="QString"/>
<Option value="solid" name="outline_style" type="QString"/>
<Option value="0.26" name="outline_width" type="QString"/>
<Option value="MM" name="outline_width_unit" type="QString"/>
<Option value="solid" name="style" type="QString"/>
</Option>
<data_defined_properties>
<Option type="Map">
<Option value="" name="name" type="QString"/>
<Option name="properties"/>
<Option value="collection" name="type" type="QString"/>
</Option>
</data_defined_properties>
</layer>
</symbol>
</source-symbol>
<colorramp name="[source]" type="randomcolors">
<Option/>
</colorramp>
<rotation/>
<sizescale/>
<data-defined-properties>
<Option type="Map">
<Option value="" name="name" type="QString"/>
<Option name="properties"/>
<Option value="collection" name="type" type="QString"/>
</Option>
</data-defined-properties>
</renderer-v2>
<selection mode="Default">
<selectionColor invalid="1"/>
<selectionSymbol>
<symbol force_rhr="0" alpha="1" name="" frame_rate="10" is_animated="0" type="fill" clip_to_extent="1">
<data_defined_properties>
<Option type="Map">
<Option value="" name="name" type="QString"/>
<Option name="properties"/>
<Option value="collection" name="type" type="QString"/>
</Option>
</data_defined_properties>
<layer enabled="1" id="{9629aa90-8580-4cfc-a7d4-8e2bc3b261b5}" pass="0" locked="0" class="SimpleFill">
<Option type="Map">
<Option value="3x:0,0,0,0,0,0" name="border_width_map_unit_scale" type="QString"/>
<Option value="0,0,255,255,rgb:0,0,1,1" name="color" type="QString"/>
<Option value="bevel" name="joinstyle" type="QString"/>
<Option value="0,0" name="offset" type="QString"/>
<Option value="3x:0,0,0,0,0,0" name="offset_map_unit_scale" type="QString"/>
<Option value="MM" name="offset_unit" type="QString"/>
<Option value="35,35,35,255,rgb:0.13725490196078433,0.13725490196078433,0.13725490196078433,1" name="outline_color" type="QString"/>
<Option value="solid" name="outline_style" type="QString"/>
<Option value="0.26" name="outline_width" type="QString"/>
<Option value="MM" name="outline_width_unit" type="QString"/>
<Option value="solid" name="style" type="QString"/>
</Option>
<data_defined_properties>
<Option type="Map">
<Option value="" name="name" type="QString"/>
<Option name="properties"/>
<Option value="collection" name="type" type="QString"/>
</Option>
</data_defined_properties>
</layer>
</symbol>
</selectionSymbol>
</selection>
<blendMode>0</blendMode>
<featureBlendMode>0</featureBlendMode>
<layerGeometryType>2</layerGeometryType>
</qgis>

43
assets/atlasobjekte.qml Normal file
View File

@@ -0,0 +1,43 @@
<!DOCTYPE qgis PUBLIC 'http://mrcc.com/qgis.dtd' 'SYSTEM'>
<qgis version="3.34.0" styleCategories="AllStyleCategories">
<renderer-v2 type="singleSymbol" symbollevels="0" enableorderby="0" referencescale="-1" forceraster="0">
<symbols>
<symbol alpha="1" type="fill" name="0" force_rhr="0" clip_to_extent="1">
<layer class="SimpleFill" enabled="1" locked="0" pass="0">
<Option type="Map">
<Option name="border_width_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="color" type="QString" value="255,0,0,40"/>
<Option name="joinstyle" type="QString" value="bevel"/>
<Option name="offset" type="QString" value="0,0"/>
<Option name="offset_map_unit_scale" type="QString" value="3x:0,0,0,0,0,0"/>
<Option name="offset_unit" type="QString" value="MM"/>
<Option name="outline_color" type="QString" value="255,0,0,255"/>
<Option name="outline_style" type="QString" value="solid"/>
<Option name="outline_width" type="QString" value="0.8"/>
<Option name="outline_width_unit" type="QString" value="MM"/>
<Option name="style" type="QString" value="solid"/>
</Option>
</layer>
</symbol>
</symbols>
</renderer-v2>
<fieldConfiguration>
<field name="Seitenzahl" configurationFlags="None">
<editWidget type="Range">
<config>
<Option type="Map">
<Option name="AllowNull" type="bool" value="false"/>
<Option name="Max" type="double" value="9999"/>
<Option name="Min" type="double" value="1"/>
<Option name="Precision" type="int" value="0"/>
<Option name="Step" type="double" value="1"/>
<Option name="Style" type="QString" value="SpinBox"/>
</Option>
</config>
</editWidget>
</field>
</fieldConfiguration>
<defaults>
<default field="Seitenzahl" expression="" applyOnUpdate="0"/>
</defaults>
</qgis>

58
doc/Datenbank_ERD.md Normal file
View File

@@ -0,0 +1,58 @@
```mermaid
erDiagram
tbl_akteure{
Int4 fid PK
varchar Bezeichnung
varchar(6) vkz "Verfahren, für das der Akteur relevant ist"
}
tbl_konten{
varchar(3) kontonr
varchar bezeichnung
}
tbl_ausbauart{
int4 id PK
varchar Ausbauart_text
int4 preis
varchar(3) tbe_nr
varchar(3) Ausbauart_nr "Nr. der Ausbauart zur einfacheren Referenz"
}
tbl_Massnahme{
int4 MnNr
int4 Abschnitte FK
}
p41_Massnahmen_linie{
int4 id PK
geom Geometrie
varchar mnnr "Berechnet aus mn_konto und lfd_nr"
varchar mnname
int4 ausbauart FK "ref:tbl_ausbauart.id"
varchar(3) mn_konto FK "ref: tbl_konten.kontonr"
varchar(2) lfd_nr
varchar(1) tbe
bool umsetzung
int4 unterhalt_bisher FK "ref: tbl_akteure.id"
int4 unterhalt_zukuenftig FK "ref: tbl_akteure.id"
int4 bautraeger FK "ref: tbl_akteure.id"
int4 kostentraeger FK "ref: tbl_akteure.id"
int4 Planungsjahr
int4 baujahr
int4 Pflege_Anfang
int4 Pflege_Ende
float8 fahrbahnbreite
float8 gesamtbreite
varchar vorgesehene_regelungen
varchar bemerkungen
int4 laenge
int4 flaeche
varchar foerdersatz
bool ingenieurbauwerk
varchar bildpfad
bool fertiggestellt
int4 ausbauart_nr
bool plangenehmigt
}
tbl_konten ||--o{ p41_Massnahmen_linie : verwendet
tbl_akteure ||--o{ p41_Massnahmen_linie : verwendet
tbl_ausbauart ||--o{ p41_Massnahmen_linie : verwendet
```

39
main.py
View File

@@ -1,11 +1,17 @@
# sn_plan41/main.py
from qgis.utils import plugins
from sn_basis.ui.dockmanager import DockManager
from .ui.dockwidget import DockWidget
from sn_plan41.ui.dockwidget import DockWidget
from sn_basis.modules.DataGrabber import DataGrabber
from sn_basis.modules.Pruefmanager import Pruefmanager
class Plan41:
def __init__(self, iface):
self.iface = iface
self.pruefmanager=Pruefmanager(ui_modus="qgis")
self.data_grabber=DataGrabber(pruefmanager=self.pruefmanager)
self.action = None
self.dockwidget = None
@@ -15,14 +21,17 @@ class Plan41:
def initGui(self):
basis = plugins.get("sn_basis")
if basis and basis.ui:
self.action = basis.ui.add_action(
self.plugin_name,
self.run,
tooltip=f"Öffnet {self.plugin_name}",
priority=20
)
basis.ui.finalize_menu_and_toolbar()
if not basis or not getattr(basis, "ui", None):
return
self.action = basis.ui.add_action(
self.plugin_name,
self.run,
tooltip=f"Öffnet {self.plugin_name}",
priority=20,
)
basis.ui.finalize_menu_and_toolbar()
print("Plan41/sn_Basis:initGui called")
def unload(self):
if self.dockwidget:
@@ -32,13 +41,17 @@ class Plan41:
if self.action:
basis = plugins.get("sn_basis")
if basis and basis.ui:
# Action aus Menü und Toolbar entfernen
if basis and getattr(basis, "ui", None):
basis.ui.remove_action(self.action)
self.action = None
def run(self):
self.dockwidget = DockWidget(self.iface.mainWindow(), subtitle=self.plugin_name)
self.dockwidget = DockWidget(
self.iface.mainWindow(),
subtitle=self.plugin_name,
pruefmanager=self.pruefmanager,
data_grabber=self.data_grabber)
self.dockwidget.setObjectName(self.dock_name)
# Action-Referenz im Dock speichern
@@ -48,5 +61,5 @@ class Plan41:
# Toolbar-Button als aktiv markieren
basis = plugins.get("sn_basis")
if basis and basis.ui:
if basis and getattr(basis, "ui", None):
basis.ui.set_active_plugin(self.action)

View File

@@ -1,8 +1,9 @@
[general]
name=LNO Sachsen | Plan41
qgisMinimumVersion=3.0
qgisMaximumVersion=4.99
description=Plugin zum Erzeugen der Pläne nach §38 und §41
version=25.11.3
version=26.3.11
author=Michael Otto
email=michael.otto@landkreis-mittelsachsen.de
about=Plugin zum Erzeugen der Pläne nach §38 und §41
@@ -10,4 +11,5 @@ category=Plugins
homepage=https://entwicklung.vln-sn.de/AG_QGIS/Plugin_SN_Plan41
repository=https://entwicklung.vln-sn.de/AG_QGIS/Repository
supportsQt6=true
experimental=true
experimental=true

138
modules/listenauswerter.py Normal file
View File

@@ -0,0 +1,138 @@
#sn_plan41/modules/listenauswerter.py
from typing import Any, Dict, List, Mapping, Optional, Tuple
from collections.abc import Mapping as _Mapping
# Prüfer-Typen (werden als Instanzen erwartet)
from sn_basis.modules.Pruefmanager import Pruefmanager # type: ignore
from sn_basis.modules.pruef_ergebnis import pruef_ergebnis
from sn_basis.modules.stilpruefer import Stilpruefer # type: ignore
class Listenauswerter:
"""
Validiert Zeilen aus einem DataDict, das vom DataGrabber stammt.
Erwartet wird die Struktur::
{"rows": [ {attr}, ... ]}
Die Linkprüfung entfällt vollständig, da der DataGrabber nur gültige
Links liefert. Diese Methode prüft ausschließlich die Konsistenz der
Zeilen mit dem erwarteten Datenschema und führt optional eine
Stilprüfung durch.
"""
def __init__(self, pruefmanager, stil_pruefer):
""" Parameters
----------
pruefmanager: Instanz des Pruefmanagers, der pruef_ergebnis verarbeitet.
stil_pruefer: Instanz des Stilpruefers, der Stildateien prüft.
"""
self.pruefmanager = pruefmanager
self.stil_pruefer = stil_pruefer
def validate_rows(
self,
data_dict: Dict[str, List[Mapping[str, Any]]]
) -> Tuple[Dict[str, List[Mapping[str, Any]]], List[Any]]:
"""
Validiert die Zeilen aus ``data_dict`` anhand des erwarteten Schemas.
Erwartete Felder pro Zeile
--------------------------
Pflichtfelder:
- ``ident``: eindeutige Kennung
- ``Link``: bereits geprüfter Link (vom DataGrabber garantiert gültig)
- ``Provider``: Datenquelle (wird in Großbuchstaben normalisiert)
Optionale Felder:
- ``Inhalt``: thematische Beschreibung
- ``Stildatei``: Pfad zur Stildatei (falls vorhanden)
Verhalten
---------
- Zeilen, denen Pflichtfelder fehlen oder deren Werte leer sind,
werden verworfen.
- ``Provider`` wird in Großbuchstaben normalisiert.
- Wenn ``Stildatei`` vorhanden ist, wird sie durch
``self.stil_pruefer.pruefe(...)`` geprüft.
- Bei OK bleibt der Wert erhalten.
- Bei nicht OK wird ``Stildatei`` auf ``None`` gesetzt und das
verarbeitete Prüfergebnis gesammelt.
- Alle Prüfergebnisse werden durch ``self.pruefmanager.verarbeite(...)``
geleitet und in der Rückgabe gesammelt.
Rückgabe
--------
Tuple[Dict[str, List[Mapping[str, Any]]]], List[Any]]
- ``valid_data_dict``: enthält nur Zeilen, die dem Schema entsprechen
- ``processed_results``: Liste der verarbeiteten Prüfergebnisse
Hinweise
--------
- Diese Methode führt **keine Linkprüfung** durch.
- Die Verantwortung für die Linkvalidität liegt vollständig beim DataGrabber.
- Die Methode verändert die Zeilen nur minimal (ProviderNormalisierung,
Stildatei ggf. auf ``None``).
"""
processed_results: List[Any] = []
valid_rows: List[Mapping[str, Any]] = []
# Grundstruktur prüfen
if not isinstance(data_dict, dict):
return {"rows": []}, processed_results
rows = data_dict.get("rows", [])
if not isinstance(rows, (list, tuple)):
return {"rows": []}, processed_results
for raw in rows:
# Sicherstellen, dass raw ein Mapping ist
if not isinstance(raw, _Mapping):
continue
ident = raw.get("ident")
inhalt = raw.get("Inhalt")
link = raw.get("Link")
stildatei = raw.get("stildatei") or raw.get("Stildatei")
provider = raw.get("Provider")
# Pflichtfelder prüfen
if not ident or not link or not provider:
# Fehler dokumentieren
pe = pruef_ergebnis(
ok=False,
meldung="Pflichtfelder fehlen oder sind leer",
aktion="pflichtfelder_fehlen",
kontext=raw,
)
processed_results.append(self.pruefmanager.verarbeite(pe))
continue
# Provider normalisieren
provider_norm = str(provider).upper()
# Stildatei prüfen (falls vorhanden)
if stildatei:
pe_stil = self.stil_pruefer.pruefe(stildatei)
processed_stil = self.pruefmanager.verarbeite(pe_stil)
if not getattr(processed_stil, "ok", False):
processed_results.append(processed_stil)
stildatei_value: Optional[str] = None
else:
stildatei_value = stildatei
else:
stildatei_value = None
# Validierte Zeile zusammenbauen
validated_row = {
"ident": ident,
"Inhalt": inhalt,
"Link": link,
"stildatei": stildatei_value,
"Stildatei": stildatei_value,
"Provider": provider_norm,
}
valid_rows.append(validated_row)
result_dict = {"rows": valid_rows}
return result_dict, processed_results

10
plugin.cfg Normal file
View File

@@ -0,0 +1,10 @@
name=LNO Sachsen | Plan41
description=Plugin zum Erzeugen der Pläne nach §38 und §41
author=Michael Otto
email=michael.otto@landkreis-mittelsachsen.de
qgisMinimumVersion=3.0
qgisMaximumVersion=4.99
deprecated=False
experimental=True
supportsQt6=Yes
zip_folder=plugin_folder

10
plugin.info Normal file
View File

@@ -0,0 +1,10 @@
name=LNO Sachsen | Plan41
description=Plugin zum Erzeugen der Pläne nach §38 und §41
author=Michael Otto
email=michael.otto@landkreis-mittelsachsen.de
qgisMinimumVersion=3.0
qgisMaximumVersion=4.99
deprecated=False
experimental=True
supportsQt6=Yes
zip_folder=plugin_folder

1
tests/__init__.py Normal file
View File

@@ -0,0 +1 @@
#Testordner

148
tests/run_tests.py Normal file
View File

@@ -0,0 +1,148 @@
"""
sn_plan41/test/run_tests.py
Zentraler Test-Runner für sn_plan41.
Wrapper-konform, QGIS-unabhängig, CI- und IDE-fähig.
"""
import unittest
import datetime
import inspect
import os
import sys
from pathlib import Path
# ---------------------------------------------------------
# Plugin-Roots bestimmen
# ---------------------------------------------------------
THIS_FILE = Path(__file__).resolve()
# .../plugins/sn_plan41
SN_PLAN41_ROOT = THIS_FILE.parents[1]
# .../plugins/sn_basis
SN_BASIS_ROOT = SN_PLAN41_ROOT.parent / "sn_basis"
# ---------------------------------------------------------
# sys.path Bootstrap
# ---------------------------------------------------------
for path in (SN_PLAN41_ROOT, SN_BASIS_ROOT):
path_str = str(path)
if path_str not in sys.path:
sys.path.insert(0, path_str)
# ---------------------------------------------------------
# Farben
# ---------------------------------------------------------
RED = "\033[91m"
YELLOW = "\033[93m"
GREEN = "\033[92m"
CYAN = "\033[96m"
MAGENTA = "\033[95m"
RESET = "\033[0m"
GLOBAL_TEST_COUNTER = 0
# ---------------------------------------------------------
# Farbige TestResult-Klasse
# ---------------------------------------------------------
class ColoredTestResult(unittest.TextTestResult):
_last_test_class = None
def startTest(self, test):
global GLOBAL_TEST_COUNTER
GLOBAL_TEST_COUNTER += 1
self.stream.write(f"{CYAN}[Test {GLOBAL_TEST_COUNTER}]{RESET}\n")
super().startTest(test)
def startTestClass(self, test):
cls = test.__class__
file = inspect.getfile(cls)
filename = os.path.basename(file)
self.stream.write(
f"\n{MAGENTA}{'=' * 70}\n"
f"Starte Testklasse: {filename}{cls.__name__}\n"
f"{'=' * 70}{RESET}\n"
)
def addError(self, test, err):
super().addError(test, err)
self.stream.write(f"{RED}ERROR{RESET}\n")
def addFailure(self, test, err):
super().addFailure(test, err)
self.stream.write(f"{RED}FAILURE{RESET}\n")
def addSkip(self, test, reason):
super().addSkip(test, reason)
self.stream.write(f"{YELLOW}SKIPPED{RESET}: {reason}\n")
def addSuccess(self, test):
super().addSuccess(test)
self.stream.write(f"{GREEN}OK{RESET}\n")
# ---------------------------------------------------------
# Farbiger TestRunner
# ---------------------------------------------------------
class ColoredTestRunner(unittest.TextTestRunner):
def _makeResult(self):
result = ColoredTestResult(
self.stream,
self.descriptions,
self.verbosity,
)
original_start_test = result.startTest
def patched_start_test(test):
if result._last_test_class != test.__class__:
result.startTestClass(test)
result._last_test_class = test.__class__
original_start_test(test)
result.startTest = patched_start_test
return result
# ---------------------------------------------------------
# Testlauf starten
# ---------------------------------------------------------
def main():
print("\n" + "=" * 70)
print(
f"{CYAN}Testlauf gestartet am: "
f"{datetime.datetime.now():%Y-%m-%d %H:%M:%S}{RESET}"
)
print("=" * 70 + "\n")
loader = unittest.TestLoader()
TEST_ROOT = SN_PLAN41_ROOT / "tests"
suite = loader.discover(
start_dir=str(TEST_ROOT),
pattern="test_*.py",
top_level_dir=str(SN_PLAN41_ROOT.parent),
)
runner = ColoredTestRunner(verbosity=2)
result = runner.run(suite)
return 0 if result.wasSuccessful() else 1
if __name__ == "__main__":
raise SystemExit(main())

View File

@@ -0,0 +1,9 @@
@echo off
SET OSGEO4W_ROOT=D:\QGISQT5
call %OSGEO4W_ROOT%\bin\o4w_env.bat
set QGIS_PREFIX_PATH=%OSGEO4W_ROOT%\apps\qgis
set PYTHONPATH=%QGIS_PREFIX_PATH%\python;%PYTHONPATH%
set PATH=%OSGEO4W_ROOT%\bin;%QGIS_PREFIX_PATH%\bin;%PATH%
REM Neue Eingabeaufforderung starten und Python-Skript ausführen
start cmd /k "python run_tests.py"

153
tests/test_tab_a_logic.py Normal file
View File

@@ -0,0 +1,153 @@
import unittest
from pathlib import Path
from tempfile import TemporaryDirectory
from sn_plan41.ui.tab_a_logic import TabALogic # type: ignore
from sn_basis.functions.variable_wrapper import get_variable # type: ignore
from sn_basis.functions.sys_wrapper import file_exists # type: ignore
class TestTabALogic(unittest.TestCase):
# -----------------------------------------------------
# 1. Verfahrens-DB setzen und laden
# -----------------------------------------------------
def test_verfahrens_db_set_and_load(self):
logic = TabALogic()
with TemporaryDirectory() as tmp:
db_path = Path(tmp) / "test.gpkg"
db_path.write_text("")
logic.set_verfahrens_db(str(db_path))
stored = get_variable("verfahrens_db", scope="project")
self.assertEqual(stored, str(db_path))
loaded = logic.load_verfahrens_db()
self.assertEqual(loaded, str(db_path))
# -----------------------------------------------------
# 2. Verfahrens-DB löschen
# -----------------------------------------------------
def test_verfahrens_db_clear(self):
logic = TabALogic()
logic.set_verfahrens_db(None)
stored = get_variable("verfahrens_db", scope="project")
self.assertEqual(stored, "")
# -----------------------------------------------------
# 3. Neue Verfahrens-DB anlegen
# -----------------------------------------------------
def test_create_new_verfahrens_db(self):
logic = TabALogic()
with TemporaryDirectory() as tmp:
db_path = Path(tmp) / "neu.gpkg"
result = logic.create_new_verfahrens_db(str(db_path))
self.assertTrue(result)
self.assertTrue(file_exists(db_path))
stored = get_variable("verfahrens_db", scope="project")
self.assertEqual(stored, str(db_path))
def test_create_new_verfahrens_db_with_none_path(self):
logic = TabALogic()
result = logic.create_new_verfahrens_db(None)
self.assertFalse(result)
# -----------------------------------------------------
# 4. Linkliste setzen und laden
# -----------------------------------------------------
def test_linkliste_set_and_load(self):
logic = TabALogic()
with TemporaryDirectory() as tmp:
link_path = Path(tmp) / "links.xlsx"
link_path.write_text("dummy")
logic.set_linkliste(str(link_path))
stored = get_variable("linkliste", scope="project")
self.assertEqual(stored, str(link_path))
loaded = logic.load_linkliste()
self.assertEqual(loaded, str(link_path))
# -----------------------------------------------------
# 5. Linkliste löschen
# -----------------------------------------------------
def test_linkliste_clear(self):
logic = TabALogic()
logic.set_linkliste(None)
stored = get_variable("linkliste", scope="project")
self.assertEqual(stored, "")
# -----------------------------------------------------
# 6. Layer-ID speichern
# -----------------------------------------------------
def test_verfahrensgebiet_layer_id_storage(self):
logic = TabALogic()
class MockLayer:
def id(self):
return "layer-123"
logic.save_verfahrensgebiet_layer(MockLayer())
stored = get_variable("verfahrensgebiet_layer", scope="project")
self.assertEqual(stored, "layer-123")
# -----------------------------------------------------
# 7. Ungültiger Layer wird ignoriert
# -----------------------------------------------------
def test_invalid_layer_is_rejected(self):
logic = TabALogic()
class InvalidLayer:
pass
logic.save_verfahrensgebiet_layer(InvalidLayer())
stored = get_variable("verfahrensgebiet_layer", scope="project")
self.assertEqual(stored, "")
#-----------------------------------------------------
# 8. Layer-ID wirft Exception
#----------------------------------------------------
def test_layer_id_raises_exception(self):
logic = TabALogic()
class BadLayer:
def id(self):
raise RuntimeError("boom")
logic.save_verfahrensgebiet_layer(BadLayer())
stored = get_variable("verfahrensgebiet_layer", scope="project")
self.assertEqual(stored, "")
# -----------------------------------------------------
# 11. Layer ID wird leer zurückgegeben
# -----------------------------------------------------
def test_layer_id_returns_empty(self):
logic = TabALogic()
class EmptyLayer:
def id(self):
return ""
logic.save_verfahrensgebiet_layer(EmptyLayer())
stored = get_variable("verfahrensgebiet_layer", scope="project")
self.assertEqual(stored, "")
if __name__ == "__main__":
unittest.main()

57
tests/test_tab_a_ui.py Normal file
View File

@@ -0,0 +1,57 @@
"""
Smoke-Tests für TabA UI (sn_plan41/ui/tab_a_ui.py)
Ziel:
- UI kann erstellt werden
- Callbacks crashen nicht
- Keine Qt-Verhaltensprüfung
"""
import unittest
from sn_plan41.ui.tab_a_ui import TabA #type:ignore
class TestTabAUI(unittest.TestCase):
# -----------------------------------------------------
# 1. UI kann erstellt werden
# -----------------------------------------------------
def test_tab_a_ui_can_be_created(self):
tab = TabA(parent=None,build_ui=False)
self.assertIsNotNone(tab)
self.assertEqual(tab.tab_title, "Daten")
# -----------------------------------------------------
# 2. Toggle-Callbacks crashen nicht
# -----------------------------------------------------
def test_tab_a_toggle_callbacks_do_not_crash(self):
tab = TabA(parent=None,build_ui=False)
tab._toggle_group(True)
tab._toggle_group(False)
tab._toggle_optional(True)
tab._toggle_optional(False)
# -----------------------------------------------------
# 3. Datei-Callbacks akzeptieren leere Eingaben
# -----------------------------------------------------
def test_tab_a_file_callbacks_accept_empty_input(self):
tab = TabA(parent=None,build_ui=False)
tab._on_verfahrens_db_changed("")
tab._on_linkliste_changed("")
# -----------------------------------------------------
# 4. Layer-Callback akzeptiert None
# -----------------------------------------------------
def test_tab_a_layer_callback_accepts_none(self):
tab = TabA(parent=None,build_ui=False)
tab._on_layer_changed(None)
if __name__ == "__main__":
unittest.main()

View File

@@ -1,7 +1,45 @@
from sn_basis.ui.tabs.settings_tab import SettingsTab
from sn_plan41.ui.tabs.tab_a import TabA
from sn_plan41.ui.tabs.tab_b import TabB
#sn_plan41/ui/dockwidget.py
from sn_basis.ui.tabs.settings_tab import SettingsTab
from sn_plan41.ui.tab_a_ui import TabA
from sn_plan41.ui.tab_b_ui import TabB
from sn_basis.ui.base_dockwidget import BaseDockWidget
from sn_basis.functions.qt_wrapper import QTabWidget
from sn_basis.functions.message_wrapper import error
class DockWidget(BaseDockWidget):
tabs = [TabA, TabB, SettingsTab]
tabs = [TabA, TabB,SettingsTab]
def __init__(self, parent=None, subtitle="", pruefmanager=None, data_grabber=None):
super().__init__(parent, subtitle)
# Services als Attribute speichern
self.pruefmanager = pruefmanager
self.data_grabber = data_grabber
# Tabs NACH Services initialisieren (override der Basis-Logik)
self._init_tabs_with_services()
def _init_tabs_with_services(self):
"""Tabs mit pruefmanager/data_grabber initialisieren"""
try:
# Bestehendes TabWidget löschen
self.setWidget(None)
tab_widget = QTabWidget()
for tab_class in self.tabs:
tab_instance = tab_class(self) # parent=self.dockwidget
tab_title = getattr(tab_class, "tab_title", tab_class.__name__)
tab_widget.addTab(tab_instance, tab_title)
# Services durchreichen
if hasattr(tab_instance, 'set_services'):
tab_instance.set_services(
pruefmanager=self.pruefmanager,
data_grabber=self.data_grabber
)
self.setWidget(tab_widget)
except Exception as e:
error("Services-Tabs konnten nicht initialisiert werden", str(e))

431
ui/layout.py Normal file
View File

@@ -0,0 +1,431 @@
"""
sn_plan41/ui/layout.py Aufbau von Drucklayouts für Plan41.
"""
from __future__ import annotations
import math
from typing import Any
from sn_basis.functions.qt_wrapper import QFont
from sn_basis.functions.qgiscore_wrapper import (
QgsLayoutItem,
QgsLayoutItemLabel,
QgsLayoutItemMap,
QgsLayoutPoint,
QgsLayoutSize,
QgsPrintLayout,
QgsProject,
QgsUnitTypes,
)
from sn_basis.functions.qgisui_wrapper import open_layout_designer
MM = QgsUnitTypes.LayoutMillimeters
class Layout:
"""Erzeugt ein QGIS-Layout für den Druck."""
def __init__(self, project: Any | None = None) -> None:
self.project = project or QgsProject.instance()
def create_single_page_layout(
self,
name: str,
page_width_mm: float,
page_height_mm: float,
map_width_mm: float,
map_height_mm: float,
extent: Any,
plotmassstab: float,
thema: str = "",
) -> Any:
"""Erzeugt ein einseitiges Layout und öffnet es im Designer."""
print(f"[Layout] create_single_page_layout: name='{name}', "
f"page=({page_width_mm}x{page_height_mm}), map=({map_width_mm:.1f}x{map_height_mm:.1f}), "
f"massstab={plotmassstab}, thema='{thema}'")
layout_manager = self.project.layoutManager()
print(f"[Layout] layoutManager: {layout_manager!r}")
existing_layout = layout_manager.layoutByName(name)
if existing_layout is not None:
raise ValueError(f"Eine Vorlage mit der Bezeichnung '{name}' existiert bereits.")
layout = QgsPrintLayout(self.project)
layout.initializeDefaults()
layout.setName(name)
print(f"[Layout] QgsPrintLayout erstellt: {layout!r}")
page = layout.pageCollection().page(0)
page.setPageSize(QgsLayoutSize(page_width_mm, page_height_mm, MM))
print(f"[Layout] Seitengröße gesetzt: {page_width_mm}x{page_height_mm} mm")
map_left_mm = 10.0
map_top_mm = 10.0
map_right_mm = map_left_mm + map_width_mm
map_bottom_mm = map_top_mm + map_height_mm
print(
f"[Layout] Kartenbild-Kanten: rechts={map_right_mm:.1f} mm, unten={map_bottom_mm:.1f} mm"
)
hauptkarte = QgsLayoutItemMap(layout)
hauptkarte.setId("Hauptkarte")
print(f"[Layout] QgsLayoutItemMap erstellt")
# Zum Layout hinzufügen, BEVOR Eigenschaften gesetzt werden
layout.addLayoutItem(hauptkarte)
print("[Layout] Hauptkarte zum Layout hinzugefügt")
# Position und Größe setzen
hauptkarte.attemptMove(QgsLayoutPoint(map_left_mm, map_top_mm, MM))
hauptkarte.attemptResize(QgsLayoutSize(map_width_mm, map_height_mm, MM))
print(f"[Layout] Position und Größe gesetzt: pos=({map_left_mm}, {map_top_mm}), size=({map_width_mm:.1f}x{map_height_mm:.1f})")
# Extent und Maßstab setzen
x_min = getattr(extent, "xMinimum", lambda: float("nan"))()
y_min = getattr(extent, "yMinimum", lambda: float("nan"))()
x_max = getattr(extent, "xMaximum", lambda: float("nan"))()
y_max = getattr(extent, "yMaximum", lambda: float("nan"))()
print(f"[Layout] Extent input: xmin={x_min}, ymin={y_min}, xmax={x_max}, ymax={y_max}")
if extent is not None and hasattr(extent, "isNull") and callable(extent.isNull) and not extent.isNull():
try:
hauptkarte.setExtent(extent)
print(f"[Layout] setExtent() erfolgreich")
except Exception as exc:
print(f"[Layout] WARN: setExtent() fehlgeschlagen: {exc}")
else:
print(f"[Layout] WARN: Extent nicht gültig/callable, setExtent übersprungen")
# Maßstab setzen (NACH Extent)
if isinstance(plotmassstab, (int, float)) and math.isfinite(plotmassstab) and plotmassstab > 0:
try:
hauptkarte.setScale(plotmassstab)
print(f"[Layout] setScale({plotmassstab}) erfolgreich")
except Exception as exc:
print(f"[Layout] WARN: setScale({plotmassstab}) fehlgeschlagen: {exc}")
else:
print(f"[Layout] WARN: ungültiger plotmassstab={plotmassstab!r}, setScale übersprungen")
# Rahmen aktivieren
set_frame_enabled = getattr(hauptkarte, "setFrameEnabled", None)
if callable(set_frame_enabled):
try:
set_frame_enabled(True)
print(f"[Layout] Rahmen aktiviert")
except Exception as exc:
print(f"[Layout] WARN: setFrameEnabled fehlgeschlagen: {exc}")
set_frame_stroke_width = getattr(hauptkarte, "setFrameStrokeWidth", None)
if callable(set_frame_stroke_width):
try:
set_frame_stroke_width(0.5)
print(f"[Layout] Rahmenstrichbreite auf 0.5 mm gesetzt")
except Exception as exc:
print(f"[Layout] WARN: setFrameStrokeWidth(0.5) fehlgeschlagen: {exc}")
# Kartenthema setzen
if thema and thema != "aktuell":
follow_theme = getattr(hauptkarte, "setFollowVisibilityPreset", None)
set_theme_name = getattr(hauptkarte, "setFollowVisibilityPresetName", None)
if callable(follow_theme):
try:
follow_theme(True)
print(f"[Layout] setFollowVisibilityPreset(True)")
except Exception as exc:
print(f"[Layout] WARN: setFollowVisibilityPreset fehlgeschlagen: {exc}")
if callable(set_theme_name):
try:
set_theme_name(thema)
print(f"[Layout] Kartenthema auf '{thema}' gesetzt")
except Exception as exc:
print(f"[Layout] WARN: setFollowVisibilityPresetName('{thema}') fehlgeschlagen: {exc}")
else:
print(f"[Layout] Kartenthema nicht gesetzt (thema='{thema}')")
# Erst nach allen Properties: LayerSet einfrieren für Export
set_keep_layer_set = getattr(hauptkarte, "setKeepLayerSet", None)
if callable(set_keep_layer_set):
try:
set_keep_layer_set(True)
print("[Layout] setKeepLayerSet(True) Layerset für Export erhalten")
except Exception as exc:
print(f"[Layout] WARN: setKeepLayerSet fehlgeschlagen: {exc}")
# Refresh-Strategie (optional, nur wenn vorhanden)
set_refresh_strategy = getattr(hauptkarte, "setRefreshStrategy", None)
if callable(set_refresh_strategy):
refresh_cache = getattr(hauptkarte, "RefreshLaterOnly", None) or getattr(hauptkarte, "RefreshWhenRequested", None) or 0
if refresh_cache is not None:
try:
set_refresh_strategy(refresh_cache)
print(f"[Layout] setRefreshStrategy({refresh_cache}) gesetzt")
except Exception as exc:
print(f"[Layout] WARN: setRefreshStrategy fehlgeschlagen: {exc}")
print(f"[Layout] Hauptkarte vollständig konfiguriert")
quellenangabe = QgsLayoutItemLabel(layout)
quellenangabe.setId("Quellenangabe")
quellenangabe.setText(
"Quelle Geobasisdaten: GeoSN, "
"<a href=\"https://www.govdata.de/dl-de/by-2-0\">dl-de/by-2-0</a><br><br>"
"Quelle Fachdaten: Darstellung auf der Grundlage von Daten und mit Erlaubnis des "
"Sächsischen Landesamtes für Umwelt, Landwirtschaft und Geologie<br><br>"
"Basemap:<br><br>"
"© GeoBasis-DE / <a href=\"https://www.bkg.bund.de\">BKG</a> ([%year($now)%]) "
"<a href=\"https://creativecommons.org/licences/by/4.0/\">CC BY 4.0</a> "
"mit teilweise angepasster Signatur<br>"
)
set_mode = getattr(quellenangabe, "setMode", None)
mode_html = getattr(QgsLayoutItemLabel, "ModeHtml", None)
print(f"[Layout] QgsLayoutItemLabel.ModeHtml={mode_html!r}")
if callable(set_mode) and mode_html is not None:
set_mode(mode_html)
quellenangabe.setFont(QFont("Arial", 12))
set_reference_point = getattr(quellenangabe, "setReferencePoint", None)
lower_left = getattr(getattr(QgsLayoutItem, "ReferencePoint", object), "LowerLeft", None)
print(f"[Layout] QgsLayoutItem.ReferencePoint.LowerLeft={lower_left!r}")
if callable(set_reference_point) and lower_left is not None:
set_reference_point(lower_left)
quellenangabe_x_mm = map_right_mm + 20.0
quellenangabe_y_mm = map_bottom_mm - 120.0
quellenangabe.attemptMove(QgsLayoutPoint(quellenangabe_x_mm, quellenangabe_y_mm, MM))
quellenangabe.attemptResize(QgsLayoutSize(180.0, 100.0, MM))
layout.addLayoutItem(quellenangabe)
print("[Layout] Quellenangabe zum Layout hinzugefügt")
layout_manager.addLayout(layout)
print("[Layout] Layout zum LayoutManager hinzugefügt")
open_layout_designer(layout)
print("[Layout] Layout Designer geöffnet")
return layout
def create_atlas_layout(
self,
name: str,
page_width_mm: float,
page_height_mm: float,
map_width_mm: float,
map_height_mm: float,
extent: Any,
plotmassstab: float,
atlas_layer: Any,
thema: str = "",
) -> Any:
"""Erzeugt ein Atlas-Layout mit Coverage-Layer ``Atlasobjekte``."""
layout_manager = self.project.layoutManager()
existing_layout = layout_manager.layoutByName(name)
if existing_layout is not None:
raise ValueError(f"Eine Vorlage mit der Bezeichnung '{name}' existiert bereits.")
layout = QgsPrintLayout(self.project)
layout.initializeDefaults()
layout.setName(name)
page = layout.pageCollection().page(0)
page.setPageSize(QgsLayoutSize(page_width_mm, page_height_mm, MM))
# Verifiziere, dass QGIS die Größe akzeptiert hat
page_size = page.pageSize() if hasattr(page, 'pageSize') else None
if page_size is not None and hasattr(page_size, 'width'):
actual_w = float(page_size.width())
actual_h = float(page_size.height())
print(f"[Layout] Atlas Page gesetzt: x=0, y=0, width={page_width_mm:.1f}mm→{actual_w:.1f}mm, height={page_height_mm:.1f}mm→{actual_h:.1f}mm")
else:
print(f"[Layout] Atlas Page: x=0, y=0, width={page_width_mm:.1f}mm, height={page_height_mm:.1f}mm")
map_left_mm = 10.0
map_top_mm = 10.0
map_right_mm = map_left_mm + map_width_mm
map_bottom_mm = map_top_mm + map_height_mm
hauptkarte = QgsLayoutItemMap(layout)
hauptkarte.setId("Hauptkarte")
layout.addLayoutItem(hauptkarte)
hauptkarte.attemptMove(QgsLayoutPoint(map_left_mm, map_top_mm, MM))
hauptkarte.attemptResize(QgsLayoutSize(map_width_mm, map_height_mm, MM))
# Verifiziere mit Units-bewussten Methoden (rect() kann andere Units verwenden).
actual_w = None
actual_h = None
actual_x = None
actual_y = None
# Versuche zuerst, die Größe mit Unit-Methoden zu lesen
try:
if hasattr(hauptkarte, 'sizeWithUnits'):
size_item = hauptkarte.sizeWithUnits()
if hasattr(size_item, 'width') and hasattr(size_item, 'height'):
actual_w = float(size_item.width())
actual_h = float(size_item.height())
except Exception:
pass
try:
if hasattr(hauptkarte, 'positionWithUnits'):
pos_item = hauptkarte.positionWithUnits()
if hasattr(pos_item, 'x') and hasattr(pos_item, 'y'):
actual_x = float(pos_item.x())
actual_y = float(pos_item.y())
except Exception:
pass
# Fallback: nutze rect() und teile durch UnitFaktor, falls nötig
if actual_w is None or actual_h is None:
try:
actual_rect = hauptkarte.rect()
if actual_rect is not None:
actual_w = float(actual_rect.width())
actual_h = float(actual_rect.height())
actual_x = float(actual_rect.x())
actual_y = float(actual_rect.y())
except Exception:
pass
if actual_w is not None and actual_h is not None:
print(f"[Layout] Atlas Hauptkarte gesetzt: x={map_left_mm:.1f}mm→{actual_x:.1f}mm, y={map_top_mm:.1f}mm→{actual_y:.1f}mm, width={map_width_mm:.1f}mm→{actual_w:.1f}mm, height={map_height_mm:.1f}mm→{actual_h:.1f}mm")
else:
print(f"[Layout] Atlas Hauptkarte: x={map_left_mm:.1f}mm, y={map_top_mm:.1f}mm, width={map_width_mm:.1f}mm, height={map_height_mm:.1f}mm")
if extent is not None and hasattr(extent, "isNull") and callable(extent.isNull) and not extent.isNull():
try:
hauptkarte.setExtent(extent)
except Exception:
pass
if isinstance(plotmassstab, (int, float)) and math.isfinite(plotmassstab) and plotmassstab > 0:
try:
hauptkarte.setScale(plotmassstab)
except Exception:
pass
set_frame_enabled = getattr(hauptkarte, "setFrameEnabled", None)
if callable(set_frame_enabled):
try:
set_frame_enabled(True)
except Exception:
pass
set_frame_stroke_width = getattr(hauptkarte, "setFrameStrokeWidth", None)
if callable(set_frame_stroke_width):
try:
set_frame_stroke_width(0.5)
except Exception:
pass
if thema and thema != "aktuell":
follow_theme = getattr(hauptkarte, "setFollowVisibilityPreset", None)
set_theme_name = getattr(hauptkarte, "setFollowVisibilityPresetName", None)
if callable(follow_theme):
try:
follow_theme(True)
except Exception:
pass
if callable(set_theme_name):
try:
set_theme_name(thema)
except Exception:
pass
set_atlas_driven = getattr(hauptkarte, "setAtlasDriven", None)
if callable(set_atlas_driven):
try:
set_atlas_driven(True)
except Exception:
pass
# Fester Atlas-Maßstab: plotmassstab bleibt unverändert.
set_scaling_mode = getattr(hauptkarte, "setAtlasScalingMode", None)
if callable(set_scaling_mode):
fixed_mode = getattr(QgsLayoutItemMap, "Fixed", None)
if fixed_mode is not None:
try:
set_scaling_mode(fixed_mode)
except Exception:
pass
set_atlas_margin = getattr(hauptkarte, "setAtlasMargin", None)
if callable(set_atlas_margin):
try:
set_atlas_margin(0.0)
except Exception:
pass
set_keep_layer_set = getattr(hauptkarte, "setKeepLayerSet", None)
if callable(set_keep_layer_set):
try:
set_keep_layer_set(True)
except Exception:
pass
# Sicherheit: Größe nochmal nach Atlas-Konfiguration setzen, um sicherzustellen, dass sie nicht von der Atlas-Einstellung überschrieben wurde.
hauptkarte.attemptResize(QgsLayoutSize(map_width_mm, map_height_mm, MM))
print(f"[Layout] Atlas Hauptkarte Größe nach Atlas-Konfiguration erneut gesetzt: {map_width_mm:.1f}mm × {map_height_mm:.1f}mm")
quellenangabe = QgsLayoutItemLabel(layout)
quellenangabe.setId("Quellenangabe")
quellenangabe.setText(
"Quelle Geobasisdaten: GeoSN, "
"<a href=\"https://www.govdata.de/dl-de/by-2-0\">dl-de/by-2-0</a><br><br>"
"Quelle Fachdaten: Darstellung auf der Grundlage von Daten und mit Erlaubnis des "
"Sächsischen Landesamtes für Umwelt, Landwirtschaft und Geologie<br><br>"
"Basemap:<br><br>"
"© GeoBasis-DE / <a href=\"https://www.bkg.bund.de\">BKG</a> ([%year($now)%]) "
"<a href=\"https://creativecommons.org/licences/by/4.0/\">CC BY 4.0</a> "
"mit teilweise angepasster Signatur<br>"
)
set_mode = getattr(quellenangabe, "setMode", None)
mode_html = getattr(QgsLayoutItemLabel, "ModeHtml", None)
if callable(set_mode) and mode_html is not None:
set_mode(mode_html)
quellenangabe.setFont(QFont("Arial", 12))
set_reference_point = getattr(quellenangabe, "setReferencePoint", None)
lower_left = getattr(getattr(QgsLayoutItem, "ReferencePoint", object), "LowerLeft", None)
if callable(set_reference_point) and lower_left is not None:
set_reference_point(lower_left)
quellenangabe.attemptMove(QgsLayoutPoint(map_right_mm + 5.0, map_bottom_mm, MM))
quellenangabe.attemptResize(QgsLayoutSize(180.0, 100.0, MM))
layout.addLayoutItem(quellenangabe)
seitenzahl_label = QgsLayoutItemLabel(layout)
seitenzahl_label.setId("Seitenzahl")
seitenzahl_label.setFont(QFont("Arial", 12))
set_expr_enabled = getattr(seitenzahl_label, "setExpressionEnabled", None)
if callable(set_expr_enabled):
try:
set_expr_enabled(True)
except Exception:
pass
# Ausdrucksauswertung robust über [% ... %]-Platzhalter.
seitenzahl_label.setText(
"Seite [% attribute(@atlas_feature, 'Seitenzahl') %] von [% @atlas_totalfeatures %]"
)
set_reference_point = getattr(seitenzahl_label, "setReferencePoint", None)
lower_left = getattr(getattr(QgsLayoutItem, "ReferencePoint", object), "LowerLeft", None)
if callable(set_reference_point) and lower_left is not None:
set_reference_point(lower_left)
seitenzahl_label.attemptMove(QgsLayoutPoint(map_right_mm + 5.0, map_bottom_mm - 2.0, MM))
seitenzahl_label.attemptResize(QgsLayoutSize(60.0, 8.0, MM))
layout.addLayoutItem(seitenzahl_label)
atlas = layout.atlas()
if atlas is not None:
set_enabled = getattr(atlas, "setEnabled", None)
set_coverage = getattr(atlas, "setCoverageLayer", None)
set_hide_coverage = getattr(atlas, "setHideCoverage", None)
set_filter_features = getattr(atlas, "setFilterFeatures", None)
set_page_name = getattr(atlas, "setPageNameExpression", None)
if callable(set_enabled):
set_enabled(True)
if callable(set_coverage):
set_coverage(atlas_layer)
if callable(set_hide_coverage):
set_hide_coverage(True)
if callable(set_filter_features):
set_filter_features(False)
if callable(set_page_name):
set_page_name("attribute(@atlas_feature, 'Seitenzahl')")
layout_manager.addLayout(layout)
open_layout_designer(layout)
return layout

1070
ui/tab_a_logic.py Normal file

File diff suppressed because it is too large Load Diff

317
ui/tab_a_ui.py Normal file
View File

@@ -0,0 +1,317 @@
"""
sn_plan41/ui/tab_a_ui.py UI für Tab A (Daten)
"""
from __future__ import annotations
from typing import Optional
from sn_basis.functions.qt_wrapper import (
QWidget,
QVBoxLayout,
QLabel,
QPushButton,
QToolButton,
QFileDialog,
QMessageBox,
ToolButtonTextBesideIcon,
ArrowDown,
ArrowRight,
SizePolicyPreferred,
SizePolicyMaximum,
QComboBox,
)
from sn_basis.functions.qgisui_wrapper import QgsFileWidget, QgsMapLayerComboBox
from sn_basis.functions.qgiscore_wrapper import QgsProject, QgsMapLayerProxyModel
from sn_basis.functions.variable_wrapper import get_variable, set_variable
from sn_basis.modules.pruef_ergebnis import pruef_ergebnis
# Services (werden von DockWidget injiziert)
from sn_basis.modules.Pruefmanager import Pruefmanager
from sn_basis.modules.DataGrabber import DataGrabber
from sn_basis.modules.Dateipruefer import Dateipruefer
from sn_plan41.ui.tab_a_logic import TabALogic
from sn_basis.modules.linkpruefer import Linkpruefer
from sn_basis.modules.stilpruefer import Stilpruefer
# Konstanten
RAUMFILTER_VAR = "Raumfilter"
RAUMFILTER_OPTIONS = ("Verfahrensgebiet", "Pufferlayer", "ohne")
RAUMFILTER_DEFAULT = "Pufferlayer"
class TabA(QWidget):
"""
UI-Klasse für Tab A (Daten) des Plan41-Plugins.
Zuständig für:
- Anzeige und Auswahl von Verfahrens-DB, Linklisten und Layern
- Steuerung der Pipeline über "Fachdaten laden"
- Persistierung von UI-States via Projektvariablen
Services (Pruefmanager, DataGrabber) werden zur Laufzeit vom DockWidget injiziert.
Alle fachlichen Prüfungen laufen über den zentralen Pruefmanager.
"""
tab_title = "Daten" #: Tab-Titel für BaseDockWidget
def __init__(self, parent: Optional[QWidget] = None):
"""
Initialisiert die UI-Struktur.
Services werden später über :meth:`set_services` injiziert.
:param parent: Parent-Widget (typischerweise DockWidget)
"""
super().__init__(parent)
# Services (werden von DockWidget gesetzt)
self.pruefmanager: Optional[Pruefmanager] = None
self.logic: Optional[TabALogic] = None
# UI-State
self.verfahrens_db: Optional[str] = None
self.lokale_linkliste: Optional[str] = None
self._pufferlayer = None
self._attributes_list = []
# UI-Referenzen
self._raumfilter_combo: Optional[QComboBox] = None
self._build_ui()
self._restore_state()
def set_services(self, pruefmanager: Pruefmanager, data_grabber: DataGrabber) -> None:
"""
Injiziert Services vom übergeordneten DockWidget.
:param pruefmanager: Zentrale Prüfmanager-Instanz
:param data_grabber: DataGrabber für Quellenprüfung/Abruf
"""
self.pruefmanager = pruefmanager
self.data_grabber = data_grabber
self.logic = TabALogic(
pruefmanager=self.pruefmanager,
link_pruefer=Linkpruefer(),
stil_pruefer=Stilpruefer(),
)
# DataGrabber in die Logik injizieren
self.logic.data_grabber = self.data_grabber
def _build_ui(self) -> None:
"""Erstellt die komplette UI-Hierarchie mit allen Gruppen."""
main_layout = QVBoxLayout()
main_layout.setSpacing(4)
main_layout.setContentsMargins(4, 4, 4, 4)
# === VERFAHRENS-DATENBANK ===
self.group_button = QToolButton()
self.group_button.setText("Verfahrens-Datenbank")
self.group_button.setCheckable(True)
self.group_button.setChecked(True)
self.group_button.setToolButtonStyle(ToolButtonTextBesideIcon)
self.group_button.setArrowType(ArrowDown)
self.group_button.setStyleSheet("font-weight: bold;")
self.group_button.toggled.connect(self._toggle_group)
main_layout.addWidget(self.group_button)
self.group_content = QWidget()
self.group_content.setSizePolicy(SizePolicyPreferred, SizePolicyMaximum)
group_layout = QVBoxLayout()
group_layout.setSpacing(2)
group_layout.setContentsMargins(10, 4, 4, 4)
group_layout.addWidget(QLabel("bestehende Datei auswählen"))
self.file_widget = QgsFileWidget()
self.file_widget.setStorageMode(QgsFileWidget.GetFile)
self.file_widget.setFilter("Geopackage (*.gpkg)")
self.file_widget.fileChanged.connect(self._on_verfahrens_db_changed)
group_layout.addWidget(self.file_widget)
group_layout.addWidget(QLabel("-oder-"))
self.btn_new = QPushButton("Neue Verfahrens-DB anlegen")
self.btn_new.clicked.connect(self._create_new_gpkg)
group_layout.addWidget(self.btn_new)
self.group_content.setLayout(group_layout)
main_layout.addWidget(self.group_content)
# === OPTIONALE LINKLISTE ===
self.optional_button = QToolButton()
self.optional_button.setText("Optional: Lokale Linkliste")
self.optional_button.setCheckable(True)
self.optional_button.setChecked(False)
self.optional_button.setToolButtonStyle(ToolButtonTextBesideIcon)
self.optional_button.setArrowType(ArrowRight)
self.optional_button.setStyleSheet("font-weight: bold; margin-top: 6px;")
self.optional_button.toggled.connect(self._toggle_optional)
main_layout.addWidget(self.optional_button)
self.optional_content = QWidget()
self.optional_content.setSizePolicy(SizePolicyPreferred, SizePolicyMaximum)
optional_layout = QVBoxLayout()
optional_layout.setSpacing(2)
optional_layout.setContentsMargins(10, 4, 4, 20)
optional_layout.addWidget(QLabel("(frei lassen für globale Linkliste)"))
self.linkliste_widget = QgsFileWidget()
self.linkliste_widget.setStorageMode(QgsFileWidget.GetFile)
self.linkliste_widget.setFilter("Excelliste (*.xlsx)")
self.linkliste_widget.fileChanged.connect(self._on_linkliste_changed)
optional_layout.addWidget(self.linkliste_widget)
self.optional_content.setLayout(optional_layout)
self.optional_content.setVisible(False)
main_layout.addWidget(self.optional_content)
# === LAYER-AUSWAHL + RAUMFILTER ===
layer_label = QLabel("Verfahrensgebiet-Layer auswählen")
layer_label.setStyleSheet("font-weight: bold; margin-top: 6px;")
main_layout.addWidget(layer_label)
self.layer_combo = QgsMapLayerComboBox()
self.layer_combo.setFilters(QgsMapLayerProxyModel.VectorLayer)
self.layer_combo.layerChanged.connect(self._on_layer_changed)
main_layout.addWidget(self.layer_combo)
main_layout.addWidget(QLabel("Raumfilter"))
self._raumfilter_combo = QComboBox(self)
self._raumfilter_combo.setToolTip("Wählt die räumliche Bezugsfläche für die Datenextraktion.")
self._raumfilter_combo.addItems(RAUMFILTER_OPTIONS)
self._raumfilter_combo.currentTextChanged.connect(self._on_raumfilter_changed)
main_layout.addWidget(self._raumfilter_combo)
# === PIPELINE-STEUERUNG ===
self.btn_pipeline = QPushButton("Fachdaten laden")
self.btn_pipeline.setToolTip("Starte Pipeline: Linkliste → DataGrabber → Datenschreiber → Log")
self.btn_pipeline.clicked.connect(self._on_load_fachdaten)
main_layout.addWidget(self.btn_pipeline)
main_layout.addStretch(1)
self.setLayout(main_layout)
def _restore_state(self) -> None:
"""Stellt UI-State aus Projektvariablen/Persistenz wieder her."""
# Verfahrens-DB
try:
db = get_variable("tab_a_verfahrens_db", scope="project")
if db and self.file_widget:
self.file_widget.setFilePath(db)
self.verfahrens_db = db
self._update_group_color()
except Exception:
pass
# Linkliste
try:
link = get_variable("tab_a_linkliste", scope="project")
if link and self.linkliste_widget:
self.linkliste_widget.setFilePath(link)
self.lokale_linkliste = link
except Exception:
pass
# Layer
try:
layer_id = get_variable("tab_a_layer_id", scope="project")
if layer_id:
layer = QgsProject.instance().mapLayer(layer_id)
if layer and self.layer_combo:
self.layer_combo.setLayer(layer)
self._pufferlayer = layer
except Exception:
pass
# Raumfilter (schon im _build_ui behandelt)
# === UI CALLBACKS ===
def _toggle_group(self, checked: bool) -> None:
"""Zeigt/verbirgt Verfahrens-DB-Gruppe."""
self.group_button.setArrowType(ArrowDown if checked else ArrowRight)
self.group_content.setVisible(checked)
def _toggle_optional(self, checked: bool) -> None:
"""Zeigt/verbirgt optionale Linkliste."""
self.optional_button.setArrowType(ArrowDown if checked else ArrowRight)
self.optional_content.setVisible(checked)
def _on_verfahrens_db_changed(self, path: str) -> None:
"""Persistieret Verfahrens-DB-Pfad."""
self.verfahrens_db = path
set_variable("tab_a_verfahrens_db", path, scope="project")
self._update_group_color()
def _on_linkliste_changed(self, path: str) -> None:
"""Persistieret lokale Linkliste."""
self.lokale_linkliste = path
set_variable("tab_a_linkliste", path, scope="project")
def _on_layer_changed(self, layer) -> None:
"""Persistiert Layer-Auswahl und registriert Verfahrensgebiet."""
self._pufferlayer = layer
if not layer:
return
# UI-State speichern
set_variable("tab_a_layer_id", layer.id(), scope="project")
# 🔹 NEU: Verfahrensgebiet explizit registrieren
if self.logic:
self.logic.save_verfahrensgebiet_layer(layer)
def _on_raumfilter_changed(self, value: str) -> None:
"""Persistieret Raumfilter-Auswahl."""
set_variable(RAUMFILTER_VAR, value, scope="project")
def _create_new_gpkg(self) -> None:
"""Delegiert GPKG-Erstellung (Prüfungen über Services)."""
file_path, _ = QFileDialog.getSaveFileName(
self, "Neue Verfahrens-Datenbank", "", "Geopackage (*.gpkg)"
)
if file_path:
if not file_path.lower().endswith(".gpkg"):
file_path += ".gpkg"
self.verfahrens_db = file_path
self.file_widget.setFilePath(file_path)
set_variable("tab_a_verfahrens_db", file_path, scope="project")
self._update_group_color()
def _update_group_color(self) -> None:
"""Visuelles Feedback für Verfahrens-DB-Status."""
if self.verfahrens_db:
self.group_button.setStyleSheet("font-weight: bold; background-color: ##d7a8ff;")
else:
self.group_button.setStyleSheet("font-weight: bold;")
def _on_load_fachdaten(self) -> None:
"""Kompatibilitäts-Handler → neue Pipeline."""
source = self.file_widget.filePath()
raumfilter = self._raumfilter_combo.currentText()
linkliste = self.linkliste_widget.filePath()
if self.logic and self.layer_combo:
layer = self.layer_combo.currentLayer()
else:
layer = None
if layer and layer.name() == "Verfahrensgebiet":
self.logic.save_verfahrensgebiet_layer(layer)
if self.logic:
try:
self.logic._on_run_pipeline(source, linkliste, raumfilter)
except Exception as exc:
QMessageBox.warning(
self,
"Fehler beim Laden",
f"Fehler beim Ausführen der Pipeline: {exc}",
QMessageBox.StandardButton.Ok,
)

680
ui/tab_b_logic.py Normal file
View File

@@ -0,0 +1,680 @@
"""
sn_plan41/ui/tab_b_logic.py Fachlogik für Tab B (Druck)
"""
from __future__ import annotations
import math
from typing import Any
from sn_basis.functions.qt_wrapper import QVariant
from sn_basis.functions.variable_wrapper import set_variable, get_variable
from sn_basis.functions.qgiscore_wrapper import get_layer_extent
from sn_basis.functions.qgiscore_wrapper import (
QgsProject,
QgsVectorLayer,
QgsGeometry,
QgsFeature,
QgsField,
QgsVectorFileWriter,
)
from sn_basis.functions.sys_wrapper import get_plugin_root, join_path, file_exists
from sn_basis.modules.Pruefmanager import Pruefmanager
from sn_basis.modules.layerpruefer import Layerpruefer
from sn_plan41.ui.layout import Layout
KARTENNAME_VAR = "sn_kartenname"
PLOTMASSSTAB_VAR = "sn_plotmassstab"
VIEW_VAR = "sn_view"
ZIELGROESSE_VAR = "sn_zielgroesse"
FORMFAKTOR_VAR = "sn_formfaktor"
KARTENNAME_38 = "§38"
KARTENNAME_41 = "§41"
MASSSTAB_WIE_KARTENFENSTER = "Wie Kartenfenster"
THEMA_WIE_KARTENFENSTER = "wie kartenfenster"
KARTENNAME_BY_AUSWAHL = {
KARTENNAME_38: "Planungsübersicht §38 FlurbG",
KARTENNAME_41: "Karte zum Plan über die gemeinschaftlichen und öffentlichen Anlagen (§ 41 FlurbG)",
}
PLOTMASSSTAB_BY_AUSWAHL = {
"1:5.000": "5000",
"1:10.000": "10000",
"1:15.000": "15000",
"1:20.000": "20000",
"1:25.000": "25000",
"1:50.000": "50000",
"1:100.000": "100000",
}
# Breite x Höhe in mm (Hochformat, DIN-Standard)
DIN_GROESSEN: dict[str, tuple[int, int]] = {
"DIN A0": (841, 1189),
"DIN A1": (594, 841),
"DIN A2": (420, 594),
"DIN A3": (297, 420),
"DIN A4": (210, 297),
}
DIN_STANDARD = "DIN A0"
class TabBLogic:
"""
Kapselt die Fachlogik von Tab B.
"""
def __init__(self, pruefmanager: Pruefmanager) -> None:
self.pruefmanager = pruefmanager
@staticmethod
def _wkt_rect(x_min: float, y_min: float, x_max: float, y_max: float) -> str:
return (
f"POLYGON(({x_min} {y_min}, {x_max} {y_min}, {x_max} {y_max}, "
f"{x_min} {y_max}, {x_min} {y_min}))"
)
@staticmethod
def _set_topological_editing_enabled() -> None:
project = QgsProject.instance()
set_topological = getattr(project, "setTopologicalEditing", None)
if callable(set_topological):
try:
set_topological(True)
except Exception:
pass
@staticmethod
def _apply_atlas_style(layer: Any) -> None:
style_path = join_path(get_plugin_root(), "sn_plan41", "assets", "atlasobjekte.qml")
if not file_exists(style_path):
return
try:
ok, _ = layer.loadNamedStyle(str(style_path))
if ok:
getattr(layer, "triggerRepaint", lambda: None)()
except Exception:
pass
@staticmethod
def _find_tile_grid_for_roll_atlas(
kartenbild_w_mm: float,
kartenbild_h_mm: float,
din_dims: tuple[int, int],
respect_max_sheet_size: bool = False,
) -> tuple[int, int, float, float]:
"""Bestimmt ein Atlas-Raster für Endlosrolle, das Kacheln statt Streifen erzeugt.
Ziel: Kachel-Seitenverhältnis möglichst nah am Einzelblatt-Kartenfenster
(inkl. Rändern) bei zugleich moderater Seitenanzahl.
"""
if kartenbild_w_mm <= 0 or kartenbild_h_mm <= 0:
return 1, 1, max(1.0, kartenbild_w_mm), max(1.0, kartenbild_h_mm)
# Einzelblatt-Kartenfenster für beide Orientierungen
dim_w, dim_h = float(din_dims[0]), float(din_dims[1])
orientation_candidates: list[tuple[float, float]] = [
(dim_w - 210.0, dim_h - 20.0),
(dim_h - 210.0, dim_w - 20.0),
]
best_score = math.inf
best_result: tuple[int, int, float, float] | None = None
for target_w, target_h in orientation_candidates:
if target_w <= 0 or target_h <= 0:
continue
target_aspect = target_w / target_h
px0 = max(1, int(round(kartenbild_w_mm / target_w)))
py0 = max(1, int(round(kartenbild_h_mm / target_h)))
for pages_x in range(max(1, px0 - 3), px0 + 4):
for pages_y in range(max(1, py0 - 3), py0 + 4):
tile_w = kartenbild_w_mm / pages_x
tile_h = kartenbild_h_mm / pages_y
if tile_w <= 0 or tile_h <= 0:
continue
# Im Blatt-Modus darf die resultierende Atlasseite die
# gewählte Zielgröße (inkl. Orientierung) nicht überschreiten.
if respect_max_sheet_size and (tile_w > target_w or tile_h > target_h):
continue
tile_aspect = tile_w / tile_h
# 0 bei perfekter Übereinstimmung; symmetrisch für >1/<1
aspect_error = abs(math.log(tile_aspect / target_aspect))
# Streifen bestrafen
strip_penalty = 0.0
if tile_aspect < 0.5:
strip_penalty = abs(math.log(tile_aspect / 0.5))
elif tile_aspect > 2.0:
strip_penalty = abs(math.log(tile_aspect / 2.0))
page_count = pages_x * pages_y
# Gewichtung: zuerst Formatnähe, dann Streifenvermeidung,
# danach Seitenzahl minimieren.
score = (aspect_error * 12.0) + (strip_penalty * 6.0) + (page_count * 0.20)
if score < best_score:
best_score = score
best_result = (pages_x, pages_y, tile_w, tile_h)
if best_result is None:
if respect_max_sheet_size:
fallback_candidates: list[tuple[int, int, float, float, int]] = []
for target_w, target_h in orientation_candidates:
if target_w <= 0 or target_h <= 0:
continue
pages_x = max(1, math.ceil(kartenbild_w_mm / target_w))
pages_y = max(1, math.ceil(kartenbild_h_mm / target_h))
tile_w = kartenbild_w_mm / pages_x
tile_h = kartenbild_h_mm / pages_y
fallback_candidates.append((pages_x, pages_y, tile_w, tile_h, pages_x * pages_y))
if fallback_candidates:
fallback_candidates.sort(key=lambda entry: (entry[4], abs(math.log((entry[2] / entry[3]) if entry[3] > 0 else 1.0))))
fx, fy, fw, fh, _ = fallback_candidates[0]
return fx, fy, fw, fh
return 1, 1, kartenbild_w_mm, kartenbild_h_mm
return best_result
def _create_atlasobjekte_layer(
self,
layer: Any,
extent: Any,
pages_x: int,
pages_y: int,
seite_karte_w: float,
seite_karte_h: float,
massstab_zahl: float,
) -> Any | None:
layer_crs = layer.crs() if hasattr(layer, "crs") else None
crs_authid = layer_crs.authid() if layer_crs is not None and hasattr(layer_crs, "authid") else "EPSG:25832"
atlas_layer = QgsVectorLayer(f"Polygon?crs={crs_authid}", "Atlasobjekte", "memory")
if not atlas_layer or not atlas_layer.isValid():
return None
provider = atlas_layer.dataProvider()
provider.addAttributes([
QgsField("Seitenzahl", QVariant.Int),
])
atlas_layer.updateFields()
tile_w_m = seite_karte_w * massstab_zahl / 1000.0
tile_h_m = seite_karte_h * massstab_zahl / 1000.0
x_min = extent.xMinimum()
y_min = extent.yMinimum()
x_max = extent.xMaximum()
y_max = extent.yMaximum()
seitenzahl = 1
features = []
for row_idx in range(pages_y):
tile_y_max = y_max - row_idx * tile_h_m
tile_y_min = tile_y_max - tile_h_m
for col_idx in range(pages_x):
tile_x_min = x_min + col_idx * tile_w_m
tile_x_max = tile_x_min + tile_w_m
tile_geom = QgsGeometry.fromWkt(
self._wkt_rect(tile_x_min, tile_y_min, tile_x_max, tile_y_max)
)
feat = QgsFeature(atlas_layer.fields())
feat.setGeometry(tile_geom)
feat["Seitenzahl"] = seitenzahl
features.append(feat)
seitenzahl += 1
if not features:
return None
provider.addFeatures(features)
atlas_layer.updateExtents()
self._set_topological_editing_enabled()
verfahrens_db = get_variable("verfahrens_db", scope="project") or ""
print(f"[TabBLogic] Atlasobjekte: verfahrens_db='{verfahrens_db}'")
if not verfahrens_db:
QgsProject.instance().addMapLayer(atlas_layer)
self._apply_atlas_style(atlas_layer)
print("[TabBLogic] Atlasobjekte temporär ins Projekt geladen")
return atlas_layer
opts = QgsVectorFileWriter.SaveVectorOptions()
opts.driverName = "GPKG"
opts.fileEncoding = "UTF-8"
opts.layerName = "Atlasobjekte"
if file_exists(verfahrens_db):
opts.actionOnExistingFile = QgsVectorFileWriter.CreateOrOverwriteLayer
else:
opts.actionOnExistingFile = QgsVectorFileWriter.CreateOrOverwriteFile
err_result = QgsVectorFileWriter.writeAsVectorFormatV3(
atlas_layer,
verfahrens_db,
QgsProject.instance().transformContext(),
opts,
)
# QGIS-Versionen liefern hier entweder nur WriterError
# oder ein Tupel (WriterError, msg, newPath, layerName).
err_code = err_result[0] if isinstance(err_result, tuple) else err_result
if err_code != QgsVectorFileWriter.NoError:
print(f"[TabBLogic] Atlasobjekte schreiben fehlgeschlagen: err={err_result}")
return None
for existing in QgsProject.instance().mapLayersByName("Atlasobjekte"):
try:
QgsProject.instance().removeMapLayer(existing.id())
except Exception:
pass
uri = f"{verfahrens_db}|layername=Atlasobjekte"
loaded_layer = QgsVectorLayer(uri, "Atlasobjekte", "ogr")
if not loaded_layer or not loaded_layer.isValid():
print(f"[TabBLogic] Atlasobjekte laden aus GPKG fehlgeschlagen: uri='{uri}'")
return None
QgsProject.instance().addMapLayer(loaded_layer)
self._apply_atlas_style(loaded_layer)
print("[TabBLogic] Atlasobjekte aus Verfahrens-DB geladen und gestylt")
return loaded_layer
def set_kartenname_for_auswahl(self, auswahl: str) -> None:
"""Setzt die Projektvariable ``sn_kartenname`` anhand der Kartennamen-Auswahl."""
kartenname = KARTENNAME_BY_AUSWAHL.get(auswahl, "")
set_variable(KARTENNAME_VAR, kartenname, scope="project")
def set_plotmassstab_for_auswahl(self, auswahl: str, aktueller_massstab: float | None = None) -> None:
"""Setzt die Projektvariable ``sn_plotmassstab`` anhand der Maßstabsauswahl."""
if auswahl == MASSSTAB_WIE_KARTENFENSTER:
if aktueller_massstab and aktueller_massstab > 0:
set_variable(PLOTMASSSTAB_VAR, str(int(round(aktueller_massstab))), scope="project")
else:
set_variable(PLOTMASSSTAB_VAR, "", scope="project")
return
value = PLOTMASSSTAB_BY_AUSWAHL.get(auswahl, "")
set_variable(PLOTMASSSTAB_VAR, value, scope="project")
def set_view_for_auswahl(self, auswahl: str) -> None:
"""Setzt ``sn_view`` auf ``aktuell`` oder den Namen des gewählten Layerthemas."""
if auswahl == THEMA_WIE_KARTENFENSTER:
set_variable(VIEW_VAR, "aktuell", scope="project")
return
set_variable(VIEW_VAR, auswahl or "", scope="project")
def set_zielgroesse_for_auswahl(self, auswahl: str) -> None:
"""Setzt ``sn_zielgroesse`` auf den gewählten DIN-Namen."""
set_variable(ZIELGROESSE_VAR, auswahl if auswahl in DIN_GROESSEN else DIN_STANDARD, scope="project")
def set_formfaktor(self, endlosrolle: bool) -> None:
"""Setzt ``sn_formfaktor`` auf ``Endlosrolle`` oder ``Blatt``."""
set_variable(FORMFAKTOR_VAR, "Endlosrolle" if endlosrolle else "Blatt", scope="project")
# ─────────────────────────────────────────────────────────────────────────
# Pipeline: Druckvorlage_anlegen
# ─────────────────────────────────────────────────────────────────────────
def druckvorlage_anlegen(
self,
layer: object,
kartenname_auswahl: str,
massstab_auswahl: str,
zielgroesse: str,
formfaktor: bool,
) -> dict:
"""Pipeline 'Druckvorlage_anlegen'.
Prüft Parameter, berechnet Plotgröße und stellt bei Bedarf Atlas-Rückfrage.
Parameters
----------
layer:
Aktuell gewählter Verfahrensgebiet-Layer aus Tab A.
Returns
-------
dict
``ok`` (bool): Ob die Pipeline erfolgreich durchlaufen werden soll.
``switch_to_tab_a`` (bool): Ob Tab A aktiviert werden soll.
``atlas_seiten`` (int): Anzahl benötigter Seiten (1 = kein Atlas).
"""
# ─── 1. Verfahrensgebiet-Layer prüfen ─────────────────────────────
lp = Layerpruefer(layer=layer)
ergebnis = lp.pruefe()
if not ergebnis.ok:
self.pruefmanager.zeige_hinweis(
"Verfahrensgebiets-Layer angeben",
"Verfahrensgebiets-Layer angeben",
)
return {"ok": False, "switch_to_tab_a": True, "atlas_seiten": 0}
layer_id = getattr(layer, "id", lambda: "")() or ""
set_variable("sn_verfahrensgebietslayer", layer_id, scope="project")
# ─── 2. Kartenname prüfen ─────────────────────────────────────────
if kartenname_auswahl not in (KARTENNAME_38, KARTENNAME_41):
self.pruefmanager.zeige_hinweis(
"Kartennamen wählen",
"Kartennamen wählen",
)
return {"ok": False, "switch_to_tab_a": False, "atlas_seiten": 0}
# ─── 3. Maßstab ermitteln ─────────────────────────────────────────
if massstab_auswahl == MASSSTAB_WIE_KARTENFENSTER:
massstab_str = get_variable(PLOTMASSSTAB_VAR, scope="project") or ""
try:
massstab_zahl = float(massstab_str)
except (ValueError, TypeError):
massstab_zahl = 0.0
else:
massstab_zahl = float(PLOTMASSSTAB_BY_AUSWAHL.get(massstab_auswahl, 0))
if massstab_zahl <= 0:
self.pruefmanager.zeige_hinweis(
"Maßstab fehlt",
"Kein gültiger Maßstab angegeben.",
)
return {"ok": False, "switch_to_tab_a": False, "atlas_seiten": 0}
# ─── 4. Kartenbild berechnen ──────────────────────────────────────
# Der Layer wird als metrisch projiziert (Einheit: m) vorausgesetzt,
# wie es für deutsche Planungslagen (z.B. EPSG:25832) üblich ist.
extent = get_layer_extent(layer)
if extent is None:
self.pruefmanager.zeige_hinweis(
"Fehler",
"Layer-Ausdehnung konnte nicht ermittelt werden.",
)
return {"ok": False, "switch_to_tab_a": False, "atlas_seiten": 0}
# Naturgröße (m) → Papiergröße (mm): mm = m * 1000 / massstab
kartenbild_w = extent.width() * 1000.0 / massstab_zahl
kartenbild_h = extent.height() * 1000.0 / massstab_zahl
# ─── 5. Plotgröße = Kartenbild + Randabstand (x+210 mm, y+20 mm) ──
plotgroesse_w = kartenbild_w + 210.0
plotgroesse_h = kartenbild_h + 20.0
# ─── 6. Zielgröße bestimmen ───────────────────────────────────────
din_dims = DIN_GROESSEN.get(zielgroesse, DIN_GROESSEN[DIN_STANDARD])
if formfaktor: # Endlosrolle: X-Richtung entspricht der Plotgröße
ziel_w, ziel_h = plotgroesse_w, float(min(din_dims))
else:
ziel_w, ziel_h = float(din_dims[0]), float(din_dims[1])
if ziel_w < DIN_GROESSEN["DIN A4"][0] or ziel_h < DIN_GROESSEN["DIN A4"][1]:
self.pruefmanager.zeige_hinweis(
"Blattgröße zu klein",
"Die Zielgröße darf nicht kleiner als DIN A4 sein.",
)
return {"ok": False, "switch_to_tab_a": False, "atlas_seiten": 0}
# ─── 7. Passt auf ein Blatt? -> Layout erzeugen ───────────────────
print(f"[TabBLogic] plotgroesse=({plotgroesse_w:.1f}x{plotgroesse_h:.1f}), "
f"zielgroesse=({ziel_w:.1f}x{ziel_h:.1f}), passt={plotgroesse_w <= ziel_w and plotgroesse_h <= ziel_h}")
if plotgroesse_w > ziel_w or plotgroesse_h > ziel_h:
if plotgroesse_w <= ziel_h and plotgroesse_h <= ziel_w:
ziel_w, ziel_h = ziel_h, ziel_w
if plotgroesse_w <= ziel_w and plotgroesse_h <= ziel_h:
kartenname = get_variable(KARTENNAME_VAR, scope="project") or KARTENNAME_BY_AUSWAHL.get(
kartenname_auswahl, "Vorlage"
)
thema = get_variable(VIEW_VAR, scope="project") or ""
print(f"[TabBLogic] frage_text aufrufen, default='{kartenname}', thema='{thema}'")
vorlage_name, bestaetigt = self.pruefmanager.frage_text(
"Neue Vorlage anlegen",
"Bezeichnung der Vorlage:",
default_text=kartenname,
)
print(f"[TabBLogic] frage_text Ergebnis: name='{vorlage_name}', bestaetigt={bestaetigt}")
if not bestaetigt:
return {"ok": False, "switch_to_tab_a": False, "atlas_seiten": 0}
vorlage_name = (vorlage_name or "").strip() or kartenname
print(f"[TabBLogic] Rufe Layout().create_single_page_layout auf: name='{vorlage_name}', "
f"page=({ziel_w}x{ziel_h}), map=({kartenbild_w:.1f}x{kartenbild_h:.1f}), "
f"massstab={massstab_zahl}, thema='{thema}'")
try:
Layout().create_single_page_layout(
name=vorlage_name,
page_width_mm=ziel_w,
page_height_mm=ziel_h,
map_width_mm=kartenbild_w,
map_height_mm=kartenbild_h,
extent=extent,
plotmassstab=massstab_zahl,
thema=thema,
)
print("[TabBLogic] create_single_page_layout erfolgreich abgeschlossen")
except ValueError as exc:
print(f"[TabBLogic] ValueError: {exc}")
self.pruefmanager.zeige_hinweis("Vorlage anlegen", str(exc))
return {"ok": False, "switch_to_tab_a": False, "atlas_seiten": 0}
except Exception as exc:
print(f"[TabBLogic] Exception: {exc!r}")
self.pruefmanager.zeige_hinweis("Vorlage anlegen", f"Die Vorlage konnte nicht angelegt werden: {exc}")
return {"ok": False, "switch_to_tab_a": False, "atlas_seiten": 0}
return {"ok": True, "switch_to_tab_a": False, "atlas_seiten": 1}
# ─── 8. Atlas: Anzahl Seiten berechnen ────────────────────────────
# Nutzbarer Kartenbereich pro Atlasseite (abzüglich gleichem Randabstand)
seite_karte_w = ziel_w - 210.0
seite_karte_h = ziel_h - 20.0
if seite_karte_w <= 0 or seite_karte_h <= 0:
self.pruefmanager.zeige_hinweis(
"Blattgröße zu klein",
"Die gewählte Zielgröße ist kleiner als der Mindest-Randabstand. "
"Bitte eine größere Blattgröße wählen.",
)
return {"ok": False, "switch_to_tab_a": False, "atlas_seiten": 0}
pages_x = math.ceil(kartenbild_w / seite_karte_w)
pages_y = math.ceil(kartenbild_h / seite_karte_h)
# Für Atlas in beiden Modi (Endlosrolle + Blatt): Seitenraster so wählen,
# dass Atlasobjekte näher am Einzelblattformat liegen und keine Streifen entstehen.
opt_pages_x, opt_pages_y, opt_tile_w_mm, opt_tile_h_mm = self._find_tile_grid_for_roll_atlas(
kartenbild_w_mm=kartenbild_w,
kartenbild_h_mm=kartenbild_h,
din_dims=din_dims,
respect_max_sheet_size=(not formfaktor),
)
# Endlosrolle: Nur die Breite darf wachsen, die Höhe muss innerhalb
# der gewählten Zielhöhe bleiben.
if formfaktor:
max_tile_h_mm = max(1.0, ziel_h - 20.0)
if opt_tile_h_mm > max_tile_h_mm:
required_pages_y = max(1, math.ceil(kartenbild_h / max_tile_h_mm))
opt_pages_y = max(opt_pages_y, required_pages_y)
opt_tile_h_mm = kartenbild_h / opt_pages_y
pages_x = max(1, opt_pages_x)
pages_y = max(1, opt_pages_y)
seite_karte_w = max(1.0, opt_tile_w_mm)
seite_karte_h = max(1.0, opt_tile_h_mm)
modus = "Endlosrolle" if formfaktor else "Blatt"
print(
f"[TabBLogic] {modus} Rasteroptimierung: pages_x={pages_x}, pages_y={pages_y}, "
f"tile_mm=({seite_karte_w:.1f}x{seite_karte_h:.1f}), "
f"tile_aspect={seite_karte_w / seite_karte_h:.3f}"
)
if formfaktor:
max_tile_h_mm = max(1.0, ziel_h - 20.0)
print(
f"[TabBLogic] Endlosrolle Höhenlimit: tile_h={seite_karte_h:.1f}mm, "
f"max_tile_h={max_tile_h_mm:.1f}mm, within_limit={seite_karte_h <= max_tile_h_mm}"
)
anzahl_seiten = pages_x * pages_y
ja = self.pruefmanager.frage_ja_nein(
"Ausdruck als Atlas anlegen?",
f"Für die ausgewählten Parameter sind {anzahl_seiten} Einzelseiten erforderlich.\n"
"Ausdruck als Atlas anlegen?",
default=True,
)
print(f"[TabBLogic] Atlas-Rückfrage: ja={ja}, geplante_seiten={anzahl_seiten}")
if not ja:
return {"ok": False, "switch_to_tab_a": False, "atlas_seiten": anzahl_seiten}
atlas_layer = self._create_atlasobjekte_layer(
layer=layer,
extent=extent,
pages_x=pages_x,
pages_y=pages_y,
seite_karte_w=seite_karte_w,
seite_karte_h=seite_karte_h,
massstab_zahl=massstab_zahl,
)
if atlas_layer is None:
self.pruefmanager.zeige_hinweis(
"Atlasobjekte",
"Atlasobjekte-Layer konnte nicht erzeugt werden.",
)
return {"ok": False, "switch_to_tab_a": False, "atlas_seiten": 0}
print("[TabBLogic] Atlasobjekte-Layer erfolgreich erzeugt")
try:
anzahl_seiten = int(atlas_layer.featureCount())
except Exception:
pass
# Berechne die Kachelgröße aus den Atlasobjekten.
# Für die Layout-Kartengröße muss die größte Atlas-Kachel passen,
# sonst werden größere Atlasobjekte abgeschnitten.
total_w_m = 0.0
total_h_m = 0.0
min_w_m = math.inf
min_h_m = math.inf
max_w_m = 0.0
max_h_m = 0.0
feature_count = 0
get_features = getattr(atlas_layer, "getFeatures", None)
if callable(get_features):
try:
for feat in get_features():
geom = feat.geometry() if hasattr(feat, "geometry") else None
if geom is None or geom.isEmpty():
continue
bbox = geom.boundingBox() if hasattr(geom, "boundingBox") else None
if bbox is None:
continue
feat_w_m = float(bbox.width())
feat_h_m = float(bbox.height())
total_w_m += feat_w_m
total_h_m += feat_h_m
min_w_m = min(min_w_m, feat_w_m)
min_h_m = min(min_h_m, feat_h_m)
max_w_m = max(max_w_m, feat_w_m)
max_h_m = max(max_h_m, feat_h_m)
feature_count += 1
except Exception:
pass
if feature_count > 0:
avg_tile_w_m = total_w_m / feature_count
avg_tile_h_m = total_h_m / feature_count
if not math.isfinite(min_w_m):
min_w_m = avg_tile_w_m
if not math.isfinite(min_h_m):
min_h_m = avg_tile_h_m
target_tile_w_m = max_w_m
target_tile_h_m = max_h_m
else:
avg_tile_w_m = seite_karte_w * massstab_zahl / 1000.0
avg_tile_h_m = seite_karte_h * massstab_zahl / 1000.0
min_w_m = avg_tile_w_m
min_h_m = avg_tile_h_m
max_w_m = avg_tile_w_m
max_h_m = avg_tile_h_m
target_tile_w_m = avg_tile_w_m
target_tile_h_m = avg_tile_h_m
# Konvertiere Kachelgrößen zu mm
avg_tile_w_mm = avg_tile_w_m * 1000.0 / massstab_zahl
avg_tile_h_mm = avg_tile_h_m * 1000.0 / massstab_zahl
min_tile_w_mm = min_w_m * 1000.0 / massstab_zahl
min_tile_h_mm = min_h_m * 1000.0 / massstab_zahl
max_tile_w_mm = max_w_m * 1000.0 / massstab_zahl
max_tile_h_mm = max_h_m * 1000.0 / massstab_zahl
target_tile_w_mm = target_tile_w_m * 1000.0 / massstab_zahl
target_tile_h_mm = target_tile_h_m * 1000.0 / massstab_zahl
# Layout-Kartengröße = größte Kachelgröße
atlas_map_w = max(1.0, target_tile_w_mm)
atlas_map_h = max(1.0, target_tile_h_mm)
atlas_page_w = atlas_map_w + 210.0
atlas_page_h = atlas_map_h + 20.0
# Debug: Atlasobjekte Geometrien
print(
f"[TabBLogic] Atlasobjekte Geometrien (Meter): "
f"total_w={total_w_m:.1f}m, total_h={total_h_m:.1f}m, "
f"min_w={min_w_m:.1f}m, min_h={min_h_m:.1f}m, "
f"avg_w={avg_tile_w_m:.1f}m, avg_h={avg_tile_h_m:.1f}m, "
f"max_w={max_w_m:.1f}m, max_h={max_h_m:.1f}m, features={feature_count}"
)
print(
f"[TabBLogic] Atlas layout Größen: "
f"page=(x=10, y=10, w={atlas_page_w:.1f}mm, h={atlas_page_h:.1f}mm), "
f"map=(x=10, y=10, w={atlas_map_w:.1f}mm, h={atlas_map_h:.1f}mm), "
f"kachel_min_mm=({min_tile_w_mm:.1f}x{min_tile_h_mm:.1f}), "
f"kachel_avg_mm=({avg_tile_w_mm:.1f}x{avg_tile_h_mm:.1f}), "
f"kachel_max_mm=({max_tile_w_mm:.1f}x{max_tile_h_mm:.1f})"
)
kartenname = get_variable(KARTENNAME_VAR, scope="project") or KARTENNAME_BY_AUSWAHL.get(
kartenname_auswahl, "Atlas"
)
thema = get_variable(VIEW_VAR, scope="project") or ""
vorlage_name, bestaetigt = self.pruefmanager.frage_text(
"Neue Atlasvorlage anlegen",
"Bezeichnung der Vorlage:",
default_text=f"{kartenname} Atlas",
)
print(f"[TabBLogic] Atlas frage_text Ergebnis: name='{vorlage_name}', bestaetigt={bestaetigt}")
if not bestaetigt:
return {"ok": False, "switch_to_tab_a": False, "atlas_seiten": anzahl_seiten}
vorlage_name = (vorlage_name or "").strip() or f"{kartenname} Atlas"
try:
print(
f"[TabBLogic] Rufe create_atlas_layout auf: name='{vorlage_name}', "
f"page=({atlas_page_w:.1f}x{atlas_page_h:.1f}), "
f"map=({atlas_map_w:.1f}x{atlas_map_h:.1f}), massstab={massstab_zahl}, thema='{thema}'"
)
Layout().create_atlas_layout(
name=vorlage_name,
page_width_mm=atlas_page_w,
page_height_mm=atlas_page_h,
map_width_mm=atlas_map_w,
map_height_mm=atlas_map_h,
extent=extent,
plotmassstab=massstab_zahl,
atlas_layer=atlas_layer,
thema=thema,
)
print("[TabBLogic] create_atlas_layout erfolgreich abgeschlossen")
except ValueError as exc:
self.pruefmanager.zeige_hinweis("Atlasvorlage anlegen", str(exc))
return {"ok": False, "switch_to_tab_a": False, "atlas_seiten": 0}
except Exception as exc:
self.pruefmanager.zeige_hinweis("Atlasvorlage anlegen", f"Die Atlasvorlage konnte nicht angelegt werden: {exc}")
return {"ok": False, "switch_to_tab_a": False, "atlas_seiten": 0}
return {"ok": True, "switch_to_tab_a": False, "atlas_seiten": anzahl_seiten}

427
ui/tab_b_ui.py Normal file
View File

@@ -0,0 +1,427 @@
"""
sn_plan41/ui/tab_b_ui.py UI für Tab B (Druck)
"""
from __future__ import annotations
from typing import Optional
from sn_basis.functions.qt_wrapper import (
QWidget,
QVBoxLayout,
QLabel,
QComboBox,
QCheckBox,
QHBoxLayout,
QPushButton,
)
from sn_basis.functions.qgiscore_wrapper import QgsProject
from sn_basis.functions.qgisui_wrapper import iface
from sn_basis.functions.variable_wrapper import get_variable, set_variable
# Services (werden von DockWidget injiziert)
from sn_basis.modules.Pruefmanager import Pruefmanager
from sn_basis.modules.DataGrabber import DataGrabber
from sn_plan41.ui.tab_b_logic import (
TabBLogic,
MASSSTAB_WIE_KARTENFENSTER,
PLOTMASSSTAB_BY_AUSWAHL,
THEMA_WIE_KARTENFENSTER,
DIN_GROESSEN,
DIN_STANDARD,
ZIELGROESSE_VAR,
FORMFAKTOR_VAR,
)
KARTENNAME_VAR = "tab_b_kartenname"
KARTENNAME_PLACEHOLDER = "Kartenname wählen"
KARTENNAME_38 = "§38"
KARTENNAME_41 = "§41"
MASSSTAB_VAR = "tab_b_massstab"
THEMA_VAR = "tab_b_thema"
ZIELGROESSE_UI_VAR = "tab_b_zielgroesse"
FORMFAKTOR_UI_VAR = "tab_b_formfaktor"
class TabB(QWidget):
"""
UI-Klasse für Tab B (Druck) des Plan41-Plugins.
Zuständig für:
- Auswahl des Druckthemas
- Auswahl der Druckparameter
- Start der Vorlagenanlage (Druck über QGIS-Druckfunktion)
Services (Pruefmanager, DataGrabber) werden zur Laufzeit vom DockWidget injiziert.
Alle fachlichen Prüfungen laufen über den zentralen Pruefmanager.
"""
tab_title = "Druck" #: Tab-Titel für BaseDockWidget
def __init__(self, parent: Optional[QWidget] = None):
"""
Initialisiert die UI-Struktur.
Services werden später über :meth:`set_services` injiziert.
:param parent: Parent-Widget (typischerweise DockWidget)
"""
super().__init__(parent)
# Services (werden von DockWidget gesetzt)
self.pruefmanager: Optional[Pruefmanager] = None
self.logic: Optional[TabBLogic] = None
self._kartenname_combo: Optional[QComboBox] = None
self._massstab_combo: Optional[QComboBox] = None
self._thema_combo: Optional[QComboBox] = None
self._theme_signal_connected = False
self._connected_theme_collection: object = None # Referenz für sauberes Trennen
self._zielgroesse_combo: Optional[QComboBox] = None
self._endlosrolle_cb: Optional[QCheckBox] = None
self._btn_vorlage_erstellen: Optional[QPushButton] = None
self._build_ui()
self._restore_state()
self._connect_theme_collection_signals()
self._connect_project_signals()
def set_services(self, pruefmanager: Pruefmanager, data_grabber: DataGrabber) -> None:
"""Injiziert Services vom übergeordneten DockWidget."""
_ = data_grabber
self.pruefmanager = pruefmanager
self.logic = TabBLogic(pruefmanager=self.pruefmanager)
if self._kartenname_combo:
self.logic.set_kartenname_for_auswahl(self._kartenname_combo.currentText())
if self._massstab_combo:
self.logic.set_plotmassstab_for_auswahl(
self._massstab_combo.currentText(),
self._get_current_canvas_scale(),
)
if self._thema_combo:
self.logic.set_view_for_auswahl(self._thema_combo.currentText())
if self._zielgroesse_combo:
self.logic.set_zielgroesse_for_auswahl(self._zielgroesse_combo.currentText())
if self._endlosrolle_cb:
self.logic.set_formfaktor(self._endlosrolle_cb.isChecked())
def _build_ui(self) -> None:
"""Erstellt die reduzierte UI für die Themenauswahl."""
main_layout = QVBoxLayout()
main_layout.setSpacing(4)
main_layout.setContentsMargins(4, 4, 4, 4)
kartenname_label = QLabel("Kartenname")
kartenname_label.setStyleSheet("font-weight: bold; margin-top: 6px;")
main_layout.addWidget(kartenname_label)
self._kartenname_combo = QComboBox(self)
self._kartenname_combo.addItem(KARTENNAME_PLACEHOLDER)
self._kartenname_combo.addItem(KARTENNAME_38)
self._kartenname_combo.addItem(KARTENNAME_41)
self._kartenname_combo.currentTextChanged.connect(self._on_kartenname_changed)
main_layout.addWidget(self._kartenname_combo)
massstab_label = QLabel("Maßstab")
massstab_label.setStyleSheet("font-weight: bold; margin-top: 6px;")
main_layout.addWidget(massstab_label)
self._massstab_combo = QComboBox(self)
self._massstab_combo.addItem(MASSSTAB_WIE_KARTENFENSTER)
self._massstab_combo.addItems(list(PLOTMASSSTAB_BY_AUSWAHL.keys()))
self._massstab_combo.currentTextChanged.connect(self._on_massstab_changed)
main_layout.addWidget(self._massstab_combo)
thema_label = QLabel("Thema")
thema_label.setStyleSheet("font-weight: bold; margin-top: 6px;")
main_layout.addWidget(thema_label)
self._thema_combo = QComboBox(self)
self._thema_combo.addItem(THEMA_WIE_KARTENFENSTER)
self._thema_combo.addItems(self._get_gespeicherte_themen())
self._thema_combo.currentTextChanged.connect(self._on_thema_changed)
main_layout.addWidget(self._thema_combo)
zielgroesse_label = QLabel("max. Blattgröße")
zielgroesse_label.setStyleSheet("font-weight: bold; margin-top: 6px;")
main_layout.addWidget(zielgroesse_label)
zielgroesse_row = QHBoxLayout()
zielgroesse_row.setSpacing(6)
self._zielgroesse_combo = QComboBox(self)
self._zielgroesse_combo.addItems(list(DIN_GROESSEN.keys()))
self._zielgroesse_combo.setCurrentText(DIN_STANDARD)
self._zielgroesse_combo.currentTextChanged.connect(self._on_zielgroesse_changed)
zielgroesse_row.addWidget(self._zielgroesse_combo)
self._endlosrolle_cb = QCheckBox("Endlosrolle", self)
self._endlosrolle_cb.setChecked(False)
self._endlosrolle_cb.stateChanged.connect(self._on_formfaktor_changed)
zielgroesse_row.addWidget(self._endlosrolle_cb)
main_layout.addLayout(zielgroesse_row)
self._btn_vorlage_erstellen = QPushButton("Vorlage erstellen", self)
self._btn_vorlage_erstellen.clicked.connect(self._on_vorlage_erstellen)
main_layout.addWidget(self._btn_vorlage_erstellen)
main_layout.addStretch(1)
self.setLayout(main_layout)
def _restore_state(self) -> None:
"""Stellt die gespeicherten Combobox-Zustände wieder her."""
if not self._kartenname_combo or not self._massstab_combo or not self._thema_combo:
return
if not self._zielgroesse_combo or not self._endlosrolle_cb:
return
saved_kartenname = get_variable(KARTENNAME_VAR, scope="project")
if saved_kartenname in (KARTENNAME_38, KARTENNAME_41):
self._kartenname_combo.setCurrentText(saved_kartenname)
else:
self._kartenname_combo.setCurrentText(KARTENNAME_PLACEHOLDER)
saved_massstab = get_variable(MASSSTAB_VAR, scope="project")
valid_massstaebe = [MASSSTAB_WIE_KARTENFENSTER, *PLOTMASSSTAB_BY_AUSWAHL.keys()]
if saved_massstab in valid_massstaebe:
self._massstab_combo.setCurrentText(saved_massstab)
else:
self._massstab_combo.setCurrentText(MASSSTAB_WIE_KARTENFENSTER)
aktuelle_themen = [THEMA_WIE_KARTENFENSTER, *self._get_gespeicherte_themen()]
self._thema_combo.clear()
self._thema_combo.addItems(aktuelle_themen)
saved_thema = get_variable(THEMA_VAR, scope="project")
if saved_thema in aktuelle_themen:
self._thema_combo.setCurrentText(saved_thema)
else:
self._thema_combo.setCurrentText(THEMA_WIE_KARTENFENSTER)
saved_zielgroesse = get_variable(ZIELGROESSE_UI_VAR, scope="project")
if saved_zielgroesse in DIN_GROESSEN:
self._zielgroesse_combo.setCurrentText(saved_zielgroesse)
else:
self._zielgroesse_combo.setCurrentText(DIN_STANDARD)
saved_formfaktor = get_variable(FORMFAKTOR_UI_VAR, scope="project")
self._endlosrolle_cb.setChecked(saved_formfaktor == "Endlosrolle")
def _on_kartenname_changed(self, value: str) -> None:
"""Persistiert die Kartennamen-Auswahl und setzt ``sn_kartenname``."""
if value in (KARTENNAME_38, KARTENNAME_41):
set_variable(KARTENNAME_VAR, value, scope="project")
else:
set_variable(KARTENNAME_VAR, "", scope="project")
if self.logic:
self.logic.set_kartenname_for_auswahl(value)
def _on_massstab_changed(self, value: str) -> None:
"""Persistiert Maßstabsauswahl und setzt ``sn_plotmassstab``."""
set_variable(MASSSTAB_VAR, value, scope="project")
if self.logic:
self.logic.set_plotmassstab_for_auswahl(value, self._get_current_canvas_scale())
def _on_thema_changed(self, value: str) -> None:
"""Persistiert die Thema-Auswahl und setzt ``sn_view``."""
set_variable(THEMA_VAR, value, scope="project")
if self.logic:
self.logic.set_view_for_auswahl(value)
def _on_zielgroesse_changed(self, value: str) -> None:
"""Persistiert Blattgröße und setzt ``sn_zielgroesse``."""
set_variable(ZIELGROESSE_UI_VAR, value, scope="project")
if self.logic:
self.logic.set_zielgroesse_for_auswahl(value)
def _on_formfaktor_changed(self, state: int) -> None:
"""Persistiert Endlosrolle-Zustand und setzt ``sn_formfaktor``."""
checked = bool(state)
set_variable(FORMFAKTOR_UI_VAR, "Endlosrolle" if checked else "Blatt", scope="project")
if self.logic:
self.logic.set_formfaktor(checked)
def _on_vorlage_erstellen(self) -> None:
"""Startet die Pipeline Druckvorlage_anlegen."""
print("[TabB] _on_vorlage_erstellen aufgerufen")
if not self.logic or not self.pruefmanager:
print(f"[TabB] Abbruch: logic={self.logic}, pruefmanager={self.pruefmanager}")
return
# Layer direkt aus Tab A lesen (unabhängig von Projektvariable)
layer = None
tab_a = self._get_tab_a_widget()
print(f"[TabB] tab_a Widget: {tab_a!r}")
if tab_a is not None:
layer_combo = getattr(tab_a, "layer_combo", None)
print(f"[TabB] layer_combo: {layer_combo!r}")
if layer_combo is not None:
layer = layer_combo.currentLayer()
print(f"[TabB] layer: {layer!r} (Name: {getattr(layer, 'name', lambda: '')()})")
print(f"[TabB] Rufe druckvorlage_anlegen auf mit layer={layer!r}, "
f"kartenname={self._kartenname_combo.currentText() if self._kartenname_combo else '?'}, "
f"massstab={self._massstab_combo.currentText() if self._massstab_combo else '?'}, "
f"zielgroesse={self._zielgroesse_combo.currentText() if self._zielgroesse_combo else '?'}, "
f"formfaktor={self._endlosrolle_cb.isChecked() if self._endlosrolle_cb else '?'}")
result = self.logic.druckvorlage_anlegen(
layer=layer,
kartenname_auswahl=self._kartenname_combo.currentText() if self._kartenname_combo else "",
massstab_auswahl=self._massstab_combo.currentText() if self._massstab_combo else "",
zielgroesse=self._zielgroesse_combo.currentText() if self._zielgroesse_combo else DIN_STANDARD,
formfaktor=self._endlosrolle_cb.isChecked() if self._endlosrolle_cb else False,
)
print(f"[TabB] druckvorlage_anlegen Ergebnis: {result}")
if result.get("switch_to_tab_a"):
self._aktiviere_tab_a()
def _get_tab_widget(self):
"""Findet das übergeordnete QTabWidget anhand des ``tabBar``-Attributs."""
try:
widget = self.parent()
while widget is not None:
if hasattr(widget, "tabBar") and hasattr(widget, "setCurrentIndex"):
return widget
parent_fn = getattr(widget, "parent", None)
widget = parent_fn() if callable(parent_fn) else None
except Exception:
pass
return None
def _get_tab_a_widget(self):
"""Gibt die Tab-A-Widget-Instanz zurück (Index 0 im übergeordneten QTabWidget)."""
tab_widget = self._get_tab_widget()
if tab_widget is None:
return None
try:
return tab_widget.widget(0)
except Exception:
return None
def _aktiviere_tab_a(self) -> None:
"""Wechselt den aktiven Reiter auf Tab A im übergeordneten QTabWidget."""
tab_widget = self._get_tab_widget()
if tab_widget is not None:
try:
tab_widget.setCurrentIndex(0)
except Exception:
pass
def _connect_project_signals(self) -> None:
"""Verbindet QgsProject-Signale für Projektwechsel/-neuladen."""
project = QgsProject.instance()
for signal_name in ("readProject", "newProjectCreated", "cleared"):
signal = getattr(project, signal_name, None)
if signal is None:
continue
try:
signal.connect(self._on_project_changed)
except Exception:
pass
def _on_project_changed(self, *args) -> None:
"""Reagiert auf Projektwechsel: Signale neu binden, Combobox und State auffrischen."""
_ = args
# Alte Theme-Collection-Signals zuerst trennen
self._disconnect_theme_collection_signals()
# Neu verbinden für das jetzt geladene Projekt
self._theme_signal_connected = False
self._connect_theme_collection_signals()
# Ansicht-Liste + gespeicherten State wiederherstellen
self._restore_state()
def _disconnect_theme_collection_signals(self) -> None:
"""Trennt Signale der alten Theme-Collection sauber."""
collection = self._connected_theme_collection
if collection is None:
return
for signal_name in ("mapThemesChanged", "changed", "themeChanged"):
signal = getattr(collection, signal_name, None)
if signal is None:
continue
try:
signal.disconnect(self._refresh_thema_combo_live)
except Exception:
pass
self._connected_theme_collection = None
def _connect_theme_collection_signals(self) -> None:
"""Verbindet Signale der Theme-Collection für Live-Aktualisierung der Themenliste."""
if self._theme_signal_connected:
return
try:
theme_collection = QgsProject.instance().mapThemeCollection()
except Exception:
return
if theme_collection is None:
return
connected_any = False
for signal_name in ("mapThemesChanged", "changed", "themeChanged"):
signal = getattr(theme_collection, signal_name, None)
if signal is None:
continue
try:
signal.connect(self._refresh_thema_combo_live)
connected_any = True
except Exception:
pass
if connected_any:
self._connected_theme_collection = theme_collection
self._theme_signal_connected = connected_any
def _refresh_thema_combo_live(self, *args) -> None:
"""Aktualisiert die Thema-Combobox bei Änderungen gespeicherter Layerthemen."""
_ = args
if not self._thema_combo:
return
vorherige_auswahl = self._thema_combo.currentText() or THEMA_WIE_KARTENFENSTER
eintraege = [THEMA_WIE_KARTENFENSTER, *self._get_gespeicherte_themen()]
self._thema_combo.blockSignals(True)
self._thema_combo.clear()
self._thema_combo.addItems(eintraege)
if vorherige_auswahl in eintraege:
self._thema_combo.setCurrentText(vorherige_auswahl)
else:
self._thema_combo.setCurrentText(THEMA_WIE_KARTENFENSTER)
self._thema_combo.blockSignals(False)
self._on_thema_changed(self._thema_combo.currentText())
def _get_gespeicherte_themen(self) -> list[str]:
"""Liefert die Namen der im Projekt gespeicherten Layerthemen (QgsMapThemeCollection)."""
try:
theme_collection = QgsProject.instance().mapThemeCollection()
if theme_collection is None:
return []
themes = theme_collection.mapThemes()
except Exception:
return []
namen: list[str] = []
for theme_name in themes:
name = str(theme_name or "").strip()
if name and name not in namen:
namen.append(name)
return namen
def _get_current_canvas_scale(self) -> float | None:
"""Liest den aktuellen Maßstab aus der Kartensicht."""
try:
canvas = iface.mapCanvas()
if canvas is None:
return None
scale = canvas.scale()
return float(scale) if scale else None
except Exception:
return None

View File

@@ -1,12 +0,0 @@
from qgis.PyQt.QtWidgets import QWidget, QVBoxLayout, QLabel, QLineEdit
class TabA(QWidget):
tab_title = "Tab A"
def __init__(self, parent=None):
super().__init__(parent)
layout = QVBoxLayout()
layout.addWidget(QLabel("Plugin2 Tab A"))
layout.addWidget(QLineEdit("Feld A1"))
layout.addWidget(QLineEdit("Feld A2"))
self.setLayout(layout)