MapServer est un excellent serveur WMS, mais j’ai récemment découvert un bug qui peut affecter l’affichage d’une couche WMS dans un client quelconque. Enfin, pas complètement quelconque non plus.

Le problème se situe au niveau du calcul de la BBOX de la couche en coordonnées géographiques (WGS84), dont le résultat est exposé dans la balise EX_GeographicBoundingBox du GetCapabilities. Le calcul de cette BBOX se fait sans vérifier que le méridien d’origine de la projection source de la donnée est bien Greenwich, qui est celui utilisé par le WGS84. Dès lors, si vos données sont dans un système de référence utilisant le méridien de Paris comme origine (les Lambert français de la NTF par exemple, à la différence du Lambert 93 (RGF93) qui utilise Greenwich plus un décalage), la BBOX en WGS84 sera erronée car décalée de plus de 2 degrés vers l’ouest.

Bon, mais qu’est-ce que ça change en pratique ? Je suis sûr que nombre d’entre vous ont déjà utilisé MapServer en WMS 1.3.0 sur ce type de projection sans rencontrer de problème… Il se trouve que certains logiciels clients WMS (l’excellent QGis notamment), plus malins que d’autres, se servent de cette information pour déterminer l’emprise de la couche (quelle que soit la projection utilisée pour l’affichage d’ailleurs), et n’envoient donc pas de requête au serveur WMS quand la vue se situe à l’extérieur de cette emprise, afin de ne pas solliciter inutilement le serveur. Finaud donc. Si vous publiez des données France entière, il y aura recouvrement, et donc pas de problème (à moins peut-être de zoomer sur Strasbourg par exemple. A tester sur vos services WMS 1.3.0 préférés avec QGIS. J’en ai déjà trouvé un…). Mais si l’emprise de vos données est suffisamment étroite (une agglomération par exemple), vous ne verrez tout simplement rien là où vous comptiez les voir apparaître, car d’après le GetCapabilities les données ne se trouvent pas là du tout. Vous ne verrez non seulement rien, et certainement pas d’erreur, et vous risquez de passer quelque temps (je parle d’expérience) à vous creuser la tête pour comprendre ce qui ne va pas dans votre configuration. Sauf que la configuration va bien. Là où ça devient énervant, c’est que les clients WMS qui envoient comme des bourrins des requêtes au serveur où qu’on se situe, ignorant par là la présence et le rôle de la balise EX_GeographicBoundingBox, ces barbares donc, vont eux recevoir une réponse correcte, puisque la reprojection de la donnée elle-même fonctionne normalement. Funeste sort que celui des clients WMS les plus exigeants, les plus respectueux de l’esprit de l’inter-opérabilité, induits ainsi en erreur par un calcul approximatif.

Mais heureux dénouement qui voit les lecteurs assidus de ce blog non seulement informés mais dépannés par un patch tout frais déposé sur le bug-tracker de MapServer ! Pour l’utiliser, il suffit de l’appliquer (commande patch mapows.c wms_1.3.0.patch) au fichier source puis de recompiler et remplacer son mapserv par le nouveau. Il devrait également être rapidement disponible dans la version officielle.

MapServer : attention à Greenwich en WMS 1.3.0
Étiqueté avec :        

3 pesnées sur “MapServer : attention à Greenwich en WMS 1.3.0

Laisser un commentaire

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