Cet article complète la série d’articles sur la création d’une base de données geopackage pour gérer les cartes marines ENC sous QGis ainsi que la symbologie des différentes couches de données. Le travail avec un petit nombre de cartes ne présente pas de problème particulier, mais dès que le nombre augmente il y a une série d’opérations qui deviennent soit compliquées, soit consommatrices de temps de travail.
Nous avons mis au point une série de script Python qui simplifient le travail sur des bases de données geopackage importantes. Dans cet article ces outils sont appliqués à une base de données Geopackage de cartes marines, mais ils peuvent être utilisés pour tout geopackage moyennant quelques modifications qui ne nécessitent aucune connaissance particulière en programmation ni en Python.
1- Chargement des couches
Le premier problème qu’on rencontre réside dans le nombre important de couches à charger dans le projet QGis. En effet, si une carte peut avoir une vingtaine de couches, dès que le nombre de cartes augmente on peut rapidement se retrouver avec plus d’une centaine de couches à charger.
QGis permet de charger en bloc toutes les couches d’un geopackage. On n’est pas obligé alors de charger une par une la centaine de couches. Mais une fois chargées, il y a deux tâches à réaliser:
- enlever les couches non pertinentes telles les couches de métadonnées
- ordonner l’affichage des couches pour éviter que certaines couches ne soient pas complètement invisibles pour cause de superposition avec d’autres couches. Des couches surfaciques comme DEPARE et LNDARE (profondeurs et terrain) doivent toujours être en dessous des objets marins et terrestres, si non ces objets ne sont pas visibles.
De plus, c’est toujours plus agréable de travailler avec des échelles minimales d’affichage de manière à n’avoir que certaines couches quand on zoome à de très petites échelles et de n’avoir l’affichage des informations détaillées que quand on zoome à une échelle plus grande.
Sélection des couches à charger
Nous mettons à votre disposition un script python qui résout à lui tout seul l’ensemble de ces problèmes Vous pouvez le télécharger à partir de ce lien..
Le script comprend une liste de 210 couches S57, ordonnées pour un affichage correct:
Les couches surfaciques représentées par des polygones pleins, puis les couches surfaciques représentées par des polygones vides (seuls les périmètres sont affichés), puis les couches de type linéaire et finalement les couches de type ponctuel. A l’intérieur de chaque catégorie l’ordre a été étudié pour éviter les masquages d’information.
Chaque couche est accompagnée avec une valeur d’échelle minimale d’affichage, par défaut 100000000.
Exemple:
#Liste des couches dans l’ordre de chargement
couches_a_charger = [
(‘pl_DEPARE’, 100000000),
(‘pl_UNSARE’, 100000000),
(‘pl_TIDEWY’, 100000000),
(‘pl_DAMCON’, 100000000),
Pour que le script ne charge pas des couches qui ne vous intéressent pas, vous pouvez tout simplement mettre en commentaire la ligne correspondante en ajoutant un ‘#’ en début de ligne:
#Liste des couches dans l’ordre de chargement
couches_a_charger = [
(‘pl_DEPARE’, 100000000),
(‘pl_UNSARE’, 100000000),
#(‘pl_TIDEWY’, 100000000),
#(‘pl_DAMCON’, 100000000),
Dans cet exemple, les couches TIDEWY et DAMCON ne seront pas chargées.
De plus, si vous souhaitez définir une échelle minimale d’affichage pour une couche, il suffit de modifier la valeur correspondante:
‘pl_DEPARE’, 100000000),
(‘pl_UNSARE’, 100000000),
(‘pl_TIDEWY’, 100000),
#(‘pl_DAMCON’, 100000000),
(‘pl_OBSTRN’, 50000),
Dans cet exemple la couche TIDEWY ne sera affichée que quand le zoom de la fenêtre cartographique aura une valeur inférieure à 100000 et la couche OBSTRN quand la valeur sera inférieure à 50000.
Pour utiliser le script:
- téléchargez le fichier.py,
- enregistrez-le dans un répertoire de votre choix
- Ouvrez la console Python de QGis (Extensions ->Console Python)
- Ouvrez la fenêtre d’Éditeur (1)
- Cliquez sur l’icône Parcourir (2) et pointez sur le fichier .py téléchargé
- Modifiez le chemin du geopackage avec le chemin et nom de votre geopackage (3)
- Exécutez le script (4)
Avant de l’exécuter vous pouvez effectuer les modifications pour ne pas charger des couches ou pour leur affecter une échelle minimale différente. N’oubliez pas d’enregistrer ces modifications avant de fermer votre projet.
Le code du script est le suivant:
Gestion de l’échelle d’affichage
Le script précédent permet de définir une échelle minimum au moment du premier chargement des couches dans le projet. Quand vous sauvegardez votre projet, c’est la valeur présente dans le champ Min_scale de la couche qui est sauvegardé. A l’ouverture du projet, ce sont les paramètres d’affichage au moment de la fermeture du projet qui sont pris en comte. Vous n’utiliserez donc le script précédent qu’au début du travail sur un projet. Mais les échelles définies dans le script load_layers peuvent ne pas être adaptés à votre zone de travail. Vous pourrez donc être amené à modifier les valeurs d’échelle min pour certaines couches.
Nous mettons à votre disposition un script Python qui permet de définir l’échelle minimum d’affichage pour toutes les couches sélectionnées dans le panneau Couches. Une fois enregistré votre projet, ces paramètres seront utilisés à chaque ouverture du projet.
Pour l’utiliser, commencez par le charger dans la console Python de QGis, sélectionnez (mettez en surbrillance) les couches que vous souhaitez modifier dans le panneau Couches, et, surtout, modifiez la ligne
#Définir l’échelle minimale (par exemple, 1:50000)
min_scale = 250000
par la valeur souhaitée pour l’échelle minimale d’affichage.
Le script Python pour définir l’échelle minimum d’affichage des couches sélectionnées est le suivant:
Vous pouvez télécharger le script ici.
Chargez le script dans la console python, modifiez la ligne:
#Définir le valeur de l’attribut « purpose » à filtrer
valeur_purpose = 5
par la valeur de purpose souhaitée, puis exécutez le script. Toutes les couches présentes dans le panneau Couches du projet seront filtrées.
Si vous souhaitez utiliser ce script pour filtrer sur un autre attribut que purpose, simplement modifiez la ligne:
filtre = f' »purpose » = {valeur_purpose}’
en remplaçant f' »purpose » par f' »autre_attribut » .
Si vous voulez supprimer tous les filtres actifs sur toutes les couches du projet, le script suivant vous permet de le faire: