Files
Plugin_SN_Verfahrensgebiet/docs/aus_shape_laden_technisch.md
T
Michael OttoandClaude Sonnet 5 b4f2222b50 Shape-Ladevorgang: Mehrfachauswahl, ZIP-Temp-Entpacken, FBSchl-Prüfung
- Dateidialog erlaubt Mehrfachauswahl von .zip/.shp; ZIPs werden in ein
  temporäres Verzeichnis entpackt statt dauerhaft neben der ZIP-Datei
  (Cleanup nach dem Einlesen)
- Je Shapefile wird das Feld FBSchl geprüft und in Neuordnungs- bzw.
  Neuvermessungsgebiet unterschieden; Geometrien gleichen Typs werden über
  alle Dateien hinweg zu je einem Layer verschmolzen und entsprechend
  benannt ("Neuordnungsgebiet (NoBIS)" / "Neuvermessungsgebiet (NoBIS)")
- Fehler einzelner Dateien/Shapefiles brechen den Vorgang nicht mehr ab,
  sondern werden gesammelt und am Ende in einer Meldung ausgegeben
- Fortschrittsdialog erscheint erst nach dem Stop nach dem Laden, nicht
  mehr schon vor dem Dateidialog
- Vorprüfung auf gesetzte Verfahrensnummer vorerst auskommentiert
- Ablauf-Dokumentation aufgeteilt in aus_alkis_laden.md und
  aus_shape_laden.md (+ technische Ergänzung aus_shape_laden_technisch.md)

Löst #36, #37, #38

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-02 08:36:13 +02:00

128 lines
5.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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):<br/>.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:<br/>'ZIP konnte nicht entpackt werden'"]
FINDEALL["Alle .shp-Dateien im<br/>entpackten Verzeichnis suchen"]
KEINSHP{"Mind. eine .shp gefunden?"}
FEHLER_KEIN_SHP["Fehler notieren:<br/>'kein gültiges Shape-Dateiset'"]
ALS_EINTRAG["Jede gefundene .shp als<br/>eigenen Eintrag übernehmen"]
PROJEDEN["Für jeden Shapefile-Eintrag:"]
LOAD["Als QgsVectorLayer laden"]
VALID{"isValid()?"}
FEHLER_INVALID["Fehler notieren:<br/>'kein gültiges Shape-Dateiset'"]
FBSCHL{"Feld 'FBSchl' vorhanden<br/>und Wert bekannt?"}
FEHLER_FBSCHL["Fehler notieren:<br/>Feld fehlt / unbekannter Wert"]
TYP{"FBSchl-Wert"}
ALS_NEUORDNUNG["Geometrien zu<br/>'Neuordnungsgebiet' sammeln"]
ALS_NEUVERMESSUNG["Geometrien zu<br/>'Neuvermessungsgebiet' sammeln"]
NACHSCHLEIFE["Nach Verarbeitung aller Einträge"]
FEHLERVORHANDEN{"Fehler gesammelt?"}
SAMMELMELDUNG["Sammelmeldung anzeigen:<br/>alle fehlerhaften Dateien"]
NICHTSVERWERTBAR{"Mind. ein Typ mit<br/>gültigen Geometrien?"}
ABBRUCH2(["Abbruch (None)"])
MERGE["Je Gebietstyp:<br/>unaryUnion aller gesammelten Geometrien<br/>→ ein Memory-Layer je Typ"]
BENENNEN["Layer benennen:<br/>'Neuordnungsgebiet (NoBIS)' /<br/>'Neuvermessungsgebiet (NoBIS)'"]
RETURN["Liste der Layer zurückgeben<br/>(1 oder 2 Layer)"]
EINFUEGEN["Alle Layer ins Projekt einfügen"]
STOP{{"STOP:<br/>'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.