Workshop Mapserver et les standards de l'OGC
Introduction
L’interoperabilité devient de plus en plus une problématique importante pour les sociétés qui partagent des données par Internet. L’Open Geospatial Consortium propose des standards pour les transferts de données par Internet. Aujourd’hui MapServer gère de nombreux standards qui permettent de publier des services de données d’une manière intéropérable. Ce workshop a pour but de présenter la manière dont ces standards sont implémentés dans MapServer, ainsi que les problèmes récurrents, et enfin les futures implémentations prévues.
Présentation
Les webservices définis par l’OGC sont des fonctionnalités logicielles accessibles par Internet et utilisant majoritairement le XML pour les communications.
Les services implémentés dans MapServer sont les suivants :
- WMS (Web Map Service) : pour obtenir une carte, les pixels correspondent à une couleur.
- WFS (Web Feature Service) : pour obtenir des données vectorielles.
- WCS (Web coverage Service) : pour obtenir des données raster, un pixel contient la donnée, l’information.
- SOS (Sensor Observations Service) : récupérer les données de capteurs distants et en faire une carte.
- WMC (Web Map Context) : sauvegarde des différentes couches d’un projet. Correspond en quelque sorte à un mapfile, il n’y a pas de transfert de données, seules les sources de données sont sauvegardées.
- Filter : utilisé entre autre dans les SLD (Styled Layer Description) : Permet de décrire et définir le style de la couche.
L’ensemble du workshop est disponible sur cette page
La version 2.2.6 concerne MapServer 5.0, la version 2.2.5 concerne MapServer 4.10.
Pourquoi utiliser ces standards ?
Parce que votre application sera indépendant du système d’exploitation, du langage de programmation et de l’environnement de développement. Mais une attention particulière doit être portée sur leur utilisation. En effet, certain de ces standards sont particulièrement puissant et parfois complexes à utiliser (le document de spécification du standard GML contient 500 pages de définition).
D’autre part, l’utilisation du service SLD peut poser problème en fonction du nombre de couches et de la configuration du service.
Comment paramétrer MapServer pour proposer des webservice ?
Tout d’abord vous devez compiler MapServer avec les options –with-wms, –with-wmsclient, –with-wfs, –with-wfsclient, etc. Il existe un paquet qui permet d’utiliser MapServer sans avoir à le compiler, ce paquet s’appelle FWTools et propose en plus de MapServer, GDAL-OGR et Python activé. Python vous permet d’écrire des scripts pour automatiser des tâches complexes et répétitives.
Des how-to existent pour chaque webservice, malheureusement en anglais. L’OSGeo-fr tentera dans un avenir plus au moins proche de proposer quelques un de ces documents en français. En attendant, il existe des mapfiles de référence qui vous montrent des exemples de mapfile pour chaque webservice.
Cependant, il faut savoir que MapServer gère les métadonnées « ows-* » (pour définir des webservice sous mapServer il suffit de rajouter des méta-données dans le mapfile), ils doivent être utilisés de préférence. Au lieu de ceci :
LAYER [...] METADATA « wms_title » « Nom de la couche » « wfs_title » « Nom de la couche » [..] END END
On mettra :
LAYER [...] METADATA « ows_title » « Nom de la couche » [..] END END
Ce qui est beaucoup plus simple, n’est ce pas ?
Techniquement un webservice utilise le protocole http, le même que l’on utilise pour surfer sur Internet (et qui vous permet de lire ce document). En retour le client reçoit un fichier xml qu’il doit traiter pour récupérer l’information. Ainsi, pour envoyer une requête au serveur, on écrit l’url du serveur suivi des paramètres nécessaires.
http://localhost/cgi-bin/mapserv.exe?map=/ms4w/apps/ms_ogc_workshop/service/config.map& version=1.1.1& service=WMS& request=GetCapabilities
Certains sont obligatoires, d’autres sont optionnels. Voici les différentes valeurs du paramètre REQUEST pour un serveur WMS (les majuscules sont ici seulement pour améliorer la lisibilité, les paramètres sont insensibles à la casse, contrairement à leurs valeurs) :
- GetCapabilities
- DescribeLayer
- GetMap
- GetFeatureInfo
GetCapabilities est une valeur que l’on trouve dans tous les webservices et renvoie les possibilités du serveur. DescribeLayer fournit des informations sur les couches, GetMap vous permet de récupérer la carte sous forme d’image. Enfin GetFeatureInfo vous permet d’interroger la couche. Notons qu’il est recommandé de ne pas l’utiliser et de passer par un processus d’interrogation du serveur avec le paramètre DescribeLayer puis de passer par un serveur WFS et des récupérer les données.
D’autres paramètres optionnels existent tel que le paramètre TIME, STYLE, exceptions_format. Ce dernier vous permet de définir le format de retour des erreurs (XML, image ou blanc). Pour gérer les erreurs de configuration du mapfile, il suffit de lancer une requête GetCapabilities et de lire le fichier XML renvoyé.
Comme client WMS, vous pouvez utiliser uDIG. Celui-ci vous permet également de définir les styles des couches et de sauvegarder ces styles au format SLD. Ainsi vous n’avez pas à l’écrire à la main.
Désolé, les commentaires pour cet articles sont clos pour le moment.