Outils pour créer des cartes au format kap


Suite au très bon article « Créer des cartes .kap lisibles par OpenCPN », j'ai voulu simplifier l'opération en réalisant un petit programme qui génère directement des cartes KAP à partir d'une image TIFF.

Voir d'abord l'article <> : http://www.hisse-et-oh.com/articles/article.php?article=1165

J'ai noté une erreur dans le programme, dans certain cas rares, il ne repère pas que l'image TIFF dépasse 128 couleurs et génère alors une image incorrecte.

Assurez-vous de convertir le tiff en 128 couleurs au plus.
Perso j'utilise GraphicsMagics http://www.graphicsmagick.org/utilities.html
avec la commande gm convert input.tiff -colors 128 output.tiff.

Afin de simplifier la fabrication de carte KAP, j'ai donc fait une petit programme sur la base des open-sources existant libbsb, opencpn et quelques autres en utilisant la librairie libtiff qui permet de générer directement des carte .KAP à partir d'une image TIFF et des coordonnées de l'image.

Ayant constaté quelques problèmes (étape 13 dans l'article cité) j'ai modifié les algorithmes en profondeur de façon à pouvoir utiliser des images de 2 à 128 couleurs, y compris la couleurs noire ou les pixels à 0. De même, le programme corrige légèrement les tailles d'image si nécessaire.

Le programme est une ligne de commande :

tiff2kap input.tif lat0 lon0 lat1 lon1 [output.kap]

Avec les paramètres :

"lat0" et "lon0" sont les coordonnées WGS84 (gps) en haut à gauche de l'image
"lat1" et "lon1", les coordonnées en bas à droite de l'image

Le programme pour Windows est ici Fichier a telecharger :

Le fichier source en C est ici Fichier a telecharger :

Pour le compiler il faut la bibliothèque libtiff, voir ici http://www.libtiff.org/
J'ai utilisé l'IDE Code::Blocks sous Linux Ubuntu et sous windows, voir ici http://www.codeblocks.org/

L'exécutable sous linux ne fait que 13ko car il ne contient pas la librairie libtiff.

Format des coordonnées

Les coordonnées sont dans le format le plus simple en degrés (pas en DMS dd° mm' ss' qu'il faut alors convertir)

Par exemple :

lat= 48.874087 lon= 2.295113 pour la place de l'étoile à Paris.

lat= 47.543591 lon=-2.894887 pour le port du Crouesty (centre du port).

Indication : Vous pouvez trouver facilement sur google map les coordonnées avec click droit de la souris et "Ajouter un repère LatLng"


Compression

La compression prend en compte une palette de 128 couleurs, de 0 à 127, mais elle accepte de 2 couleurs à 128, avec 1,2,3,4,5, 6 et 7 bits en génération dans le fichier KAP. En entré le TIFF peut être composé de même de 2 à 128 couleurs en 1, 2, 4 ou 8 bits.

Géodésique

Un autre point m'a posé problème, les cartes de type google, yahoo... maps satellite, sont dans une géodésique de type sphérique, les satellites voient la terre comme une sphère, par contre les logiciels comme OpenCPN utilisent des cartes alignés sur la géodésique standard WGS84, c'est à dire elliptique (les coordonnées dans google, yahoo... en WGS84 sont correctes, c'est la projection qui est différente). Auto total j'obtenais des décalages très importants :

outils pour creer des cartes au format kap

J'ai donc corrigé le programme. J'avais 2 solutions, réduire l'image en latitude en respectant l'elliptique ou agrandir l'image en longitude, bien sur de façon simpliste, sans réduction avec répartition des points.
La solution choisi est d'agrandir l'image en longitude afin de ne pas perdre de points, un seul point pouvant être important si ce point est par exemple un phare et je n'ai pas voulu risquer l'éliminer.

(La dernière version d'OpenCPN retaille l'image, donc ne nécessiterait pas cette correction)

En finale le programme agrandit l'image en longitude ou latitude suivant les coordonnées fournies et la taille de l'image, cela dans une limite raisonnable de 5% de différences (Les images sphériques ont un décalage de moins de 1%).

Cela donne, par exemple sur le port du Crouesty :

Avec une carte vectorielle :

outils pour creer des cartes au format kap

Avec une image satellite :

outils pour creer des cartes au format kap


Ce programme est libre, vous pouvez réutiliser le code, bien sûr, pour un usage commercial ou en entreprise il serait plus cool de préciser la source.

Si vous trouvez des bugs ou des erreurs, notez les dans le forum ou par mail, je tenterais de vous répondre rapidement.
M'dJ