Cartes ENC Geopackage dans QGis Version finale: première partie

Le déroulement du projet ayant fait l’objet de plusieurs articles et mises à jour, nous mettons à votre disposition dans le lien suivant un document de synthèse (PDF)

Vous pourrez ainsi avoir une vision complète et cohérente de toutes les étapes pour créer et charger une base de données ENC sous QGis au format geopackage et tous les éléments nécessaires (.bat, .py, .svg) à la mise en place d’une symbologie appropriée automatique.

Le projet d’intégrations des cartes ENC dans QGis sous la forme de Geopackage est maintenant terminée. Cet article complète les deux articles déjà publiés concernant la mise en place et la gestion de la base de données Geopackage.

Dans le premier article: Création d’une base de données Geopackage pour les cartes ENC (1ère partie: constituer la base de données), vous trouverez l’essentiel du travail avec des geopackages pour intégrer les données des fichiers S57 (ENC). Vous devez commencer par cet article pour comprendre la procédure qui permet l’import des fichiers S57 avec ogr2ogr, ainsi que les différentes étapes de mise en forme des données. Vous aurez aussi la possibilité de télécharger tous les outils (fichiers de commandes .bat, scripts python) pour mener à bien toutes ces étapes.

Suite à la publication de cet article, nous avons continué à travailler sur une procédure équivalente mais en utilisant une base de données PostgreSQL/postgis. Ceci nous a permis de trouver plusieurs améliorations au workflow initial.

Un deuxième article: Mise à jour(1) :Base de données ENC avec Geopackage sous QGis,, présente une mise à jour de la procédure d’import (fichiers .bat avec les commandes ogr2ogr) pour permettre une gestion aisée des doublons d’information. Ces doublons apparaissent quand des cartes à différentes échelles sont intégrées dans la même base de données. L’ajout d’un attribut « finalité » de la carte ENC permet de n’afficher que des informations uniques par finalité de carte.

L’objectif du projet étant de produire dans QGis une symbologie équivalente à celle des cartes papier il restait un point à résoudre, la prise en compte du paramètre « qualité » de la position des objets géographiques. C’est ce point, principalement, qui est abordé dans cet article.

Les trois articles sont complémentaires quant à leur contenu, mais pour les fichiers mis à disposition, ne téléchargez que les fichiers proposés dans cet article. Ils se terminent par ‘V3’ et vous assurent d’utiliser la dernière version.

Le format S57 et les SIG

Si vous vous lancez à travailler avec des fichiers S57 dans un SIG, il y a quelques éléments que vous devez connaître pour naviguer sans écueils.

Tout d’abord, la structure des fichiers S57 ne répond pas aux structures adoptées dans les SIG.

Dans un SIG vous avez un objet géographique qui est représenté par une table avec deux types d’informations : la géométrie des entités de l’objet et les attributs de ces entités.

Si vous avez d’autres objets qui ont des géométries identiques, l’information géométrique est dupliquée, une fois dans chaque table.

Pour le format S57 l’objectif principal est d’optimiser le stockage des informations et par conséquent de ne pas dupliquer les informations. Si un objet a une entité ponctuelle, un point sera créé. Du moment ou d’autres objets ont des entités situées sur ce point, on utilisera la référence du point qui a déjà été créé. De cette manière un point n’est décrit qu’une seule fois dans le fichier. Il en va de même pour les polylignes et les surfaces. Un fichier S57 aura donc une série de tables contenant l’information géométrique, dénommées « primitives » :

  • IsolatedNode (points)
  • ConnectedNode (points)
  • Edge (polylignes)
  • Face (polygones)

La table attributaire des différents objets S57 contient seulement les attributs des objets.

Ce qui complique la tâche c’est qu’il y a deux attributs qui se réfèrent aux géométries : posacc (l’estimation de la précision de la position, valeur quantitative) et quapos (qualité de la position, variable qualitative).

Ces deux attributs se trouvent dans les tables des primitives.

Pour passer de la structure S57 à une structure SIG (shapefile, geopackage, postgis) nous utilisons la bibliothèque GDAL et sa commande ogr2ogr.

Cette commande va créer des tables SIG à partir de la structure S57, en créant une table par objet S57, en affectant à chaque entité les géométries correspondantes tirées des tables primitives et en ajoutant à chaque entité les attributs de l’objet S57. La trace des primitives utilisées pour la géométrie de chaque entité se trouve dans le champ NAME_RCID des tables SIG, à condition d’avoir ajouté les options -oo « RETURN_LINKAGES=ON » –oo « LNAM_REFS=ON » à la ligne de commande ogr2ogr.

La figure suivante montre une couche de type point. La valeur indiquée dans le champ NAME_RCID est celle RCID du point utilisé de la table IsolatedNode.

La figure suivante montre un exemple de couche de type linéaire. Les valeurs indiquées dans le champ NAME_RCID sont celles des RCID des polylignes utilisées de la table Edge.

La figure suivante montre un exemple de couche de type polygone. Les valeurs indiquées dans le champ NAME_RCID sont celles des polylignes utilisées de la table Edge.

Pour pouvoir récupérer les attributs QUAPOS et POSACC de chaque entité des tables de type point nous devons récupérer les valeurs du point IsolatedNode pour les affecter aux tables des différents objets ENC.

Si les identifiants étaient directement les RCID dans les tables ENC, on pourrait faire une jointure entre chaque table (soundg, obstrn,…) et IsolatedNode. Mais comme vous pouvez le voir dans les images précédentes, l’attribut NAME_RCID est de type stringlist ce qui bloque cette solution. Nous avons donc développé un script python qui fait ce travail lors du chargement des données S57->geopackage.

Téléchargement des fichiers V3

Vous pouvez télécharger l’ensemble des fichiers .bat et .py cités dans cet article à partir de ce lien.

Modification des commandes ogr2ogr d’import des fichiers S57

Import des couches « points »

Pour importer les primitives des fichiers S57 il est nécessaire d’ajouter l’option –oo RETURN_PRIMITIVES = ON  aux commandes d’import. Dans le cas des points il est aussi nécessaire d’ajouter l’option -nlt MULTIPOINT car si non la table IsolatedNode sera créée comme de type point et les couches multipoint ne pourront pas être prises en charge.

Le fichier .bat d’import des couches de type point sera alors :

mass_load_s57_points_V3.bat

@echo off
setlocal enabledelayedexpansion

REM Assurez-vous qu'au moins 2 arguments ont été fournis
if "%~2"=="" (
echo Usage: %0 directory000 output_geopackage
exit /b 1
)

REM Récupérer les arguments de la ligne de commande
set "directory=%~1"
set "output_geopackage=%~2"

REM Compter le nombre total de fichiers à traiter
set /a total_files=0
for /r "%directory%" %%a in (*.000) do (
set /a total_files+=1
)

REM Initialiser le compteur de fichiers traités
set /a processed_files=0
REM Itérez sur tous les fichiers .000 dans le répertoire
for /r "%directory%" %%i in (*.000) do (
echo Traitement du fichier: %%~ni
set /a processed_files+=1
echo Traitement en cours : !processed_files! sur !total_files!
set "file=%%~ni"
ogr2ogr -f GPKG -skipfailures -append -update -where "OGR_GEOMETRY='POINT' or OGR_GEOMETRY='MULTIPOINT'" -oo SPLIT_MULTIPOINT=ON -oo RETURN_LINKAGES=ON -oo LNAM_REFS=ON -oo ADD_SOUNDG_DEPTH=ON -oo RETURN_PRIMITIVES=ON -nlt MULTIPOINT -mapFieldType StringList=String,IntegerList=String "%output_geopackage%" "%%i"
ogr2ogr -f GPKG -skipfailures -append -update "%output_geopackage%" "%%i" "DSID"
ogr2ogr -f GPKG -skipfailures -append -update "%output_geopackage%" "%%i" "C_AGGR"
python c:/testgpkgV3/update_geopackage_dsid_V3.py "%output_geopackage%" "!file!"
)
echo Import terminé. Ajout de posass et quapos.
python c:/testgpkgV3/add_posacc_quapos_to_pointsV3.py "%output_geopackage%"
echo Traitement terminé.
pause

Pour l’exécuter, ouvrez un fenêtre OSGeo4W Shell, allez dans le répertoire contenant les fichiers .bat et rentrez la commande:

.\mass_load_s57_points_V3.bat répertoire_fichiers_000 chemin/pointsENC.gpkg

Au préalable, éditez le fichier pour modifier les lignes:

python c:/testgpkgV3/update_geopackage_dsid_prp_prim.py « %output_geopackage% » « !file! »

et

python c:/testgpkgV3/add_posacc_quapos_to_pointsV3.py

Pour rentrer les chemins que vous aurez choisis pour stocker les scripts python.

Le premier script, update_geopackage_dsid_V3.py, a été modifié pour ajouter en plus de enc_chart, scale et purpose, les attributs POSACC et QUAPOS à toutes les tables point, au moment du passage S57->geopackage.

Le deuxième script, add_posacc_quapos_to_pointsV3.py, une fois terminé le chargement de tous les fichiers S57 du répertoire ENC, met à jour les valeurs de ces attributs pour chaque entité des tables points.

add_posacc_quapos_to_pointsV3.py

import sys
from osgeo import ogr

def add_posacc_quapos_to_pointsV3 (geopackage_path):
    # Chemin vers le GeoPackage

    # Liste des tables à exclure
    tables_exclues = ["IsolatedNode", "ConnectedNode","DSID","C_AGGR","C_ASSO","layer_styles"]  

    # Ouvrir le GeoPackage
    driver = ogr.GetDriverByName("GPKG")
    geopackage = driver.Open(geopackage_path, 1)

    # Récupérer la table IsolatedNode
    isolated_node_table = geopackage.GetLayerByName("IsolatedNode")

    # Parcourir toutes les tables du GeoPackage
    for i in range(geopackage.GetLayerCount()):
        table = geopackage.GetLayerByIndex(i)
        table_name = table.GetName()
        
        # Vérifier si la table n'est pas dans la liste des tables exclues et si elle n'est pas IsolatedNode
        if table_name not in tables_exclues and table_name != "IsolatedNode" :
            print(f"Traitement table {table_name}")
            # Récupérer les noms des champs des tables
            table_defn = table.GetLayerDefn()
            field_names = [table_defn.GetFieldDefn(j).GetName() for j in range(table_defn.GetFieldCount())]
            
            # Index des champs rcid et enc_chart dans la table IsolatedNode
            isolated_node_defn = isolated_node_table.GetLayerDefn()
            rcid_index_isolated_node = isolated_node_defn.GetFieldIndex("RCID")
            enc_chart_index_isolated_node = isolated_node_defn.GetFieldIndex("enc_chart")
            
            # Parcourir les enregistrements de la table
            table.ResetReading()
            for feature in table:
                rcid_full = feature.GetField("NAME_RCID")
                rcid = rcid_full.split(":")[1]
                rcid = rcid[:-1]
                enc_chart = feature.GetField("enc_chart")
                
                # Rechercher le rcid et enc_chart dans la table IsolatedNode
                isolated_node_table.SetAttributeFilter("RCID = '{}' AND enc_chart = '{}'".format(rcid, enc_chart))
                isolated_node_feature = isolated_node_table.GetNextFeature()
                
                if isolated_node_feature:
                    # Mettre à jour les attributs POSACC et QUAPOS de la table en cours avec ceux d'IsolatedNode
                    posacc_index = table_defn.GetFieldIndex("POSACC")
                    quapos_index = table_defn.GetFieldIndex("QUAPOS")
                    if posacc_index >= 0:
                        posacc = isolated_node_feature.GetField("POSACC")
                        feature.SetField(posacc_index, posacc)
                    if quapos_index >= 0:
                        quapos = isolated_node_feature.GetField("QUAPOS")
                        feature.SetField(quapos_index, quapos)
                        
                    
                    # Sauvegarder les modifications
                    table.SetFeature(feature)

    # Fermer le GeoPackage
    geopackage = None

if __name__ == "__main__":
    if len(sys.argv) != 2:
        print("Usage: python script.py geopackage_path ")
        sys.exit(1)
    
    geopackage_path = sys.argv[1]
    

    add_posacc_quapos_to_pointsV3 (geopackage_path)

  

Dans l’exemple qui suit, nous avons chargé 7 cartes ENC dans le geopackage d’import pointsENC.gpkg.

Vous pouvez constater que les tables du geopackage contiennent les attributs POSACC et QUAPOS et que le dernier script a bien renseigné les valeurs correspondantes de ces champs.

Dans la deuxième partie de cette version finale consacrée à la symbologie vous verrez la nouvelle gestion de la couche « nature des fonds ». Cette symbologie est basée sur la création d’un atribut « Label » dans la couche SBDARE et son remplissage avec un script python Label_sbdare.py . Cette opération peut se faire sur le base de données complète ou ici, sur le geopackage pointsENC.gpkg. Comme elle prend un certain temps de calcul, nous vous conseillons de le faire à ce stade. Référez-vous à l’article Cartes ENC Geopackage dans QGis Version finale: deuxième partie pour le mode opératoire.

Import des couches « lignes »

Pour importer les primitives des fichiers S57 il est nécessaire d’ajouter l’option –oo RETURN_PRIMITIVES = ON  aux commandes d’import.

Le fichier .bat d’import des couches de type ligne sera alors :

mass_load_s57_lignes_V3.bat

@echo off
setlocal enabledelayedexpansion

REM Assurez-vous qu'au moins 2 arguments ont été fournis
if "%~2"=="" (
    echo Usage: %0 directory000 output_geopackage 
    exit /b 1
)

REM Récupérer les arguments de la ligne de commande
set "directory=%~1"
set "output_geopackage=%~2"

REM Compter le nombre total de fichiers à traiter
set /a total_files=0
for /r "%directory%" %%a in (*.000) do (
    set /a total_files+=1
)

REM Initialiser le compteur de fichiers traités
set /a processed_files=0
REM Itérez sur tous les fichiers .000 dans le répertoire
for /r "%directory%" %%i in (*.000) do (
    echo Traitement du fichier: %%~ni
	set /a processed_files+=1
    echo Traitement en cours : !processed_files! sur !total_files!
	set "file=%%~ni"
    ogr2ogr -f GPKG -skipfailures -append -update -where "OGR_GEOMETRY='LINESTRING' or OGR_GEOMETRY='MULTILINESTRING'" -oo RETURN_PRIMITIVES=ON -oo RETURN_LINKAGES=ON -oo LNAM_REFS=ON -mapFieldType StringList=String,IntegerList=String "%output_geopackage%" "%%i"
    ogr2ogr -f GPKG -skipfailures -append -update "%output_geopackage%" "%%i" "DSID"
	ogr2ogr -f GPKG -skipfailures -append -update "%output_geopackage%" "%%i" "C_AGGR"
	python c:/testgpkgV3/update_geopackage_dsid_V3.py "%output_geopackage%" "!file!" 
)
echo Import terminé. Ajout de posacc et quapos.
python c:/testgpkgV3/add_posacc_quapos_to_linesV3.py "%output_geopackage%"
echo Traitement terminé.
pause

Pour l’exécuter, ouvrez un fenêtre OSGeo4W Shell, allez dans le répertoire contenant les fichiers .bat et rentrez la commande:

.\mass_load_s57_lines_V3.bat répertoire_fichiers_000 chemin/pointsENC.gpkg

Au préalable, éditez le fichier pour modifier les lignes:

python c:/testgpkgV3/update_geopackage_dsid_prp_prim.py « %output_geopackage% » « !file! »

et

python c:/testgpkgV3/add_posacc_quapos_to_linesV3.py

pour rentrer les chemins que vous aurez choisis pour stocker les scripts python.

Le deuxième script, add_posacc_quapos_to_linesV3.py, une fois terminé le chargement de tous les fichiers S57 du répertoire ENC, met à jour les valeurs de ces attributs pour chaque entité des tables lignes.

add_posacc_quapos_to_linesV3.py

import sys
from osgeo import ogr

def add_posacc_quapos_to_linesV3 (geopackage_path):

    # Liste des tables à exclure
    tables_exclues = ["Edge", "ConnectedNode","DSID","C_AGGR","C_ASSO","Edge","FACE"]  # Ajoutez les noms des tables que vous souhaitez exclure

    # Ouvrir le GeoPackage
    driver = ogr.GetDriverByName("GPKG")
    geopackage = driver.Open(geopackage_path, 1)

    # Récupérer la table Edge
    isolated_node_table = geopackage.GetLayerByName("Edge")

    # Parcourir toutes les tables du GeoPackage
    for i in range(geopackage.GetLayerCount()):
        table = geopackage.GetLayerByIndex(i)
        table_name = table.GetName()
        
        # Vérifier si la table n'est pas dans la liste des tables exclues et si elle n'est pas Edge
        if table_name not in tables_exclues and table_name != "Edge":
            print(f"Traitement table {table.name()}")
            # Récupérer les noms des champs des tables
            table_defn = table.GetLayerDefn()
            field_names = [table_defn.GetFieldDefn(j).GetName() for j in range(table_defn.GetFieldCount())]
            
            # Index des champs rcid et enc_chart dans la table Edge
            isolated_node_defn = isolated_node_table.GetLayerDefn()
            rcid_index_isolated_node = isolated_node_defn.GetFieldIndex("RCID")
            enc_chart_index_isolated_node = isolated_node_defn.GetFieldIndex("enc_chart")
            
            # Parcourir les enregistrements de la table
            table.ResetReading()
            for feature in table:
                rcid_full = feature.GetField("NAME_RCID")
                rcid = rcid_full.split(":")[1]
                rcid = rcid[:-1]
                enc_chart = feature.GetField("enc_chart")
                
                # Rechercher le rcid et enc_chart dans la table Edge
                isolated_node_table.SetAttributeFilter("RCID = '{}' AND enc_chart = '{}'".format(rcid, enc_chart))
                isolated_node_feature = isolated_node_table.GetNextFeature()
                
                if isolated_node_feature:
                    # Mettre à jour les attributs POSACC et QUAPOS de la table en cours avec ceux d'Edge
                    posacc_index = table_defn.GetFieldIndex("POSACC")
                    quapos_index = table_defn.GetFieldIndex("QUAPOS")
                    if posacc_index >= 0:
                        posacc = isolated_node_feature.GetField("POSACC")
                        feature.SetField(posacc_index, posacc)
                    if quapos_index >= 0:
                        quapos = isolated_node_feature.GetField("QUAPOS")
                        feature.SetField(quapos_index, quapos)
                        
                    
                    # Sauvegarder les modifications
                    table.SetFeature(feature)

    # Fermer le GeoPackage
    geopackage = None
    

if __name__ == "__main__":
    if len(sys.argv) != 2:
        print("Usage: python script.py geopackage_path ")
        sys.exit(1)
    
    geopackage_path = sys.argv[1]
    

    add_posacc_quapos_to_linesV3 (geopackage_path)

Dans le cas des tables de type point, le lien entre le NAME_RCID des tables et le RCID de la table IsolatedNode ne pose pas de question. Par contre dans le cas des polylignes, pour une entité géographique, la liste des polylignes concerne plusieurs entités de la couche Edge. Nous nous sommes posé la question de savoir si pour une entité , par exemple de DEPCNT, il était possible que les polylignes qui la composent aient différentes valeurs de QUAPOS.

Nous avons effectué le test sur une base contenant 650 cartes ENC à toutes les échelles. La couche DEPCNT contenait 162 585 entités. Seules 38 731 avaient dans la liste des NAME_RCID des RCID de la table Edges avec une valeur non nulle de QUAPOS. Nous avons trouvé 193 entités de DEPCNT qui avaient des valeurs différentes de QUAPOS dans leur liste de NAME_RCID. Etant donné que cela représente 0,1% nous avons décidé de ne pas prendre en compte cette possibilité, car la complexité de déconstruction des polylignes est extrême.
Il s’avère que la table Edge résultante du driver ogr2ogr ne pose pas de problème au niveau des attributs (la jointure entre NAME_RCID et RCID est bonne) mais que les géométries de la table comportent presque la moitié de géométries non valides (des lignes avec un seul point ou des géométries nulles). Pourtant les polylignes des entités S57 n’ont aucune erreur.

Il faudrait donc, réparer et reconstruire toutes les géométries de Edge pour pouvoir déconstruire les géométries de DEPCNT pour ne pas avoir de QUAPOS différents dans aucun cas.

Dans l’exemple suivant nous avons chargé 7 cartes ENC dans le geopackage d’import linesENC.gpkg

Vous pouvez constater que les tables du geopackage contiennent les attributs POSACC et QUAPOS et que le dernier script a bien renseigné les valeurs correspondantes de ces champs.

Import des couches « polygones »

Même si le format S57 prévoit la possibilité d’avoir des polygones en tant que primitives, cette option n’est pas utilisée. Il n’est donc pas nécessaire de modifier l’import des données de type polygone. Les primitives (Face) sont demandées dans la ligne de commande ogr2ogr, les champs POSACC et QUAPOS sont bien ajoutés aux tables, pour un éventuelle utilisation ultérieure, mais il n’est pas nécessaire d’ajouter un script pour remplir les valeurs.

Clonage et/ou ajout des tables importées dans le geopackage ENC

Dans le cas du premier chargement S57, le script Python suivant créé toutes les tables présentes dans les trois geopackages d’import. Pour les chargements ultérieurs, si la table existe déjà dans le geopackage ENC, les enregistrements de la table du geopackage d’import sont ajoutés aux enregistrements déjà présents dans ENC. Si, par contre, la table n’existe pas encore, elle est créée et alimentée par les enregistrements du geopackage d’import. Dans le fichier geopackage ENC les tables sont préfixées par pt_, li_ et pl_ pour indiquer leur type de géométrie.

Par rapport à la V2 les modifications apportées au script sont les suivantes:

  • Renseignement du SRC des tables du geopackage lors de la création. Le code EPSG:4326 est affecté aux géométries.

# Créer une nouvelle couche de destination si elle n'existe pas
                        output_srs = osr.SpatialReference()
                        output_srs.ImportFromEPSG(4326)  # Définir EPSG 4326
                        output_table = output_gpkg.CreateLayer(output_table_name, geom_type=input_table.GetGeomType(), options=["OVERWRITE=YES"], srs=output_srs)

  • Forçage de la création de l’index spatial sur toutes les tables du geopackage

# Créer l'index spatial
                    output_gpkg.ExecuteSQL(f"CREATE SPATIAL INDEX ON {output_table_name}")

Le clonage est réalisé avec le code python : clone_or_append_tables_with_prefixV3.py
Veillez à modifier la ligne qui indique les noms des geopackages que vous avez créés avec les fichiers .bat précédents :

input_geopackages = [« c:/testgpkg/pointsENC.gpkg », « c:/testgpkg/LinesENC.gpkg », « c:/testgpkg/PolysENC.gpkg »]

avec les geopackages d’import que vous avez choisi, ainsi que la ligne

output_gpkg = ogr.Open(« c:/testgpkg/ENC.gpkg », 1)

avec le geopackage de base de données que vous aurez créé en suivant les indications de l’article Création d’une base de données Geopackage pour les cartes ENC (1ère partie: constituer la base de données).

Une fois ce script exécuté, vous avez votre base de données à jour des nouveaux fichiers S57.

Mise à jour d’une base geopackage V1 ou V2 vers la version 3

La procédure que nous venons de décrire permet de créer une nouvelle base de données geopackage. Mais si vous avez déjà une base qui a été créée il n’est pas nécessaire de refaire tout le travail. Nous vous donnons ici la procédure et les outils nécessaires pour mettre à jour sa structure (POSAC et QUAPOSQ) et de renseigner les valeurs de ces attributs pour les tables déjà existantes.

Téléchargez les fichiers pour la procédure ici.

Les différentes étapes de cet « upgrade » sont:

1- A partir d’un répertoire contenant tous les fichiers .000 qui ont déjà été chargés dans la base, exécution d’un fichier.bat , upgrade_V2_to_V3.bat, qui crée un geopackage update.gpkg contenant les primitives (IsolatedNode, ConnectedNode,Edge) des fichiers S57.

.\ upgrade_V2_to_V3.ba répertoire_fichiers_000 chemin/update.gpkg

2- Dans la console Python de QGis, exécution du script append_tables_upgrade.py. Veillez à modifier le chemin pour le fichier update.gpkg

input_geopackages = [« c:/testgpkgV2/update.gpkg« ]

et pour votre base de données ENC

output_gpkg = ogr.Open(« c:/enc_db/ENC4.gpkg« , 1)

Ce script ajoute les primitives à la base de données existante.

3- Dans la console Python de QGis, exécution du script add_fields_upgrade.py. Veillez à modifier le chemin pour le fichier .gpkg de votre base de données

geopackage = ogr.Open(« c:/enc_db/ENC4.gpkg« , 1)

Ce script crée les attributs POSACC et QUAPOS dans toutes les tables de la base de données.

4-Dans la console Python de QGis, exécution du script add_posacc_quapos_upgrade_points.py. Veillez à modifier le chemin pour le fichier .gpkg de votre base de données et à ajouter des tables à exclure si vous en avez créé d’autres tables dans la base de données.

#Chemin vers le GeoPackage
geopackage_path = « c:/enc_db/ENC4.gpkg »
#Liste des tables à exclure
tables_exclues = [« IsolatedNode », « ConnectedNode », »DSID », »C_AGGR », »C_ASSO », »layer_styles »] # Ajoutez les noms des tables que vous souhaitez exclure

Ce script va renseigner les champs POSACC et QUAPOS dans toutes les tables de type Point avec les valeurs contenues dans la primitive IsolatedNode.

5-Dans la console Python de QGis, exécution du script add_posacc_quapos_upgrade_lines.py. Veillez à modifier le chemin pour le fichier .gpkg de votre base de données et à ajouter des tables à exclure si vous en avez créé d’autres tables dans la base de données.

#Chemin vers le GeoPackage
geopackage_path = « c:/enc_db/ENC4.gpkg »
#Liste des tables à exclure
tables_exclues = [« IsolatedNode », « ConnectedNode », »DSID », »C_AGGR », »C_ASSO », »layer_styles »] # Ajoutez les noms des tables que vous souhaitez exclure

Ce script va renseigner les champs POSACC et QUAPOS dans toutes les tables de type Ligne avec les valeurs contenues dans la primitive Edge.

Si cet article vous a intéressé et que vous pensez qu'il pourrait bénéficier à d'autres personnes, n'hésitez pas à le partager sur vos réseaux sociaux en utilisant les boutons ci-dessous. Votre partage est apprécié !

One thought on “Cartes ENC Geopackage dans QGis Version finale: première partie

  1. Hello,

    I am a GIS developer working in Korea. Thanks to your project, I was able to understand the process of converting from ENC to QGIS accurately. I am truly grateful.

    However, I have one question. Did you create the symbols (images) corresponding to the attributes of each table yourself? Or is there a place that provides separate S-57 related symbols?

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *