InkMap
Florent Gravin
L’impression de cartes sur le web est un besoin récurrent dans les applications de webmapping qui implique généralement certains compromis au niveau des performances, de la flexibilité ou de la précision du rendu. Pour ce cas d’usage, il existe principalement deux options.
Soit on utilise une solution backend telle que MapfishPrint, robuste, performante, scalable et cloud-ready, basée sur des templates d’impression gérés par un administrateur, donc assez statique dans son ensemble.
Soit on opte pour une librairie cliente effectuant l’impression dans le navigateur, facile à utiliser, le rendu est identique au Canvas de la carte mais généralement ces solutions ne permettent pas d’exécuter de grosses impressions et ne sont pas très focalisées sur la performance.
Nous souhaitons à Camptocamp mettre l’expérience utilisateur au cœur du besoin et nous réfléchissons à quelque chose d’innovant en matière d’impression: une solution offrant à la fois de la flexibilité et de l’interactivité sans transiger sur les performances. L’utilisateur doit pouvoir facilement paramétrer la mise en page et rester ambitieux sur la qualité d’impression (A0 en 300 dpi). Il est aussi important de rendre cet outil accessible, de pouvoir facilement l’intégrer à son application et le déployer sans forcément avoir à installer et maintenir un serveur. Pour nous, il est temps de profiter des innovations récentes dans le monde du Web pour embarquer ces outils d’impression directement dans le navigateur.
Le projet InkMap propose une librairie native pure javascript capable de produire des impressions très haute résolution. L’architecture se base sur l’utilisation des Service Worker et du Offscreen Canvas (avec un fallback pour les navigateurs qui ne le supportent pas). La combinaison de ces deux technologies assure un service de qualité, performant. Le job d’impression est exécuté dans un thread dédié, celui du Worker qui vit dans le contexte du navigateur. Ce worker utilise ses propres ressources, c'est-à-dire qu’il ne pénalise pas l’exécution de l’application principale lors de la réalisation d’un traitement d’impression. Le worker a son propre cycle de vie au sein du navigateur, il est partagé pour tous les onglets et nous l’avons envisagé comme un gestionnaire de processus d’impression, gérant une file d’attente et informant en permanence sur l’état de chaque job d’impression.
En interne, InkMap utilise la librairie Openlayers pour dessiner chaque couche dans un canvas dédié à l’impression. Ainsi, on assure d’avoir le même rendu sur la carte et dans l’impression, on peut profiter de toutes les possibilités de styling offertes par la librairie. En général le canvas va être beaucoup plus grand que celui de la carte de l’application pour assurer une meilleure qualité. Le job d’impression prend en entrée un objet de configuration pour définir son layout (taille, position des éléments), les couches, l'échelle etc.. et retourne une image à incruster dans un template d’impression exportable en pdf.
Il était essentiel pour nous de pouvoir réaliser ces traitements dans le navigateur. Vous pouvez importer InkMap comme module NodeJS et directement l’utiliser dans vos pages Web. De plus, la technologie Canvas est très flexible en matière de dessin et de mise en page et offre toutes les possibilités de customisation nécessaires à la composition de templates d’impression sur mesure et dynamiques.
InkMap propose une approche innovante à un besoin qui a toujours existé dans le monde du géospatial et nous espérons qu’il puisse combler le manque existant en matière d’outils d’impression simple à mettre en œuvre et performant.
Inkmap est supportée par Camptocamp et le Ministère de la Transition Ecologique (MTE).
Carrière
Vous souhaitez travailler dans un environnement inspirant et rejoindre nos équipes motivées et multiculturelles ?