- 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>
128 lines
5.4 KiB
Markdown
128 lines
5.4 KiB
Markdown
# 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.
|