Skip to content

Instantly share code, notes, and snippets.

@signedav
Last active April 21, 2023 10:20
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save signedav/4bef7d314c54e9e0346f954c88bdaf2e to your computer and use it in GitHub Desktop.
Save signedav/4bef7d314c54e9e0346f954c88bdaf2e to your computer and use it in GitHub Desktop.
Base Model Support

Verbessertes Arbeiten mit erweiterten INTERLIS Modellen in Model Baker

Hintergrund

Model Baker macht das Arbeiten mit INTERLIS Datenmodellen in QGIS einfach. Dennoch bedürfen gewisse Szenarien noch manueller Konfigurationen. Eines davon ist das Arbeiten mit erweiterten Modellen. Dies könnte verbessert werden.

Layerbenennung und Sichtbarkeit

Problem

Wenn ein Modell bzw. Topic erweiterte Klassen enthält, werden die alle in der physischen Datenbank implementiert und folglich Layer in QGIS erstellt. Da die erweiterten Klassen oftmals die gleichen Namen haben, ist es schwierig sich zurecht zu finden.

image

Wenn eine in einer Assoziation referenzierte Klasse vererbt wird, führt dies in QGIS zu einer Relation pro Vererbung. Dies kann insbesondere mit Katalogen oder auch Behältern unübersichtlich werden.

image

Dabei möchte man meistens nur auf einem spezifischen Modell bzw. Topic arbeiten.

Lösung

Bei der Generierung des QGIS Projekts in Model Baker sollen Benutzer:innen auswählen können, in welchem Modell bzw. Topic sie arbeiten möchten.

image

Das QGIS Projekt soll dann entsprechend generiert werden. Die Layer des gewählten Modells bzw. Topics sollen prominenter angezeigt werden. Die andern Layer versteckt oder unbenannt (evtl. auch in einer Gruppe gesammelt werden). Gewisse Relationen sollen nicht erstellt werden bzw. nicht im Formular hinzugefügt werden. Dies soll noch evaluiert werden. Genauso was im GUI Sinn macht.

Alternatives GUI:

image

Update: Bei genaurer Analyse wurde erkannt, dass in diesem Zusammenhang es wenig Sinn macht, ein spezifisches Modell auszuwählen. Wiederum könnten es auch mehrere Modelle sein, die erweitert wurden und folglich das Projekt dafür optimiert werden soll. Deshalb wär eher so ein GUI sinnvoll:

image (könnte man auch mit Combobox lösen)

Export der Daten im Basismodell

Problem

Möchte man die Daten im erweiterten Modell erfassen, allerdings im Format des Basismodelles exportieren, muss man aktuell den ili2db Kommando manuell bearbeiten (--exportModels). Dies ist umständlich und fehleranfällig.

image

Lösung

Es soll erkannt werden in welchen Formaten (Modellen) exportiert werden kann und im GUI dann eine weitere Checkboxliste bereitgestellt werden. So kann das Modell ausgewählt werden, in dem die exportierten Daten geschrieben sein sollen.

Strech Goal: Erfassen von Basisobjekten im Behälter des erweiterten Modelles

Falls die Implementierungen der ersten zwei Punkte einfacher sind als erwartet, kann die übrige Zeit zur Lösung der Behälter Problematik investiert werden.

Problem

Aktuell wird für jedes Topic ein Behälter erstellt, damit die Daten sauber erfasst werden können. Wird von dem Objekt des erweiterten Modell aber auf ein Objekt im Basismodell verwiesen, muss dieses Objekt ebenfalls im Behälter des erweiterten Modell erfasst werden.

Lösung

Erstens sollen die Behälter des erweiterten Modelles in den Layer des Basismodells verfügbar sein. Zweitens könnten anhand des optimierten Projektes nur die benötigten Behälter erstellt werden. Oder es könnte auch so automatisiert werden, dass die Standardwerte für die Baskets Layerübergreifend beibehalten werden.

Demo Modell


INTERLIS 2.3;
MODEL OrtsplanungV1_1 (en) AT "mailto:localhost" VERSION "2021-07-20" =

  IMPORTS LocalisationCH_V1,GeometryCHLV95_V1;
  DOMAIN
      CHSurface = SURFACE WITH (STRAIGHTS) VERTEX GeometryCHLV95_V1.Coord2 WITHOUT OVERLAPS > 0.001;

  TOPIC Konstruktionen =
    CLASS Gebaeude  =
      Name : MANDATORY TEXT*99;
      Geometrie : MANDATORY OrtsplanungV1_1.CHSurface;
    END Gebaeude;

    CLASS Strasse =
        Type : MANDATORY TEXT*99;
    END Strasse;

    ASSOCIATION Gebaeude_Strasse =
      Strasse -- {0..1} Strasse;
      Gebaeude -- {0..*} Gebaeude;
    END Gebaeude_Strasse;
  END Konstruktionen;

END OrtsplanungV1_1.

MODEL Erweiterte_OrtsplanungV1_1 (en) AT "mailto:localhost" VERSION "2021-07-20" =
  IMPORTS OrtsplanungV1_1;
  
  TOPIC Gewerbe EXTENDS OrtsplanungV1_1.Konstruktionen =
    OID AS INTERLIS.UUIDOID;

    CLASS Gebaeude (EXTENDED) =
      Firma : TEXT*99;
    END Gebaeude;

  END Gewerbe;

  TOPIC Freizeit EXTENDS OrtsplanungV1_1.Konstruktionen =
    OID AS INTERLIS.UUIDOID;

    CLASS Gebaeude (EXTENDED) =
      Unterhaltungsart : TEXT*99;
    END Gebaeude;

  END Freizeit;  

  TOPIC Industrie EXTENDS Erweiterte_OrtsplanungV1_1.Gewerbe =
    OID AS INTERLIS.UUIDOID;

    CLASS Gebaeude (EXTENDED) =
      Sektion : TEXT*99;
    END Gebaeude;

  END Industrie;

END Erweiterte_OrtsplanungV1_1.

Sourcen

opengisch/QgisModelBaker#665 opengisch/QgisModelBaker#461 opengisch/QgisModelBaker#671 opengisch/QgisModelBaker#663

Mockups: https://excalidraw.com/#json=FjqlyfvjijdwRbNEjxgI1,dohIIOwTl-OksdUwt2-f2g

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment