Affichage des cartes marines S57 dans QGis 3.X

Dans cet article vous trouverez comment charger un fichier ENC au format S57 dans QGis 3.34 et vous pourrez télécharger une symbologie svg de carte marine à lui appliquer. La méthode décrite ici n’utilise que des symbologies svg et la génération d’étiquettes pour réaliser l’affichage.

Projet en cours

Après la publication de cet article nous avons mis en place un projet beaucoup plus ambitieux. Visitez la page du projet pour plus de renseignements.

Le précédent article traitant du format S57 et comment visualiser les cartes marines électroniques (ENC) avec QGis datant de 2015, il était plus que temps de publier une mise à jour pour les versions actuelles de QGis (3.34 à la date de publication de cet article).

Les sources d’information pour les territoires littoraux ne se limitent pas aux sources classiques terrestres. Les cartes marines peuvent apporter des informations très utiles et, du point de vue du rendu, permettent de produire des documents riches et impactants.

La source la pus adaptée pour intégrer rapidement une grande quantité d’informations sont les cartes marines électroniques (ENC). En un seul lot de données vous retrouvez l’ensemble des informations contenues dans une carte marine :trait de côte, bathymétrie, balisage, etc…

Contrairement aux USA et d’autres pays où les cartes marines sont gratuites et disponibles par simple téléchargement, en France elles sont payantes, ce qui ralentit énormément leur diffusion et leur utilisation.

Les cartes ENC sont diffusées dans un format du Bureau Hydrologique International (BHI) appelé S-57. Parmi les formats vectoriels chargeables directement das QGis, vous avez ce format en option. Vous pouvez donc ouvrir une carte ENC dans QGis, et afficher son contenu. Mais le problème c’est que vous affichez son contenu avec des symboles par défaut classiques, qui n’ont aucun lien avec la symbologie utilisée sur une carte marine.

Voici le résultat du chargement d’un fichier S-57 dans QGis.

affichage d'une carte ENC S57 avec QGis, en utilisant le chargement direct

Vous pouvez, bien sûr, prendre couche par couche et lui affecter une symbologie appropriée. Il y en a environ 100 couches dans une ENC classique.

Nous vous proposons quelque chose de plus rapide.

Si vous voulez tester cette procédure et vous n’avez pas de carte ENC sous la main, vous pouvez télécharger gratuitement une carte américaine, à partir du site de la NOAA, en cliquant ici.

Principe de la procédure

Au lieu d’utiliser le chargement direct du fichier S57, nous allons faire un traitement préalable pour créer des fichiers shape des différentes couches présentes. Pour afficher une symbologie pré-établie c’est indispensable, mais en plus, cela permet d’intégrer seulement les couches que vous souhaitez aux autres traitements courants.

Pour créer les fichier shape nous allons utiliser la bibliothèque GDAL de Qgis. Avec une ligne de commande nous allons récupérer les tables S57 et créer un shape par type de géométrie et d’objet.

Pour cela il suffit d’ouvrir la fenêtre de shell d’OSGeo4W:

Osgeo4W Shell

La fenêtre de Shell s’ouvre

Osgeo4W Shell

On va traduire le format S57 en une série de fichiers shp que nous enregistrerons dans un nouveau répertoire.

La ligne de commande à rentrer est de la forme suivante:

ogr2ogr -skipfailures output input
output: correspond au nom d’un répertoire vide où seront stockés les fichiers shp créés
input: c’est le fichier S-57 à traduire, avec son extension .000. Attention, l’arborescence de fichiers S57 n’est pas constante. Assurez vous de bien rentrer le chemin du fichier avec l’extension .000

Si nous utilisons cette ligne de commande, sans autres options, par exemple:
ogr2ogr -skipfailures c:\blog\nautical\ENC603360 c:\blog\nautical\FR603360\2\0\FR603360.000

Nous obtiendrons un shape par type d’objet S57, par exemple l’objet MARCUL (cultures marines). Le problème est que les objets SD57 peuvent être des points, des lignes ou des polygones, simultanément. C’est le cas de MARCUL. Sans autre option sur la ligne de commandes, on obtiendra un shapefile du premier type trouvé de MARCUL, les autres géométries étant ignorées.

Nous allons donc faire trois traductions:

la première en sélectionnant toutes les entités de type point présentes :

ogr2ogr -skipfailures -where « OGR_GEOMETRY=’POINT’ or OGR_GEOMETRY=’MULTIPOINT' » C:/test/points C:\test\2D7DK000.000

la deuxième en sélectionnant toutes les entités de type ligne présentes :

ogr2ogr -skipfailures -where « OGR_GEOMETRY=’LINESTRING’ or OGR_GEOMETRY=’MULTILINESTRING' » C:/test/lines C:\test\2D7DK000.000

la troisième en sélectionnant toutes les entités de type polygone présentes :

ogr2ogr -skipfailures -where « OGR_GEOMETRY=’POLYGON’ or OGR_GEOMETRY=’MULTIPOLYGON' » C:/test/polygons C:\test\2D7DK000.000

Les erreurs affichées correspondent à une des limitations du format shapefile. Certains attributs des objets S57 sont au format ‘liste’ qui n’existe pas en shapefile. La plus grande partie correspondent à des attributs de type ‘catégorie’ d’objet. Si vous avez besoin de ces attributs, vous devez transformer les fichiers S57 en base de données postgresql/postgis. Cette possibilité ne sera pas abordée dans cet article. Lors de la création du shapefile, l’attribut liste est simplement ignoré. Le reste des attributs qui ne sont pas au format liste sont transformés sans problème. La symbologie ne pourra pas prendre en compte le type spécifique d’objet mais sera faite seulement avec un symbole générique.

Si vous regardez maintenant le contenu du répertoire, vous constaterez que les shapes ont bien été créés.

Vous avez donc jusqu’à 73 fichiers shape de type point 45 de type ligne et 89 de type polygone.Mais toujours pas de symbologie pour QGis. Le nombre de shapes dépend des objets présents dans la carte que vous traitez. Si un type d’objet n’est pas présent sur fichier ENC (.000), il n’y a pas de fichier shape généré.

Ressources pour la symbologie QGis

Vous devez télécharger un fichier zip contenant:
– un grand nombre de symboles svg (373) que nous avons créés et regroupés dans un répertoire « nautical ». Par défaut nous vous conseillons de copier ce répertoire sur la racine du disque c:.
– un Projet QGis (version 3.34) nommé symbologieS57.qgs avec l’affectation de chaque symbole pour chaque couche shape (73 de type point 45 de type ligne et 89 de type polygone).

Si vous installez le répertoire « nautical » à un autre emplacement, vous devrez éditer le fichier projet et remplacer toutes les occurrences de C:/nautical par votre chemin.

Gardez sans autre modification le fichier symbologieS57.qgs dans un endroit sûr. Vous devrez, pour chaque carte ENC le copier dans le répertoire créé avec ogr2ogr. Il est indispensable de ne pas l’utiliser directement car toute modification, par exemple l’absence d’un objet, sera mémorisée et vous n’aurez plus cet objet sur un future carte.

Pour télécharger le fichier, cliquez ici.

Afficher la carte ENC dans QGis avec une symbologie adaptée

Maintenant il ne vous reste qu’à copier le fichier projet QGis téléchargé, s567.qgs, dans le répertoire avec les shapes créés dans l’étape précédente. Puis, de charger ce projet dans QGis.

Si des objets sont absents sur la carte vous aurez une fenêtre vous indiquant les couches absentes:

objets manquants dans le fichier S57

Vous devez cliquer sur le bouton « Enlever les couches inutilisables » puis sur le bouton « OK« . Vous verrez alors les données avec une symbologie de carte marine, après avoir zoomé sur la nouvelle étendue de la carte : la couche M_COVR correspond à l’emprise de la carte (clic droit sur M_COVR->zoomer sur la couche).

Vous vous apercevrez que quelque chose manque sur votre carte : les valeurs des sondes. Pour les ajouter, consultez l’article Cartes marines S57 avec QGis: afficher les sondes . En effet, pour les afficher il ne suffit pas de travailler sur la symbologie car les objets SOUNDG ont la valeur de la profondeur dans la géométrie (XYZ).

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é !

8 thoughts on “Affichage des cartes marines S57 dans QGis 3.X

  1. Merci pour ce travail assez unique et forcément utile !

    Est-ce que vous pourriez préciser la licence du fichier de symbologie, ainsi que des fichiers SVG utilisés ?
    Est-ce que les formats de la série S100 sont également supportés de la même façon ?

  2. Bonjour,

    Je viens de télécharger votre zip et je pense avoir respecter toutes vos préconisations. Malheureusement, les svg sont marqués avec des points d’interrogations (perte de chemin) et tous vos choix de légendes (couleurs) sont bleus (LNDARE, DEPARE…..) ce que je pense n’est pas normal.

    Merci pour votre aide
    Ted

    1. Mea culpa, j’ai forcément fait une fausse manip et dans le fichier projet les référence à C:/nautical sont devenues des références relatives au projet (../nautical)
      J’ai corrigé le fichier 7Z du blog. Téléchargez le et remplacez le fichier projet par ce nouveau.
      Les points d’interrogation devront disparaître.
      J’espère que cela résout tous les problèmes, si non, je reste à l’écoute

  3. Bon bah ça ne fonctionne pas chez moi, écran tout bleu sous QGIS et pas de chemin pour le SVG.
    En passant, j’ai constaté des erreurs « ..shp » à la place de ».shp » 8 de mémoire sur des objets

Laisser un commentaire

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