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.

MapServer vs Mapnik
Étiqueté avec :        

6 pesnées sur “MapServer vs Mapnik

  • 10 mars 2008 à 10:34
    Permalien

    Suite au post de Benjamin (http://benjamin.chartier.free.fr/pro/?p=290) qui reprenait fort opportunément l’article de PerryGeo (http://www.perrygeo.net/wordpress/?p=77) sur le même sujet, j’ai refait les tests mapserver en utilisant directement shp2img plutôt que le python-mapscript, pour des résultats identiques. De même, l’utilisation du JPEG n’a pas d’impact sensible. Je pense surtout que les temps calculés par Perry sont trop proches et trop faibles (< 0.3s) pour être significatifs.

    Répondre
  • 10 mars 2008 à 14:45
    Permalien

    merci pour ces tests…
    c’est quelle version de mapserver que tu utilises? si il s’agit de la 5.0.x, te serait il possible de fournir les memes timings mais en utilisant la version trunk? merci

    Répondre
  • 10 mars 2008 à 15:10
    Permalien

    oui, c’est bien la 5.0.2. Je vais faire des tests dans la soirée sur le trunk. Pendant que j’y suis, un des atouts visibles de Mapnik est sa capacité à faire des tracés plus fins que MapServer, en faisant des traits inférieurs à 1 (0.1 par exemple). La valeur en tant que telle n’a pas vraiment de sens (0.1 pixel ? ah ah ah !). Est-ce que cela correspond à une valeur virtuelle, le tracé final faisait 1 pixel anti-aliasing compris (donc uniquement un trait estompé) ? Hmm, j’espère avoir été clair…Est-ce que MapServer pourra faire de même dans le futur ?
    Merci !

    Répondre
  • 10 mars 2008 à 15:13
    Permalien

    oui, c’est dans les capacites de AGG de pouvoir faire des traits d’epaisseur <1 . c’est prevu aussi pour mapserver pour un futur proche (il n’y a normalement qu’a modifier le parseur pour qu’il prenne des flottants pour WIDTH)

    Répondre
  • 10 mars 2008 à 15:15
    Permalien

    Super, car le rendu obtenu avec des traits < 1 est vraiment agréable, notamment à petite échelle.

    Répondre
  • Ping : neogeo » Archive du blog » Mapserver vs Mapnik, Round 2

Laisser un commentaire

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

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.