Atelier Genève - 1.12.2025







Commençons …

Que faisons-nous aujourd’hui ?

–v–

Matthias Kuhn et Denis Rouzaud

–v–

Qui êtes-vous ?

  • D’où viens-je ?
  • Quel est mon travail principal ?
  • Je suis Model Baker … :
  • A. … Zéro: Qu’est-ce que Model Baker ?
  • B. … Utilisateur: Ai-je déjà créé des projets ?
  • C. … Héros: Ai-je déjà travaillé avec des conteneurs / validation, etc. ?

–v–

Objectifs de l’atelier

  • Représenter le modèle DMAV en Français dans la base de données et importer / exporter / valider des données
  • Être capable de visualiser les données dans QGIS
  • Savoir ce que sont les méta-attributs et les stratégies d’héritage, etc.

–v–

Programme (1)

Temps Contenu
09.00 Introduction et environnement 🧑‍🏫
09.30 QGIS 🧑‍🏫 💻
10.30 Importation de modèles 👪
11.00 Pause
11.15 Multilinguisme et import de données de test 🧑‍🏫 💻
12.00 Dîner

–v–

Programme (2)

Temps Contenu
13.30 Exportation de données 🧑‍🏫 💻
13.45 Saisie et validation 👪 💻
15.15 Pause
15.30 UsabILIty Hub et divers 🧑‍🏫 👪 💻
16.00 Questions 🧑‍🏫 👪 💻

–v–

Courte introduction…

Qu’est-ce que Model Baker ?

–v–

Un générateur de projets QGIS

Création rapide d’un projet QGIS à partir d’un modèle de données physique.

Analyse la structure existante et configure un projet QGIS avec toutes les informations disponibles.

–v–

Un générateur de projets QGIS optimisé pour INTERLIS

Les modèles définis dans INTERLIS fournissent des méta-informations supplémentaires telles que les domaines, les unités d’attributs ou les définitions orientées objet des tables.

Celles-ci peuvent être utilisées pour optimiser davantage la configuration du projet.

–v–

Une station de contrôle ili2db

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–

Et c’est une bibliothèque

Peut être utilisé comme un cadre. Comme le fait Asistente LADM-COL.

Ou TEKSI Script TEKSI wastewater

… et est également disponible en tant que package Python :

pip install modelbaker

Où trouver quoi ?

–v–

Dépôts de code

Plugin QGIS

https://github.com/opengisch/QgisModelBaker

Dépôt de code Bibliothèque Backend

https://github.com/opengisch/QgisModelBakerLibrary

–v–

Report de bugs et demandes de fonctionnalités

https://github.com/opengisch/QgisModelBaker/issues

  • Vérifier
  • Saisir
    • Description du problème
    • Infos supplémentaires
  • Attendre ou financer 😉

–v–

Documentation

qr-docu

modelbaker.ch

https://opengisch.github.io/QgisModelBaker/fr/

De quoi avons-nous besoin…

Environnement

–v–

INTERNET ?

A compléter

Nom :

Code : SDS1570

Pad : https://pad.opengis.ch

–v–

QGIS et bases de données

  • QGIS 3.40 ou supérieur
  • PostgreSQL + PostGIS
  • Geopackage possible

–v–

Extensions avec le client PSQL

$ psql -Upostgres -hlocalhost -dbakery

postgres=# CREATE DATABASE databasename;
 
postgres=# \connect databasename;

databasename=# CREATE EXTENSION postgis;
databasename=# CREATE EXTENSION uuid-ossp;

–v–

Si ce n’est pas déjà installé…

Installation de PostGIS

Windows

https://postgis.net/install/

Là, selon la version de PostgreSQL, trouver postgis-bundle-pg14x64-setup-3.3.2-2.exe, le télécharger et l’installer.

Mac

Utiliser de préférence posgres.app (PostGIS y est déjà inclus) https://postgresapp.com/de/downloads.html

Linux

sudo apt install postgis

–v–

OPENGIS.ch PostgreSQL

.
Hôte demopg.opengis.ch
Port 21699
Utilisateur course_participant
Mot de passe qgis!
BD dmav_ge
Mode SSL requiert

(actif uniquement aujourd’hui)

Utilisez toujours votre abréviation de nom comme préfixe pour les schémas :

mkuhn_ (pour Matthias Kuhn)

–v–

Java

Avez-vous Java installé?

java --version

… il y a une réponse, alors c’est bien 🙂

Téléchargement pour Windows / Mac

Ici https://adoptium.net/fr  

Ou sous Linux (openJDK)
sudo apt-get install openjdk-18-jre 

ou

sudo apt install default-jre

–v–

Téléchargement des données de démonstration

–v–

Données utilisateur

https://www.cadastre-manual.admin.ch/fr/documentation-modele-dmav

  • Jeu de données test
  • Jeu de données test DMAV Version 1.0

–v–

Prêt à démarrer 🚀

Commençons…

QGIS

Plugins

  • Installer Model Baker
  • Installer Swiss Locator

–v–

Interface …

Live Demo

Importation de modèle

Un import est:

  1. Générer un schema
  2. Importer des données

On peut commencer avec un nom de modèle, un fichier ili ou un fichier xtf

… et importer vers un gpkg ou une base de données postgresql (ou mssql)

–v–

Importons le modèle DMAVTYM_Alles_V1_0

–v–

Importons les données “Testdaten”

–v–

Importons le modèle DMAVTYM_Tous_V1_0

–v–

Importons les données “Testdaten”

–v–

Analysons les

Comment “héritons-nous” ?

Étendre une classe (classe de base) en une dérivation “améliorée”.

Une classe étendue (dérivation) a toutes les propriétés de la classe de base + “plus”.

“plus” signifie des attributs ou des restrictions supplémentaires.

–v–

De Gebaeude devient un meilleur Gebaeude

inherit-base

–v–

D’abord

Essayez avec Smart2 et si ça ne va pas, essayez avec Smart1.

Citation : Romedi Filli - 2022

–v–

Stratégies de mapping d’héritage

  • New Class
  • Super Class
  • Sub Class
  • New+Sub Class

–v–

Exemple de modèle

sample-model

–v–

New Class

Gebaeude.t_type : (
   Wohngebaeude,
   Gewerbegebaeude,
   Oeffentliches_
   Gewerbegebaeude
)
  • Les extensions sont mappées avec des relations.
  • La condition NON NUL est respectée.
  • Plusieurs importations sont nécessaires par objet.

new-class-model

–v–

Exemple de modèle

sample-model

–v–

Super Class

Oeffentliches_
Gewerbegebaeude.t_type: (
    Gewerbegebaeude,
    Oeffentliches_
    Gewerbegebaeude
)
  • Moins de tables et de relations (facile à utiliser)
  • La condition NOT NULL n’est pas respectée

super-class.png

–v–

Exemple de modèle

sample-model

–v–

Sub Class

Oeffentliches_
Gewerbegebaeude.t_type: (
    Gewerbegebaeude,
    Oeffentliches_
    Gewerbegebaeude
)
  • La condition NON NUL n’est pas respectée.

sub-class.png

–v–

Exemple de modèle

sample-model

–v–

New+Sub Class

  • Pas de types
  • À mon avis, la procédure attendue
  • La condition NOT NULL est respectée

new-sub-class.png

–v–

Smart Mapping dans ili2db

–v–

noSmartMapping

  • Toutes les classes sont mappées avec la stratégie New Class.

–v–

noSmartMapping

Résulte en ce que nous voyons dans le graphique New Class.

new-class-model

–v–

smart1Inheritance

  • Classes abstraites sans relations -> stratégie Super Class
  • Classes abstraites avec relations et sans super classe concrète -> stratégie New Class
  • Classes concrètes sans super classe concrète -> stratégie New Class
  • Toutes les autres classes -> stratégie Super class

–v–

smart1Inheritance

Signifie donc que Gebaeude utilise la stratégie New Class et toutes les autres la stratégie Super class.

Résulte en ce que nous voyons dans le graphique Super class.

super-class

–v–

smart2Inheritance

  • Classes abstraites -> stratégie Super Class
  • Toutes les classes concrètes -> stratégie New+Sub Class

–v–

smart2Inheritance

Signifie donc que toutes utilisent la stratégie New+Sub Class.

Résulte en ce que nous voyons dans le graphique New+Sub Class.

new-sub-class

–v–

En résumé

  • smart 1 ↗️
  • smart 2 ↘️

Export de données

Exportons les données d’une base de données

Validation

  • La base de données déjà garantit une certaine qualité.
    • Constraints NOT NULL, FOREIGN KEY, …
  • INTERLIS offre des contraintes plus complèxes en addition

–v–

Desactiver le système de sécurité base de données…

… pour permettre de quand même importer des données

–v–

Desactiver le système de sécurité base de données…

… où pour jouer avec

–v–

Quel type de problème avez vous souvent?

Essayons de reproduire et valider avec QGIS Model Baker

Intermède

… laissons-nous divaguer

–v–

Intermède 1 : Méta-attributs

–v–

Que sont les méta-attributs ?

Les méta-attributs permettent de compléter les modèles INTERLIS avec des informations supplémentaires qui ne sont pas prévues dans la spécification actuelle d’INTERLIS.

Voir eCH-0117 Méta-attributs pour les modèles INTERLIS

–v–

Exemple avec Model Baker (1)

Expression d’affichage spécifique pour la table de la classe ZustaendigkeitsKataster.

metaattr-dispexp

–v–

Syntaxe dans le modèle INTERLIS

!!@<name>=<value>

Suivi de l’élément référencé (MODEL, TOPIC, CLASS, etc.)

–v–

Méta-attributs vs Commentaire

Un commentaire commence par !! et se termine par une fin de ligne.

Un méta-attribut commence également par !! mais suivi de @

–v–

Exemple avec Model Baker (2)

Méta-attribut spécifique de Model Baker :

!!@qgis.modelbaker.dispExpression='<QGIS Expression>'

–v–

Exemple avec Model Baker (3)

Définition dans le modèle KbS_V1_5

MODEL KbS_V1_5 (de) =

 TOPIC Belastete_Standorte =

  !!@qgis.modelbaker.dispExpression = "'Nr: '|| uid ||' / '|| katastername"
  CLASS ZustaendigkeitKataster =
   [...]

metaattr-dispexp

–v–

Listes de méta-attributs

(incomplet) Voir aussi https://interlis.discourse.group/t/uebersicht-interlis-meta-attribute/70

–v–

Les méta-attributs dans le modèle sont formidables

Mais nous ne pouvons pas simplement bricoler le modèle !

–v–

Fichier de méta-attributs supplémentaire

… connu comme “fichier de configuration”, “fichier de méta-attributs”, “fichier INI”, “fichier TOML”…

En réalité au format INI, mais généralement enregistré sous .toml.

À ne pas confondre avec le fichier de méta-configuration pour “contrôler” ili2db (également en relation avec UsabILIty Hub).

–v–

Exemple avec Model Baker

Définition dans le fichier de configuration pour KbS_V1_5

["KbS_V1_5.Belastete_Standorte.ZustaendigkeitKataster"]

qgis.modelbaker.dispExpression = "'Nr: '|| uid ||' / '||katastername"

metaattr_dispexp

–v–

Contrôler les validations avec des méta-attributs

Juste pour information…

["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–

De quoi avons-nous besoin pour KbS_V1_5 ?

  • Multi-géométrie construite à partir de STRUCTURE MultiPolygon

  • “Multilinguisme aplati” sur STRUCTURE MultilingualUri

–v–

L’attribut de mapping

ili2db.mapping

  • Sur la classe ou la structure

Les structures sont mappées avec des colonnes au lieu de relations (par exemple, la multi-géométrie).

  • Sur l’attribut

Les attributs de structure (BAG OF/LIST OF) sont mappés avec un type de données au lieu de relations.

–v–

Définition dans le modèle INTERLIS

!!@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–

Définition dans le fichier de méta-attributs supplémentaire

[KbS_V1_5.Belastete_Standorte.MultiPolygon]
ili2db.mapping = "MultiSurface"

[KbS_V1_5.Belastete_Standorte.MultilingualUri]
ili2db.mapping = "Multilingual"

–v–

Prêt pour l’exercice 1 🚀

Quels identfiants faut-il redéfinir?

Ensembles de données (datasets)

  • Ensembles de données d’un domaine spatial ou thématique spécifique
  • Indépendant du modèle (contrairement au topic)
  • Les données d’un ensemble de données peuvent être gérées, validées et exportées indépendamment des autres données.

–v–

conteneurs (baskets)

  • Une instance plus petite
  • Alors que les ensembles de données couvrent généralement l’ensemble du modèle, les conteneurs font généralement partie d’un topic
  • Le plus souvent, ils sont l’intersection du topic et de l’ensemble de données

–v–

baskets-datasets-nodatasets

–v–

baskets-datasets

–v–

baskets-datasets

–v–

baskets-datasets

–v–

baskets-datasets

–v–

baskets-datasets

–v–

Prêt à démarrer 🚀

–v–

Intermède 4 : Que sont les OID ?

–v–

OID

Les identifiants d’objet (OID) sont des chaînes de caractères uniques à travers les systèmes qui identifient un objet INTERLIS.

Pour échanger et mettre à jour des objets sans conflit à travers différents endroits.

–v–

TID

Dans le fichier de transfert, l’OID est visible sous TID.

<City_V1.Constructions.Buildings TID="chMBAKER00000100">
 <Street>Rue des Fleures</Street><Number>1</Number>
</City_V1.Constructions.Buildings>

–v–

Pourquoi TID et pas OID ?

  • Un OID dans un XTF est un TID
  • Un TID dans un XTF n’est pas toujours un OID

Car il n’est pas obligatoire de travailler avec des OID. Un fichier XTF a besoin de TID pour les références, etc.

Si vous n’utilisez pas d’OID, les TID sont simplement des nombres ou des caractères quelconques (pas de stabilité à travers les systèmes garantie !)

–v–

Et dans le schéma de base de données physique ?

phyiscal

–v–

t_id vs. t_ili_tid

  • Le t_ili_tid correspond au TID dans le XTF et donc à l’OID (si des OID sont utilisés)
  • Le t_id n’est qu’un numéro de séquence interne au système

–v–

Quand le t_id devient-il TID et le TID devient-il t_ili_tid ?

  • Si le t_ili_tid reste vide, alors lors d’une exportation, le t_id est écrit dans le TID.
  • Lors de l’importation, le TID est alors écrit dans le t_ili_tid.

–v–

tid-to-tilitid

–v–

Quand dois-je utiliser des OID ?

  • Dès que plusieurs endroits collectent et gèrent des données
  • Si le modèle le requiert :
    [...]
    TOPIC Constructions =
      BASKET OID AS INTERLIS.UUIDOID;
      OID AS INTERLIS.STANDARDOID;
    [...]
    

–v–

Types d’OID

  • UUIDOID
  • I32OID
  • STANDARDOID
  • ANYOID
  • OID défini par l’utilisateur

–v–

UUIDOID

  • OID TEXT*36
  • Identificateur Unique Universellement

 

Valeur par défaut Model Baker
uuid('WithoutBraces')

–v–

I32OID

  • OID 0 ... 2147483647

 

Valeur par défaut Model Baker
t_id

–v–

STANDARDOID

  • OID TEXT*16
  • Préfixe (2 + 6 caractères)

Identifiant du pays + une partie d’identifications globale.

  • Postfix (8 caractères)

Séquence (numérique ou alphanumérique) du système comme partie d’identifications locale.

 

Valeur par défaut Model Baker
'%change%' || lpad( T_Id, 8, 0 )

–v–

ANYOID

Ne définis pas de format pour l’OID, mais seulement qu’un OID doit être défini dans tous les modèles Symbolisations étendus.

–v–

OID non définis

Les règles du type XML-ID (www.w3.org/TR/REC-xml) s’appliquent

  • le premier caractère doit être une lettre ou un souligné
  • suivi de lettres, chiffres, points, tirets, soulignés - rien d’autre.

 

Valeur par défaut dans Model Baker
'_' || uuid('WithoutBraces')

La même chose s’applique aux OID définis par l’utilisateur.

–v–

Gestionnaire d’OID

Base de données > Model Baker > Gestionnaire d’OID

oidmanager

–v–

Vérifiez !

–v–

Intermède 5 : UsabILIty Hub

–v–

À quoi sert UsabILIty Hub ?

  • Obtenir des informations supplémentaires sur les modèles INTERLIS et leurs projets (QGIS) automatiquement via le web.

  • Configurations supplémentaires faites une seule fois et utilisées plusieurs fois.

–v–

Comment fonctionne UsabILIty Hub ?

–v–

1. L’utilisateur sélectionne le modèle

  • Recherche inter-référentiels de fichiers de méta-configuration.

  • Trouver les fichiers de méta-configuration dans les ilidata.xml sur UsabILItyHub (https://models.opengis.ch) ou les référentiels propres.

–v–

2. Le fichier de méta-configuration est analysé

Les configurations pour ili2db, Model Baker et d’autres outils y sont définies.

Également des liens (Ids) vers :

  • Catalogues
  • Fichier de méta-attributs supplémentaire
  • Fichiers de surcouche

–v–

3. Les configurations sont définies

  • ili2db : Smart-Mapping, gestion des conteneurs, etc.

–v–

4. Les liens sont résolus

  • Recherche inter-référentiels des catalogues, fichier de méta-attributs supplémentaire et fichiers de surcouche

Les fichiers de surcouche contiennent des informations sur :

  • Symbologies et configurations de formulaires
  • Disposition des légendes et ordre des couches
  • Thèmes de carte, mises en page d’impression
  • etc.

–v–

5. Utilisation des informations

  • Exécuter ili2db en utilisant les configurations et le fichier de méta-attributs supplémentaire
  • Importer les catalogues trouvés
  • Générer le projet en utilisant les fichiers de surcouche

–v–

Déroulement

uml

–v–

Documentation

Voir https://usabilityhub.opengis.ch/

Ou la documentation de Model Baker

–v–

Prêt à démarrer 🚀

–v–

Intermède 6 : Modèles de traduction

–v–

Que sont les modèles de traduction ?

Les modèles de traduction sont des modèles traduits qui ne diffèrent pas du modèle original en termes de structure.

–v–

Exemple Gebaeudeinventar_V1

compare

–v–

Prêt à démarrer 🚀

Exemple Plans d’affectation

Fr : https://models.geo.admin.ch/ARE/PlansDAffectation_V1_2.ili

De : https://models.geo.admin.ch/ARE/Nutzungsplanung_V1_2.ili

–v–

Prêt à démarrer 🚀

Exercices

… la pratique rend parfait

–v–

Exercice 1 : Créer un projet utilisable

  • Créer un projet pour KbS_V1_5 incluant un fichier de méta-attributs supplémentaire
  • Ajouter une carte de fond
  • Enregistrer le projet

–v–

Exercice 2 : Smart Inheritance Mapping

  • Importer le modèle MultiGebaeudeinventar_V1 avec Smart1Inheritance
  • Renommer les couches en <nom de la couche>_Smart1
  • Importer le modèle MultiGebaeudeinventar_V1 avec Smart2Inheritance

Ne pas utiliser d’optimisation : no-opt

–v–

Exercice 2.1 : Optimisation du projet

  • Importer le modèle OekoGebaeudeinventar_V1 avec Smart2Inheritance
  • Importer le modèle ZG_Nutzungsplanung_V1_1 avec Smart2Inheritance

Ne pas utiliser d’optimisation : no-opt

–v–

Exercice 3 : Saisie dans les ensembles de données

  • Créer le projet avec des ensembles de données pour TG et SH (si ce n’est pas déjà fait)
  • Ajouter une zone à Stein am Rhein TG.
  • Saisir une zone dans SH.
  • Créer un nouvel ensemble de données pour ZH.
  • Saisir une zone dans ZH.

–v–

Exercice 4 : Exportation

  • Exporter toutes les données dans un fichier de transfert (y compris les listes de codes)
  • Exporter uniquement les données utilisateur de SH dans un fichier de transfert

 

Tâche supplémentaire

  • Créer un projet pour OekoGebaeudeinventar_V1 avec Smart2 et l’optimisation de masquage
  • Saisir un objet
  • Exporter pour OekoGebaeudeinventar_V1 et pour Gebaeudeinventar_V1

–v–

Exercice 5 : UsabILItyHub

  • Configurer un projet quelconque
  • Exporter les surcouches
  • Importer le modèle avec les surcouches du référentiel local

PAUSE

Un groupe de différents intéressés…

Model Baker Group

–v–

Équipe de projet

par ordre d’apparition

  • Romedi Filli, Canton SH (direction)
  • Manuel Kaufmann, Agroscope
  • David Signer, OPENGIS.ch
  • Pascal Megert, Canton AI
  • Marleen Schulze, Canton SZ
  • Adrian Weber, Canton SO

–v–

Financement

–v–

Contribution annuelle avec des niveaux

(à partir du parrain avec heures de support incluses) :

  • Visionnaire
  • Parrain
  • Soutien
  • Donateur

–v–

Par projet

projektbezogen

Des questions ?

C’est tout…

Web : www.opengis.ch

Courriel : matthias@opengis.ch denis@opengis.ch

Github : github.com/opengisch