Mapserver vs Mapnik, Round 2

10 mars 2008

Suite au commentaire de l’article précédent par Thomas Bonfort , principal maître d’oeuvre de l’intégration d’AGG dans MapServer, j’ai refait les tests avec la version trunk de MapServer, future version 5.1…

Ce qui nous donne (accrochez-vous…):

  • Sur le Finistère, communes BDCarto(c), AGG :
    real 0m0.271s
    user 0m0.200s
    sys 0m0.080s
  • Sur la France entière, communes BDCarto(c), AGG :
    real 0m1.962s
    user 0m1.880s
    sys 0m0.090s

Les performances ont donc été multipliées par 12 (!!!), et sont désormais nettement supérieures à celles de Mapnik pour les gros jeux de données (mais très comparables sur les petits volumes).

Thomas indique également la prochaine possibilité de tracer des traits plus fins dans le rendu AGG, comme c’est déjà le cas pour Mapnik.

Toutes nos félicitations à l’équipe de développement de MapServer et particulièrement à Thomas Bonfort donc, pour cette significative amélioration des performances.

MapServer vs Mapnik

9 mars 2008

La récente adoption du format AGG par MapServer (depuis la version 5) l’a doté d’une qualité de rendu qui lui a longtemps fait défaut.

Image MapServer avec rendu AGG

Côté rendu, MapServer a ainsi rejoint une solution plus récente, encore mal documentée, mais prometteuse : Mapnik. Bibliothèque C++ avec une API en python, celle-ci a fait de la qualité graphique une de ses priorités. Elle intègre donc également la bibliothèque AGG (AntiGrainGraphics) permettant de lisser les PNG.

Autant le dire tout de suite, les images produites sont strictement identiques, au pixel près ! Cependant, côté performances, Mapnik est un peu plus intéressant, comme en témoigne ce petit test réalisé sur une machine tout ce qu’il y a de standard pour générer l’image des communes de la pointe du Finistère ci-dessus :

  • MapServer :
    real 0m0.382s
    user 0m0.310s
    sys 0m0.070s
  • Mapnik :
    real 0m0.244s
    user 0m0.200s
    sys 0m0.050s

Mapnik s’acquitte donc de la tâche en 1/3 de temps en moins, pour un résultat, rappelons-le, strictement identique. On retrouve un écart d’autant plus significatif que le jeu de données est important. Sur la France entière, communes BDCarto(c) :

  • Mapserver :
    real 0m25.415s
    user 0m25.330s
    sys 0m0.080s
  • Mapnik :
    real 0m13.673s
    user 0m13.630s
    sys 0m0.040s

C’est preque un facteur 2 qui sépare les deux applications. Alors, MapServer K.O. debout ? Pas si sûr, car le rendu AGG étant souvent utilisé dans un contexte de tuilage et de cache disque (voir par exemple OpenStreetMap) le temps de génération a certes une importance mais pas de manière aussi critique que sur du rendu “live”. L’AGG est un peu trop lent pour être utilisé dans un tel contexte, et il faut souvent se contenter dans ce cas d’une simple rendu PNG standard. Mais les performances sont alors exceptionnelles :

  • MapServer, format PNG 256, communes BDCarto(c) France entière :
    real 0m0.638s
    user 0m0.560s
    sys 0m0.070s

6 dixièmes de seconde pour dessiner les 36500+ communes de France en 600 x 600, c’est remarquable, et peut tenir la dragée haute à bien des SIG desktop (faites vos tests…). Mapnik ne fonctionnant qu’en mode AGG, il ne peut atteindre de tels résultats. De sorte que son rayon d’action se trouve fortement réduit, à la différence d’un MapServer avec lequel on peut jouer avec les différents formats de sortie pour optimiser le rendu ou la rapidité selon les besoins, l’échelle, la couche, le contexte (visualisation / impression) etc.

Mise à jour de la doc d’install MapServer

18 septembre 2007

Suite à l’arrivée de la version 5, j’ai mis les docs d’install à jour. J’en ai profité pour mettre aussi à jour les différentes versions des librairies utilisées que j’ai pu tester récemment.

Téléchargement au format OpenOffice, Microsoft Word, PDF.

MapServer 5

18 septembre 2007

La version 5.0 de MapServer vient d’être publiée. Elle intègre de nombreuses modifications, même si elle traîne toujours le rustique fichier .map. Un des apport les plus intéressants à mon sens concerne le rendu des vecteurs. Grâce à la bibliothèque AGG (Anti-Grain Graphics), les rendus sont spectaculaires, courbures et contours sont lissés. Mais chaque médaille ayant son revers, les fichiers PNG générés avec AGG sont beaucoup plus lourds, de 3 à 12 fois environ. Voici quelques exemples :

PNG standardPNG 8 bits, sans AGG 7 Ko

AGG en mode RGBAGG en mode RGB, 71 Ko

AGG optimiséAGG optimisé (palette adaptative), RGB, 20 Ko

Ce dernier mode est donc relativement performant, générant de belles images sans faire des fichiers trop volumineux.

De plus, la gestion de la transparence pose quelques problèmes. Seul le mode RGBA permet de disposer d’un fond transparent, alors qu’en PNG standard 8 bits cela est possible. Dans une application OpenLayers, où les fonds doivent être transparents pour que chaque couche soit visible, ça devient gênant car ça oblige à l’utilisation du mode RGBA non optimisé, et donc la manipulation de fichiers beaucoup trop gros. C’est un défaut qui a déjà été constaté par les utilisateurs et qui sera donc vraisemblablement corrigé dans les mois à venir.

Reste qu’en utilisation “classique” de MapServer, le mode optimisé fonctionne très bien et permet de très belles réalisations. C’est aussi un rendu qui sera très appréciable pour les exports PDF.

Petit exemple

Côté compatibilité, rien de bien compliqué. Les attributs LABELANGLEITEM et LABELSIZEITEM, ainsi que ANGLEITEM et SIZEITEM disparaissent au profit de simples ANGLE et SIZE placés dans les contextes du label ou du symbole.
Le mot-clé SYMBOL du fichier de symboles est remplacé par PATTERN pour ne plus créer de confusion avec le contenu du fichier .map. Enfin, TRANSPARENCY est enfin remplacé par ce qu’il signifiait vraiment, à savoir OPACITY !

La compilation ne pose pas de problème nouveau. Pour le support d’AGG, il suffit de récupérer cette bibliothèque, puis de faire un simple make, rien de plus. Le configure de mapserver comportera alors une option de plus : –with-agg=/chemin_vers_le_rep_de_compilation. Je vais ajouter ce point à ma documentation au plus vite.

Pour de plus amples informations, voir :

La description des nouveautés et améliorations :
http://mapserver.gis.umn.edu/development/rfc et http://trac.osgeo.org/mapserver/browser/tags/rel-5-0-0/mapserver/HISTORY.TXT
Le guide de migration 4.x -> 5.0 :
http://mapserver.gis.umn.edu/download/current/MIGRATION_GUIDE.TXT/

Quelques tuyaux pour optimiser le driver AGG :
h
ttp://mapserver.gis.umn.edu/docs/howto/agg-rendering-specifics

et enfin les sources :
http://download.osgeo.org/mapserver/mapserver-5.0.0.tar.gz

Compilation et installation de MapServer, PostGIS et PHP sous Linux

26 juillet 2007

La mise en place d’un serveur cartographique complet est parfois complexe et douloureuse. Au fil des ans, j’ai enrichi un document de travail décrivant toutes les étapes relatives à la compilation depuis les sources ainsi qu’à l’installation et à la configuration d’un serveur carto sous Linux, avec PostGIS et PHP. Cette documentation comprend la description d’une configuration en php-cgi ou php-module, ainsi que la description de la prise en charge d’Oracle ou du format ECW

Lisez ce document, critiquez-le, corrigez-le, améliorez-le, de sorte qu’on puisse mettre à disposition de tous une documentation fiable et complète.

Téléchargement au format OpenOffice, Microsoft Word, PDF.