Affichage des cartes marines S57 dans QGis

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.

Si vous êtres utilisateur d’ArcGis, vous disposez d’une extension développée par la NOAA pour intégrer les données de cartes ENC dans ArcMap. Pour QGis, il n’y a pas d’extension similaire.

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.

chargement brut du S57 dans qgis

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

Nous vous proposons quelque chose de plus rapide.
Nous avons mis une vidéo sur Youtube que vous pouvez regarder ici
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.

Si vous ne l’avez pas déjà fait, il vous faut installer FWTools. FWTools est un set d’outils Open source pour les systèmes Windows (Win32) et Linux(x86 32bit). C’est un kit très simple sans code source ni compilation.
L’installation sous Windows très simple :
* On télécharge le package. On double clique et l’install se lance.
* Il va créer un répertoire avec notamment un fichier appelé openev.bat. C’est celui là qui va lancer le logiciel OpenEV qui gère les autres composants.

FWTools contient parmi ses outils, GDAL-OGR,: une librairie et un utilitaire de lignes de commandes pour lire et écrire des formats raster (gdal) et vecteur (ogr).

Une fois installé FWTools, vous le lancez à partir du menu Tous les Programmes-> FWTools -> FWTools Shell.
Une fenêtre de commande s’ouvre.

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

example:
ogr2ogr -skipfailures d:\ENC570940 D:\shom\ENC_25000\FR570940.000

Ne vous inquiétez pas de la liste interminable d’erreurs et avertissements qui s’affichent pendant l’exécution. Nous n’avons pas encore trouvé quelqu’un qui puisse les expliquer, mais ce qu’il faut retenir c’est que le résultat de la traduction est bon.

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

Vous avez donc quelques 75 fichiers shape, mais toujours pas de symbologie pour QGis.

Ressources pour la symbologie QGis

Vous devez télécharger un fichier zip contenant:
– un grand nombre de symboles svg que nous avons regroupés dans un répertoire « nautical ». Vous pouvez trouver tous ces symboles en recherchant sur Internet, mais comme ça vous les avez tous d’un seul coup.
– un Projet QGis (version 2.6) avec l’affectation de chaque symbole pour chaque couche shape.

exemlple de classification de légende ENC

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

Le répertoire "nautical" doit être copié dans le répertoire svg de votre installation de QGis.
 Par exemple : C:\Program Files\QGIS Brighton\apps\qgis\svg\ (si vous avez un système x64 )

Mise à jour du 13/09/2016: Vous n’avez plus besoin d’installer le répertoire de symboles si vous utilisez le plugin Resource Sharing. Les symboles indiqués ici sont disponibles à travers ce plugin. (Voir l’article Partagez vos ressources(symboles,images,scripts) pour Qgis avec un nouveau plugin)

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.

Vous verrez alors les données avec une symbologie de carte marine.
Résutat de la symbologie nautical sur une carte ENC

Si vous n’obtenez pas ce type de résultat, c’est simplement parce que votre installation de QGis n’est pas dans le même répertoire que celui enregistré dans le projet (C:/Program Files/QGIS Brighton/apps/qgis)
Regardez quel est le bon chemin, puis ouvrez le fichier s57.qgs dans un éditeur de texte et remplacez toutes les occurrences de:
v= »C:/Program Files/QGIS Brighton/apps/qgis/svg/nautical
par le chemin correspondant à votre installation.

3 pensées sur “Affichage des cartes marines S57 dans QGis”

  1. Bonjour,

    Les messages d’erreur proviennent :
    => de l’évolution de la norme S57 avec la mise en place de nouveaux attributs (types). Or le convertisseur OGR n’a pas mis ses paramètres à jour.
    => le SHP ne tolère pas qu’un même objet ait des primitives différentes, exemple une ACHARE ne peut pas être à la fois un Ponctuel et une Surface (or en S57 le permet).
    Voilà d’où viennent tous ces messages d’erreur.
    POur ce dernier cas, il y a une option pour s’en sortir, mais je ne m’en souviens plus!

      1. le plus simple c’est d’éclater les données en shapefiles différents, par exemple pour filtrer les points :
        -where ogr_geometry = « POINT »
        Merci pour le post et heureux d’avoir par le retour de Ted éclairé ma lanterne sur un bout de code qui me semblait étonnant (je ne savais pas que les .shp n’admettaient qu’une géométrie).

Laisser un commentaire

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