Let’s start …
–v–
–v–
–v–
–v–
| Zeit | Inhalt |
|---|---|
| 09.00 | Einführung und Umgebung 🧑🏫 |
| 10.00 | Modell Import 👪 |
| 10.30 | Metaattribute 🧑🏫 💻 |
| 11.00 | Pause |
| 11.15 | Vererbungen und Abbildung 🧑🏫 💻 |
| 12.00 | Zmittag |
–v–
| Zeit | Inhalt |
|---|---|
| 13.00 | Daten Import und Export 👪 Behälter und Datasets 🧑🏫 💻 |
| 13.45 | Erfassung und Validierung 👪 💻 |
| 15.15 | Pause |
| 15.30 | UsabILIty Hub 🧑🏫 👪 💻 |
| 16.30 | Übersetzungsmodelle 🧑🏫 |
| 16.45 | Abschluss, Fragen und Anregungen |
–v–
Kurze Einführung…
–v–
Schnelles Erstellen eines QGIS-Projekts aus einem physischen Datenmodell.
Analysiert die vorhandene Struktur und konfiguriert ein QGIS-Projekt mit allen verfügbaren Informationen.
–v–
In INTERLIS definierte Modelle bieten zusätzliche Metainformationen wie Domänen, Einheiten von Attributen oder objektorientierte Definitionen von Tabellen.
Diese können genutzt werden, um die Projektkonfiguration weiter zu optimieren.
–v–
java -jar /home/dave/dev/opengisch/QgisModelBaker/QgisModelBaker/libili2db/bin/ili2pg-4.6.1/ili2pg-4.6.1.jar --schemaimport --dbhost localhost --dbport 5432
--dbusr postgres --dbpwd ****** --dbdatabase bakery --dbschema adsfdsaf2 --setupPgExt --coalesceCatalogueRef --createEnumTabs --createNumChecks --createUnique
--createFk --createFkIdx --coalesceMultiSurface --coalesceMultiLine --coalesceMultiPoint --coalesceArray --beautifyEnumDispName --createGeomIdx --createMetaInfo
--expandMultilingual --createTypeConstraint --createEnumTabsWithId --createTidCol --importTid --smart2Inheritance --strokeArcs --defaultSrsCode 2056
--models Wildruhezonen_LV95_V2_1
–v–
Kann als Framework genutzt werden. So wie Asistente LADM-COL es tut.
… und ist auch als Python Package verfügbar:
pip install modelbaker
–v–
QGIS Plugin
https://github.com/opengisch/QgisModelBaker
Code Repository Backend Library
https://github.com/opengisch/QgisModelBakerLibrary
–v–
https://github.com/opengisch/QgisModelBaker/issues
–v–

Was wir alles brauchen…
–v–
–v–
–v–
postgisuuid-ossp
–v–
$ psql -Upostgres -hlocalhost -dbakery
postgres=# CREATE DATABASE databasename;
postgres=# \connect databasename;
databasename=# CREATE EXTENSION postgis;
databasename=# CREATE EXTENSION uuid-ossp;
–v–
Falls es nicht schon installiert ist…
Dort je nach PostgreSQL Verision postgis-bundle-pg14x64-setup-3.3.2-2.exe finden, downloaden und installieren.
Vorzugsweise posgres.app nutzen (dort ist PostGIS bereits drin) https://postgresapp.com/de/downloads.html
sudo apt install postgis
–v–
| Host | modelbaker-workshop-exoscale-d9c1bf3f-51a3-4ab8-afac-6cb37d8a8f.e.aivencloud.com |
| Port | 21699 |
| User | testbaker |
| Passwort | testbaker |
| DB | bakery |
(nur heute aktiv)
Verwende für die Schemas immer als Prefix deinen Namenskürzel:
sigdav_ (für David Signer)
–v–
Habe ich Java installiert?
java --version
… kommt etwas, dann gut ist ☕
sudo apt-get install openjdk-18-jre
or
sudo apt install default-jre
–v–
–v–
–v–
–v–
Lasst uns beginnen…
… lasst uns abschweifen
–v–
–v–
Metaattribute erlauben eine Ergänzung der INTERLIS-Modelle mit zusätzlichen Angaben, die in der aktuellen Spezifikation von INTERLIS nicht vorgesehen sind.
Siehe eCH-0117 Meta-Attribute für INTERLIS-Modelle
–v–
Spezifische Display Expression für die Tabelle der Klasse ZustaendigkeitsKataster.

–v–
!!@<name>=<value>
Gefolgt vom referenzierten Element (MODEL, TOPIC, CLASS etc.)
–v–
Ein Kommentar startet mit !! und endet mit einem Zeilenende.
Ein Metaattribut startet ebenso mit !! aber gefolgt von @
–v–
Model Baker spezifisches Metaattribut:
!!@qgis.modelbaker.dispExpression='<QGIS Expression>'
–v–
Definition in Modell KbS_V1_5
MODEL KbS_V1_5 (de) =
TOPIC Belastete_Standorte =
!!@qgis.modelbaker.dispExpression = "'Nr: '|| uid ||' / '|| katastername"
CLASS ZustaendigkeitKataster =
[...]

–v–
(unvollständig) Siehe auch https://interlis.discourse.group/t/uebersicht-interlis-meta-attribute/70
–v–
Aber wir können doch nicht einfach am Modell rumbasteln!
–v–
… a.k.a. “Konfigfile”, “Metaattributefile”, “INI-File”, “TOML-File”…
Eigentlich im Format INI aber wird meistens als .toml gespeichert.
Nicht zu verwechseln mit Meta-Konfigurationsdatei um ili2db zu “steuern” (auch im Zusammenhang mit UsabILIty Hub).
–v–
Definition in Konfigurationsdatei für KbS_V1_5
["KbS_V1_5.Belastete_Standorte.ZustaendigketKataster"]
qgis.modelbaker.dispExpression = "'Nr: '|| uid ||' / '||katastername"

–v–
Nur zur Info…
["KbS_V1_5.Standorte.Belasteter_Standort.Nr"]
# disable mandatory constraint of Katasternummer
multiplicity="off"
["KbS_V1_5.Standorte.Belasteter_Standort.Constraint1"]
msg = "Mind. eine Untersuchungsmassnahme erfassen."
–v–
Multigeometrie konstruiert aus STRUCTURE MultiPolygon
“Plattgewalzte Mehrsprachigkeit” auf STRUCTURE MultilingualUri
–v–
ili2db.mapping
Auf Klasse oder Struktur
Strukturen werden anstatt mit Beziehungen mit Spalten abgebildet (zBs. Multi-Geometrie).
Auf Attribut
Strukturattribute (BAG OF/LIST OF) werden anstatt mit Beziehungen mit einem Datentyp abgebildet.
–v–
!!@ili2db.mapping=MultiSurface
STRUCTURE MultiPolygon =
Polygones: BAG {1..*} OF PolygonStructure;
END MultiPolygon;
!!@ili2db.mapping=Multilingual
STRUCTURE MultilingualUri =
LocalisedText : BAG {1..*} OF LocalisedUri;
UNIQUE (LOCAL) LocalisedText: Language;
END MultilingualUri;
–v–
[KbS_V1_5.Belastete_Standorte.MultiPolygon]
ili2db.mapping = "MultiSurface"
[KbS_V1_5.Belastete_Standorte.MultilingualUri]
ili2db.mapping = "Multilingual"
–v–
–v–
–v–
–v–
–v–
Gebaeudeinventar_V1MODEL Gebaeudeinventar_V1 (de)
AT "mailto:signedav@localhost"
VERSION "2023-01-19" =
IMPORTS GeometryCHLV95_V1;
TOPIC Gebaeude =
CLASS Gebaeude =
EGID : MANDATORY TEXT*16;
Koordinaten : MANDATORY GeometryCHLV95_V1.Coord2;
END Gebaeude;
CLASS Adresse =
Strasse : TEXT*200;
Ort : MANDATORY TEXT*200;
END Adresse;
ASSOCIATION AdresseGebaeude =
GebaeudeAdresse -- {1..*} Adresse;
Gebaeude -- {1} Gebaeude;
END AdresseGebaeude;
END Gebaeude;
END Gebaeudeinventar_V1.
–v–
Müssen für ein Öko-Projekt ein weiteres Attribut verwenden: EntsprichtStandard
Möchten aber dennoch die Daten als Gebaeudeinventar_V1 zurückliefern.
–v–
–v–
Erweitern einer Klasse (Basisklasse) in eine “verbesserte” Ableitung.
Eine erweiterte Klasse (Ableitung) hat alle Eigenschaften der Basisklasse + “mehr”.
“mehr” heisst zusätzliche Attribute und Beschränkungen.
–v–
Gebaeude wird ein besseres Gebaeude
–v–
…mit EXTENDED
CLASS Gebaeude =
EGID : MANDATORY TEXT*16;
Koordinaten : MANDATORY GeometryCHLV95_V1.Coord2;
END Gebaeude;
CLASS Gebaeude (EXTENDED) =
EntsprichtStandard: BOOLEAN;
END Gebaeude;
–v–
–v–
–v–
Wollen wir nun mehrere Arten von Gebäude erfassen:
Anzahl_Wohnungen)Anzahl_Firmen)Anzahl_Firmen und Zweck)… und dennoch alle schlussendlich als Gebaeude zurückliefern.
–v–
…mit EXTENDS
CLASS Gebaeude =
EGID : MANDATORY TEXT*16;
Koordinaten : MANDATORY GeometryCHLV95_V1.Coord2;
END Gebaeude;
CLASS Gewerbegebaeude
EXTENDS Gebaeude =
Anzahl_Firmen : MANDATORY 1 .. 100;
END Gewerbegebaeude;
–v–
MultiGebaeudeinventar_V1
–v–
MODEL Gebaeudeinventar_V1 (de) =
TOPIC Gebaeude =
CLASS Gebaeude =
EGID : MANDATORY TEXT*16;
Koordinaten : MANDATORY GeometryCHLV95_V1.Coord2;
END Gebaeude;
CLASS Adresse =
Strasse : TEXT*200;
Ort : MANDATORY TEXT*200;
END Adresse;
ASSOCIATION AdresseGebaeude =
GebaeudeAdresse -- {1..*} Adresse;
Gebaeude -- {1} Gebaeude;
END AdresseGebaeude;
END Gebaeude;
END Gebaeudeinventar_V1.
MODEL MultiGebaeudeinventar_V1 (de) =
IMPORTS Gebaeudeinventar_V1;
TOPIC Gebaeude EXTENDS Gebaeudeinventar_V1.Gebaeude=
!! First inheritance
CLASS Wohngebaeude
EXTENDS Gebaeude =
Anzahl_Wohnungen : MANDATORY 1 .. 1000;
END Wohngebaeude;
!! Second inheritance
CLASS Gewerbegebaeude
EXTENDS Gebaeude =
Anzahl_Firmen : MANDATORY 1 .. 100;
END Gewerbegebaeude;
!! Inheritance of first inheritance
CLASS Oeffentliches_GewerbeGebaude
EXTENDS Gewerbegebaeude =
Zweck : MANDATORY TEXT*255;
END Oeffentliches_GewerbeGebaude;
END Gebaeude;
END MultiGebaeudeinventar_V1.
–v–
–v–
–v–
Versuchs mal mit Smart2 und wenns nicht gut aussieht mit Smart1.
Zitat: Romedi Filli - 2022
–v–
–v–

–v–
Gebaeude.t_type: (
Wohngebaeude,
Gewerbegebaeude,
Oeffentliches_
Gewerbegebaeude
)

–v–

–v–
Gebaeude.t_type: (
Wohngebaeude,
Gewerbegebaeude,
Oeffentliches_
Gewerbegebaeude
)

–v–

–v–
Oeffentliches_
Gewerbegebaeude.t_type: (
Gewerbegebaeude,
Oeffentliches_
Gewerbegebaeude
)

–v–

–v–

–v–
–v–
–v–
Resultiert in was wir sehen in der New Class Grafik.

–v–
–v–
Heisst also Gebaeude nutzt New Class und alle andern Super Class Strategie.
Resultiert in was wir sehen in der Super Class Grafik.

–v–
–v–
Heisst also alle nutzen New+Sub Class Strategie.
Resultiert in was wir sehen in der New+Sub Class Grafik.

–v–
–v–
–v–
–v–

…probieren wirs aus mit OekoGebaeudeinventar_V1 (oder auch ZG_Nutzungsplanung_V1_1)
–v–
Wenn ein Modell bzw. Topic erweiterte Klassen enthält, werden die inklusive Basisklassen in der physischen Datenbank implementiert…
… und folglich Layer in QGIS erstellt.
–v–
–v–
–v–
–v–
–v–
–v–
–v–
–v–
–v–

–v–

–v–

–v–

–v–

–v–

–v–
–v–
–v–
Objekt-IDs (OID) sind systemübergreifend eindeutige Zeichenketten, die ein INTERLIS Objekt identifizieren.
Um Objekte konfiliktlos über verschiedene Stellen austauschen und updaten.
–v–
In der Transferdatei ist die OID unter TID einsehbar.
<City_V1.Constructions.Buildings TID="chMBAKER00000100">
<Street>Rue des Fleures</Street><Number>1</Number>
</City_V1.Constructions.Buildings>
–v–
Eine OID ist im XTF eine TID
Eine TID im XTF ist aber nicht immer eine OID
Denn man muss nicht unbedingt mit OIDs arbeiten. Eine XTF Datei braucht aber TIDs für Referenzen etc.
Wenn man keine OIDs benutzt, sind die TIDs einfach irgendwelche Nummern oder Zeichen (keine systemübergreifende Stabilität garantiert!)
–v–

–v–
t_ili_tid entspricht der TID im XTF und somit der OID (sofern OIDs verwendet werden)t_id ist nur eine systeminterne Sequenz-Nummer–v–
t_ili_tid leer bleibt, dann wird bei einem Export die t_id in die TID geschrieben.t_ili_tid geschrieben.–v–

–v–
[...]
TOPIC Constructions =
BASKET OID AS INTERLIS.UUIDOID;
OID AS INTERLIS.STANDARDOID;
[...]
💡 Tipp: OIDS immer verwenden: kein Mehraufwand, kann bei Datenverlust helfen und erleichtert die Nachvollziehbarkeit von Änderungen.
–v–
–v–
OID TEXT*36
uuid('WithoutBraces')
–v–
OID 0 ... 2147483647
t_id
–v–
OID TEXT*16
Präfix (2 + 6 Zeichen)
Länderkennung + ein globaler Identifikationsteil.
Postfix (8 Zeichen)
Sequenz (numerisch oder alphanumerisch) des Systems als lokaler Identifikationsteil.
'%change%' || lpad( T_Id, 8, 0 )
–v–
Definiert kein Format für die OID, sondern nur, dass eine OID in allen erweiterten Modellen definiert werden muss.
–v–
Es gelten Regeln des XML-ID-Typs (www.w3.org/TR/REC-xml)
'_' || uuid('WithoutBraces')
Gleiches gilt für benutzerdefinierte OIDs.
–v–
Datenbank > Model Baker > OID Manager

–v–
–v–
–v–
Erhalten von Zusatzinformationen zu INTERLIS Modellen und ihre (QGIS) Projekte automatisch übers Web.
Zusätzliche Konfigurationen einmalig gemacht und mehrfach verwendet.
–v–
–v–
Repositorien-übergreifende Suche nach Metakonfigurationsfiles.
Finden der Metakonfigurationsfiles in den ilidata.xml auf UsabILItyHub (https://models.opengis.ch) oder eigenen Repositories.
–v–
Dort sind Konfigurationen für ili2db, Model Baker und andere Tools definiert.
Ebenso auch Links (Ids) zu:
–v–
–v–
Repositorien-übergreifende Suche der Kataloge, Extra Meta Attribut File und Toppingfiles
Toppingfiles enthalten Informationen zu:
–v–
–v–

–v–
Siehe https://usabilityhub.opengis.ch/
Oder die Model Baker Dokumentation
–v–
–v–
–v–
Übersetzungsmodelle sind übersetzte Modelle, die sich von der Struktur her vom Originalmodell nicht unterscheiden.
–v–

–v–
Fr: https://models.geo.admin.ch/ARE/PlansDAffectation_V1_2.ili
De: https://models.geo.admin.ch/ARE/Nutzungsplanung_V1_2.ili
–v–
… machen Meister:innen
–v–
KbS_V1_5 inklusive Extra Meta Attribut File–v–
MultiGebaeudeinventar_V1 mit Smart1Inheritance<layername>_Smart1MultiGebaeudeinventar_V1 mit Smart2InheritanceNutze dabei keine Optimierung:

–v–
OekoGebaeudeinventar_V1 mit Smart2InheritanceZG_Nutzungsplanung_V1_1 mit Smart2InheritanceNutze dabei keine Optimierung:

–v–
–v–
OekoGebaeudeinventar_V1 mit Smart2 und Hide-OptimierungOekoGebaeudeinventar_V1 und für Gebaeudeinventar_V1–v–
Eine Gruppe verschiedener Interessenten…
–v–
in Order of Appearance
–v–
–v–
(ab Förderer mit Supportstunden inklusive):
–v–
