UMN MapServer est un serveur cartographique prenant en charge un grand nombre de formats de fichier. Il est possible de l'utiliser en mode CGI ou à travers des langages de script tels que PHP, Ruby, Java, C#, etc à l'aide de MapScript. MapServer constitue donc un environnement de développement d'outils plus qu'un outil en lui même prêt à être installé et à être utilisé directement.
Cet article a pour but de présenter les différentes nouveautés et corrections importantes de cette nouvelle version. Cette présentation n'est pas forcément exhaustive et il est préférable de se tourner vers le site officiel de MapServer. Ce document est composé de diverses traductions des RFC et documentations écrites suite à ces changements. Il se peut que certaines parties n'aient pas été développées, la documentation n'ayant pas encore été mise à jour !
Au niveau des nouveautés de cette version majeure, nous trouvons les mapfiles au format XML (http://mapserver.org/development/rfc/ms-rfc-51.html), les requêtes réalisées en une fois ce qui a pour objectif d'optimiser les services WFS (http://mapserver.org/development/rfc/ms-rfc-52.html), améliorer la résolution des rendus permettant la sortie pour impression de cartes (http://mapserver.org/development/rfc/ms-rfc-55.html), amélioration des étiquettes sur les géométries (http://mapserver.org/development/rfc/ms-rfc-57.html).
Il est à noter que certaines améliorations ne sont pas finalisées car celles-ci font l'objet d'un développement en deux temps. Dans ce cas, nous avons la gestion du rendu OpenGL (http://mapserver.org/development/rfc/ms-rfc-50.html) et l'API d'interface du rendu (http://mapserver.org/development/rfc/ms-rfc-54.html).
D'autres améliorations sont également présentes :
- Correction de sécurité (également appliquée sur la version 5.4) :
- amélioration de la sécurité relative aux répertoires et mapfiles non fiables (RFC 56)
- correction de plusieurs problèmes de sécurité trouvés dans l'audit de l'application CGI (#2939, #2941, #2942, #2943, #2944)
- Optimisation des performances :
- chargement de toutes les bandes d'images en une passe pour calcul plus rapide (r9260) ;
- optimiser l'accès à de très gros shapefiles (#2930).
- Plusieurs corrections sur la gestion des services Web de l'OGC ;
- Plusieurs corrections/améliorations diverses sur MapScript.
Date des sorties des versions intermédiaires
- Sortie prévue : 18-12-2009
- Version RC : 27-11-2009
- Versions béta : 24-09-2009, 01-10-2009, 08-10-2009, 15-10-2009, 18-10-2009, 11-04-2009
- Prochaine version : 6.0, 2010
Nouveautés
MapFile au format XML
- RFC : http://mapserver.org/development/rfc/ms-rfc-51.html
- Informations diverses : http://trac.osgeo.org/mapserver/wiki/XMLMapfiles
On en attend parler depuis fort longtemps, j'en ai entendu parler pour la première fois en 2006 comme étant déjà la fonction que tout le monde attendait depuis longtemps. La voici donc : les mapfiles peuvent être maintenant écrits en XML puis convertis par un schéma XLST en mapfiles textuels. Si le mapfile au format XML décolle (c'est à dire s'il est largement utilisé), alors l'équipe de développement travaillera à une gestion directe au sein de MapServer.
Voici un exemple en XML d'une section LAYER d'un mapfile texte :
<Layer>
<name>popplace</name>
<type>POINT</type>
<debug>5</debug>
<status>ON</status>
<Metadata>
<item name="DESCRIPTION">Cities</item>
<item name="TEST">TESTING</item>
<item name="RESULT_FIELDS">NAME</item>
</Metadata>
<data>popplace</data>
<labelItem>Name</labelItem>
<classItem>Capital</classItem>
<Class>
<name>Cities</name>
<expression>1</expression>
<template>ttt_query.html</template>
<symbol>2</symbol>
<size>8</size>
<Label type="TRUETYPE">
<colorAttribute>[COULEUR]</colorAttribute>
<font>sans</font>
<angle>0</angle>
<size>8</size>
<outlineColor red="255" green="255" blue="255"/>
</Label>
<color red="0" green="255" blue="0"/>
</Class>
<Class>
<name>Cities</name>
<expression>/2|3/</expression>
<template>ttt_query.html</template>
<tolerance>5</tolerance>
<Label type="TRUETYPE">
<colorAttribute>[COULEUR]</colorAttribute>
<font>[FONT]</font>
<angle>[ANGLE]</angle>
<size>8</size>
<outlineColor red="255" green="255" blue="255"/>
<position>AUTO</position>
<partials>FALSE</partials>
</Label>
<Style>
<symbol>7</symbol>
<size>6</size>
<colorAttribute>[COULEUR]</colorAttribute>
</Style>
</Class>
</Layer>
On y retrouve la logique d'une mapfile texte, chaque paramètre fait l'objet d'une balise et sa valeur est entourée par une balise ouvrante et une balise fermante. Pour convertir un mapfile xml en mapfile texte, voici comment faire :
Tout d'abord vous avez besoin de la “grammaire” du XML et du fichier de traduction du mapfile XML vers le mapfile Texte. Tous deux se trouvent dans le répertoire xmlmapfile :
- mapfile.xsd : le schéma XML utilisé pour valider le mapfile XML (ce que j'ai appelé la grammaire plus haut) ;
- mapfile.xsl : le fichier XSL utilisé par XSLT pour convertir un mapfile XML en mapfile texte.
Vous trouverez des exemple dans le répertoire xmlmapfile/tests.
Pour éditer un mapfile XML, vous avez besoin d'un éditeur XML, puis pour le valider vous pouvez lancer les commandes suivantes sous linux :
$ sudo apt-get install xmlstarlet
$ xmlstarlet val -e --xsd mapfile.xsd my-new-mapfile.xml
Enfin pour convertir le mapfile XML en mapfile texte :
$ sudo apt-get install xsltproc
$ xsltproc mapfile.xsl my-new-mapfile.xml > /tmp/my-regular-mapfile.map
Optimisation des services WFS
Pas grand chose à dire ici car tout se fait automatiquement. Il n'y a désormais plus deux étapes (une pour récupérer les données, une autre pour les mettre en forme pour les renvoyer) mais une seule.
Amélioration du rendu en haute résolution
MapServer est souvent utilisé pour produire des cartes imprimables correspondant à la carte affichée dans une interface web. Les cartes imprimées nécessitent généralement une plus haute résolution que celle par défaut (72 pixels par pouce) qui est communément utilisée pour l'écran (par exemple 150 ou 300 ppp).
Un nouveau mot-clé optionnel DEFRESOLUTION sera ajouté avec une valeur par défaut de 72 s'il n'est pas défini. DEFRESOLUTION est la référence ou la résolution par défaut pour laquelle toutes les tailles des symboles sont définies dans le mapfile.
Lorsque la résolution sera modifiée, la résolution de référence sera utilisée pour connaître le taux d'agrandissement des symboles.
Exemple :
MAP
...
RESOLUTION 300
DEFRESOLUTION 72
SIZE 1667 1667
...
END
Amélioration des étiquettes sur les géométries
Pour l'instant MapServer dessine des étiquettes sur le segment le plus long de l'objet linéaire. Même si l'objet est une longue ligne ou une multi-ligne, seule une étiquette est dessinée. Dans certains cas, la qualité de la carte peut être améliorée en augmentant le nombre d'étiquettes.
Cet exemple répètera les étiquettes tous les 80 pixels sur chaque ligne d'un objet multi-ligne.
MAP
...
LABEL
REPEATDISTANCE 80
END
...
END
Par défaut le paramètre LABEL.REPEATDISTANCE est définie à 0.
Conclusion
MapServer est maintenant une solution mature dont les développements se tournent vers l'amélioration et l'optimisation de l'existant. On retrouve donc une optimisation du rendu qui sera poursuivie dans la version 6.0 avec une optimisation de la vitesse du traitement avec la gestion des gros shapefiles, l'optimisation des requêtes qui permettront une augmentation de la vitesse des requêtes WFS.
Site officiel : Le site de MapServer
Site officiel : Les RFC
Site officiel : L'historique de développement
licence Creative Commons Paternité-Partage des Conditions Initiales à l'Identique Commerciale 2.0 France