# Technischer Ablauf: Aus Shape laden (bis zum Stop) Ergänzung zu [aus_shape_laden.md](aus_shape_laden.md), die den fachlichen Ablauf in Kurzform beschreibt. Dieses Dokument zeigt den tatsächlichen technischen Ablauf in `lade_vg_aus_zip()` und dem anschließenden Stop in `verfahrensgebiet_shape_komplett()` (Datei `functions/verfahrensgebiet_shape_komplett.py`). Betrachteter Teilablauf: nur bis zum Stop nach dem Einfügen der Layer ins Projekt. Die anschließenden Schritte (Gemarkung, Flurstücke, Flächenvergleich, Detailprüfung) sind hier nicht dargestellt. ```mermaid flowchart TD Start(["Aus Shape laden"]) DLG["Dateidialog (Mehrfachauswahl):
.zip und/oder .shp"] ABBRUCH1(["Abbruch (keine Auswahl)"]) SAMMEL["Für jede ausgewählte Datei:"] ISZIP{"Endet auf .shp?"} DIREKT["Direkt als Shapefile-Eintrag übernehmen"] ENTPACK["In temporäres Verzeichnis entpacken"] ENTPACKFEHLER{"Entpacken erfolgreich?"} FEHLER_ZIP["Fehler notieren:
'ZIP konnte nicht entpackt werden'"] FINDEALL["Alle .shp-Dateien im
entpackten Verzeichnis suchen"] KEINSHP{"Mind. eine .shp gefunden?"} FEHLER_KEIN_SHP["Fehler notieren:
'kein gültiges Shape-Dateiset'"] ALS_EINTRAG["Jede gefundene .shp als
eigenen Eintrag übernehmen"] PROJEDEN["Für jeden Shapefile-Eintrag:"] LOAD["Als QgsVectorLayer laden"] VALID{"isValid()?"} FEHLER_INVALID["Fehler notieren:
'kein gültiges Shape-Dateiset'"] FBSCHL{"Feld 'FBSchl' vorhanden
und Wert bekannt?"} FEHLER_FBSCHL["Fehler notieren:
Feld fehlt / unbekannter Wert"] TYP{"FBSchl-Wert"} ALS_NEUORDNUNG["Geometrien zu
'Neuordnungsgebiet' sammeln"] ALS_NEUVERMESSUNG["Geometrien zu
'Neuvermessungsgebiet' sammeln"] NACHSCHLEIFE["Nach Verarbeitung aller Einträge"] FEHLERVORHANDEN{"Fehler gesammelt?"} SAMMELMELDUNG["Sammelmeldung anzeigen:
alle fehlerhaften Dateien"] NICHTSVERWERTBAR{"Mind. ein Typ mit
gültigen Geometrien?"} ABBRUCH2(["Abbruch (None)"]) MERGE["Je Gebietstyp:
unaryUnion aller gesammelten Geometrien
→ ein Memory-Layer je Typ"] BENENNEN["Layer benennen:
'Neuordnungsgebiet (NoBIS)' /
'Neuvermessungsgebiet (NoBIS)'"] RETURN["Liste der Layer zurückgeben
(1 oder 2 Layer)"] EINFUEGEN["Alle Layer ins Projekt einfügen"] STOP{{"STOP:
'Layer ... wurde(n) geladen. Weiter?'"}} WEITER(["weiter mit Gemarkung/Flurstücke/…"]) ABBRUCH3(["Abbruch, Layer bleiben im Projekt"]) Start --> DLG DLG -- keine Auswahl --> ABBRUCH1 DLG -- Auswahl --> SAMMEL SAMMEL --> ISZIP ISZIP -- Ja --> DIREKT ISZIP -- Nein --> ENTPACK ENTPACK --> ENTPACKFEHLER ENTPACKFEHLER -- Nein --> FEHLER_ZIP ENTPACKFEHLER -- Ja --> FINDEALL FINDEALL --> KEINSHP KEINSHP -- Nein --> FEHLER_KEIN_SHP KEINSHP -- Ja --> ALS_EINTRAG DIREKT --> PROJEDEN ALS_EINTRAG --> PROJEDEN FEHLER_ZIP -.->|nächste Datei| SAMMEL FEHLER_KEIN_SHP -.->|nächste Datei| SAMMEL PROJEDEN --> LOAD LOAD --> VALID VALID -- Nein --> FEHLER_INVALID VALID -- Ja --> FBSCHL FBSCHL -- Nein --> FEHLER_FBSCHL FBSCHL -- Ja --> TYP TYP -- "901/10110F" --> ALS_NEUORDNUNG TYP -- "901/10120F" --> ALS_NEUVERMESSUNG FEHLER_INVALID -.->|nächstes Shapefile| PROJEDEN FEHLER_FBSCHL -.->|nächstes Shapefile| PROJEDEN ALS_NEUORDNUNG -.->|nächstes Shapefile| PROJEDEN ALS_NEUVERMESSUNG -.->|nächstes Shapefile| PROJEDEN PROJEDEN --> NACHSCHLEIFE NACHSCHLEIFE --> FEHLERVORHANDEN FEHLERVORHANDEN -- Ja --> SAMMELMELDUNG FEHLERVORHANDEN -- Nein --> NICHTSVERWERTBAR SAMMELMELDUNG --> NICHTSVERWERTBAR NICHTSVERWERTBAR -- Nein --> ABBRUCH2 NICHTSVERWERTBAR -- Ja --> MERGE MERGE --> BENENNEN BENENNEN --> RETURN RETURN --> EINFUEGEN EINFUEGEN --> STOP STOP -- Ja --> WEITER STOP -- Nein --> ABBRUCH3 ``` ## Hinweise - **Mehrfachauswahl**: Es können mehrere Dateien gleichzeitig gewählt werden, auch gemischt `.zip` und `.shp`. - **ZIP mit mehreren Shapefile-Sets**: Enthält ein ZIP mehrere `.shp`-Dateien, wird jede einzeln geprüft und verarbeitet – wie ein eigener Eintrag in der Auswahl. - **Fehler pro Datei, nicht pro Vorgang**: Schlägt die Prüfung einer einzelnen Datei/eines einzelnen Shapefiles fehl (ZIP nicht entpackbar, kein Shapefile enthalten, ungültiger Layer, Feld `FBSchl` fehlt oder hat einen unbekannten Wert), wird nur dieser Eintrag übersprungen. Alle anderen werden weiterverarbeitet. Am Ende erscheint eine **gesammelte** Fehlermeldung mit allen fehlerhaften Einträgen – Abbruch (`None`) nur, wenn *kein* Eintrag verwertbare Geometrien geliefert hat. - **Zusammenführen gleicher Gebietstypen**: Alle Geometrien mit demselben `FBSchl`-Typ (über alle Dateien/Shapefiles hinweg) werden per `QgsGeometry.unaryUnion` zu **einem** Memory-Layer verschmolzen – nicht ein Layer pro Datei. - **Temporäre Verzeichnisse**: Jedes entpackte ZIP landet in einem eigenen `tempfile.mkdtemp()`-Verzeichnis, das nach der Verarbeitung (auch im Fehlerfall) wieder gelöscht wird. - **Stop-Punkt**: Nach dem Einfügen aller erzeugten Layer ins Projekt fragt ein Ja/Nein-Dialog, ob mit dem restlichen Workflow (Gemarkung, Flurstücke, Flächenvergleich, Detailprüfung) fortgefahren werden soll. Bei "Nein" bleiben die geladenen Layer im Projekt erhalten, der weitere Ablauf wird aber nicht gestartet.