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

5.4 KiB
Raw Blame History

Technischer Ablauf: Aus Shape laden (bis zum Stop)

Ergänzung zu 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.

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.