Serveur WMS

Author:Jeff McKenna
Contact:jmckenna at gatewaygeomatics.com
Last Updated:2017-05-24

Introduction

Un WMS (ou Web Map Server) permet l’utilisation de données provenant de nombreux serveurs différents, et rend aussi possible la création d’un réseau de serveurs cartographiques depuis lequel des clients peuvent construire des cartes personnalisées. La documentation suivante est basée sur la spécification Web Map Server Interfaces Implementation Specification v1.1.1.de l’Open Geospatial Consortium (OGC)

MapServer v3.5 ou plus récent est requis pour implémenter les fonctionnalités du WMS. Au moment de l’écriture de ce document, MapServer supporte les versions de WMS suivantes: 1.0.0, 1.0.7, 1.1.0 (l’alias de 1.0.8), 1.1.1 et 1.3.0

Ce document assume que vous êtes déjà familier avec certains aspects de MapServer :

  • Développement d’application MapServer et configuration des fichiers .map.

  • La familiarité avec la spécification WMS est un avantage. Un lien vers le document de spécification WMS est inclus dans la section “Informations liées au WMS”:

Comment un WMS fonctionne

Les serveurs WMS interagissent avec leurs clients via le protocole HTTP. Dans le plupart des cas, un serveur WMS est un programme CGI. C’est aussi le cas avec Mapserver.

La spécification WMS définit un certain nombre de types de requêtes, et pour chacun de ces types un jeu de paramètres d’interrogations avec des comportements associés. Un serveur respectant la norme WMS doit être capable de gérer au moins les deux types de requêtes WMS suivants:

  1. GetCapabilities: retourne un document XML avec les informations de métadonnées du serveur cartographique web

  2. GetMap: renvoie une image d’un carte en fonction des besoins de l’utilisateur.

Et supporte de manière optionnelle les types de requête suivant:

  1. GetFeatureInfo: renvoie des informations sur le ou les objet(s) géographique(s) en fonction de l’endroit de la requête sur la carte (du clic souris). MapServer supporte 3 types de réponses à cette requête:

    • une sortie text/plain avec les informations attributaires.

    • une sortie text/html en utilisant les templates d’interrogation de MapServer spécifiés dans le paramètre CLASS du TEMPLATE le nom du fichier doit avoir une extension .html. Le type MIME retourné par défaut par les templates CLASS est le text/html et peut être contrôlé en utilisant les métadonnées via “wms_feature_info_mime_type”

    • application/vnd.ogc.gml, GML.1 ou GML pour les objets de type GML.

  2. DescribeLayer: retourne une description XML de une ou plusieurs couches cartographiques. Pour l’exécuter:

    • pour les couches vecteur: pour avoir un retour valide, l’utilisateur doit initialiser la métadonnée wfs_onlineresource (ou ows_onlineresource) soit au niveau MAP soit au niveau LAYER (la métadonnée du niveau LAYER est celle utilisée si les deux sont renseignées) - pour les couches raster: la métadonnée est au niveau de wcs_onlineresource et suit la même logique que celle ci-dessus.

  3. GetLegendGraphic: retourne une image de légende (icône) pour la couche demandée, avec la(les) étiquette(s). Plus d’informations sur cette requête peut être trouvée dans la section GetLegendGraphic plus loin dans ce document.

En ce qui concerne MapServer précisément, c’est le programme CGI “mapserv” qui sait comment traiter les requêtes WMS. Ainsi, la mise en place d’un serveur WMS avec MapServer consiste à installer le programme CGI mapserv et à une mise en place d’un mapfile avec des métadonnées appropriées dedans. Cela est couvert dans le reste du document.

Configurer un serveur WMS avec MapServer

Installez le logiciel requis

Les requêtes WMS sont gérées par le programme CGI mapserv. Toutes les versions du programme mapserv n’incluent pas le support WMS (c’est inclut par défaut quand vous compilez ensemble avec la librairie PROJ), c’est pourquoi la première étape est de vérifier que votre exécutable mapserv inclut le support WMS. Une manière de vérifier cela est d’utiliser l’option “-v” en ligne de commande et de regarder la présence de “SUPPORTS=WMS_SERVER”

(Les utilisateurs Unix doivent se référer au document Compiler sous Unix pour les instructions relatives à la compilation, et les utilisateurs Windows préfèreront peut être utiliser MS4W, qui inclue automatiquement le support WMS/WFS)

Exemple 1. sous Unix

$ ./mapserv -v
MapServer version 6.3-dev OUTPUT=GIF OUTPUT=PNG OUTPUT=JPEG OUTPUT=KML
SUPPORTS=PROJ SUPPORTS=GD SUPPORTS=AGG SUPPORTS=FREETYPE SUPPORTS=CAIRO
SUPPORTS=ICONV SUPPORTS=FRIBIDI SUPPORTS=WMS_SERVER SUPPORTS=WMS_CLIENT
SUPPORTS=WFS_SERVER SUPPORTS=WFS_CLIENT SUPPORTS=WCS_SERVER
SUPPORTS=SOS_SERVER SUPPORTS=GEOS INPUT=JPEG INPUT=POSTGIS INPUT=OGR
INPUT=GDAL INPUT=SHAPEFILE

Exemple 2. sous Windows

C:\apache\cgi-bin> mapserv -v
MapServer version 6.3-dev OUTPUT=GIF OUTPUT=PNG OUTPUT=JPEG OUTPUT=KML
SUPPORTS=PROJ SUPPORTS=GD SUPPORTS=AGG SUPPORTS=FREETYPE SUPPORTS=CAIRO
SUPPORTS=ICONV SUPPORTS=FRIBIDI SUPPORTS=WMS_SERVER SUPPORTS=WMS_CLIENT
SUPPORTS=WFS_SERVER SUPPORTS=WFS_CLIENT SUPPORTS=WCS_SERVER
SUPPORTS=SOS_SERVER SUPPORTS=GEOS INPUT=JPEG INPUT=POSTGIS INPUT=OGR
INPUT=GDAL INPUT=SHAPEFILE

Configurer un Mapfile pour votre WMS

Each instance of WMS server that you setup needs to have its own mapfile. It is just a regular MapServer mapfile in which some parameters and some metadata entries are mandatory. Most of the metadata is required in order to produce a valid GetCapabilities output.

Voici ici la liste des paramètres et métadonnées qui sont généralement optionnels avec MapServer, mais qui sont nécessaires (ou particulièrement recommandés) pour une configuration WMS:

Au niveau du bloc MAP:

  • NAME dans l’objet Map

  • PROJECTION dans l’objet Map

  • METADATA dans l’objet Map (en fait dans l’objet WEB):

    • wms_title
    • wms_onlineresource
    • wms_srs (A moins que l’objet PROJECTION soit défini en utilisant “init=epsg:...”)

    • wms_enable_request

Et pour chaque LAYER:

  • NAME dans l’objet Layer

  • PROJECTION dans l’objet Layer

  • METADATA dans l’objet Layer

    • wms_title
    • wms_srs (optionnel à partir du moment où les couches LAYER héritent de la valeur du SRS de l’objet MAP)

  • STATUS de l’objet LAYER

    • Les couches LAYER ayant un STATUS DEFAULT seront toujours envoyées au client.

    • Les couches LAYER ayant un STATUS ON ou STATUS OFF peuvent être demandées par le client.

  • TEMPLATE de l’objet LAYER (requis pour les requêtes GetFeatureInfo - voir Templating)

Revoyons chacun de ces paramètres plus en détail

  • NAME de l’objet MAP et wms_title:

    WMS Capabilities requiert un tag Nom et Titre pour chaque couche. Le NAME de l’objet MAP et wms_title du bloc METADATA seront utilisés pour définir le nom et le titre de la couche racine dans la sortie XML de GetCapabilities. La couche racine dans le contexte WMS correspond à l’ensemble du mapfile.

  • NAME de l’objet MAP et métadonnée wms_title:

    Chaque couche individuelle nécessite son propre nom et titre. Les noms des couches sont aussi utilisé dans les requêtes GetMap et GetFeatureInfo pour référencer les couches qui doivent être incluses dans la sortie de carte et dans la requête. Les noms de couche doivent obligatoirement commencer avec une lettre quand on définit une couche WMS (les noms des couches ne doivent pas démarrer avec un chiffre ou avoir des espaces).

  • PROJECTION de l’objet MAP et métadonnée wms_srs:

    Les serveurs WMS doivent pouvoir renvoyer la projection dans laquelle ils sont capables de servir les données en utilisant les codes de projections EPSG (voir The EPSG web page pour plus d’informations sur les codes EPSG). Les versions récentes de la bibliothèque PROJ4 viennent avec une table d’initialisation de codes EPSG et permettent aux utilisateurs de définir une projection comme ceci:

    PROJECTION
       "init=epsg:4269"
    END
    

    (Note that “epsg” has to be in lowercase when used in the PROJ4 ‘init’ directive.)

    Si un bloc PROJECTION dans MAP est fournit dans le format “init=epsg:xxxx” alors MapServer utilisera aussi cette information pour générer un tag <BoundingBox> pour la couche de niveau supérieure dans le document Capabilities du WMS. BoundingBox est un élément obligatoire dans le retour Capabilities WMS pour le WMS 1.3.0 (pour le WMS 1.1.0, il est optionnel, mais c’est une bonne pratique de permettre à MapServer de l’inclure lorsque c’est possible).

    Ce qui précède suffit pour MapServer à reconnaître le code EPSG et à linclure dans les tags SRS dans la sortie “capabilities” (la métadonnée wms_srs n’est pas requise dans ce cas)? Cependant, il est souvent imposible de trouver un code EPSG qui corresponde à la projection de votre donnée. Dans ces cas, la métadonnée “wms_srs” est utilisée pour lister un ou plusieurs codes EPSG dans lesquelles la donnée peut être servie et l’objet PROJECTION contient la vraie définition PROJ4 de la la projection de la donnée.

    Voici un exemple de serveur dont dont la donnée est en projection Lambert Conforme Conique (42304). Sa sortie “capabilities” indiquera les projections EPSG:4269 et EPSG:4326 (lat/lon) mais l’objet PROJECTION est définie à la véritable projection dans laquelle la donnée est:

    NAME "DEMO"
    ...
    
    WEB
      ...
      METADATA
        "wms_title"           "WMS Demo Server"
        "wms_onlineresource"  "http://my.host.com/cgi-bin/mapserv?map=wms.map&"
        "wms_srs"             "EPSG:4269 EPSG:4326"
      END
    END
    
    PROJECTION
      "init=epsg:42304"
    END
    ...
    END
    

    En plus des projections EPSG:xxxx, un serveur WMS peut afficher des projections dans le namespace AUTO:xxxx. Les projections AUTO 42001 à 42005 sont supportées den interne par MapServer. Cependant, les projections AUTO sont utiles seulement avec les clients WMS les plus intelligents, comme le client a besoin de définir les paramètres de projection dans les requêtes WMS vers le serveur. Pour plus d’informations, voir l’annexe E de la WMS 1.1.1 specification et la section 6.5.5.2 du même document. Voir aussi la FAQ sur les projections AUTO à la fin de ce document.

  • PROJECTION de l’objet LAYER et métadonnée wms_srs:

    Par défaut, les couches héritent du SRS de leur couche parente (la PROJECTION du bloc MAP dans les cas de MapServer). Pour cette raison, il n’est pas nécessaire (mais quand même fortement recommandé) de fournir une PROJECTION et une métadonnée wms_srs pour chaque couche. Si une PROJECTION de couche n’est pas fournie alors c’est la projection du niveau supérieur MAP qui sera assumée.

    La PROJECTION de l’objet LAYER et la métadonnée wms_srs sont définis exactement de la même manière que la PROJECTION et la métadonnée wms_srs du bloc MAP.

    Pour les couches vecteur, si un bloc de PROJECTION est fournit dans le format “init=epsg:xxxx” alors MapServer utilisera aussi cette information pour générer un tag <BoundingBox> pour cette couche dans le document “capabilities” du WMS. BoundingBox est un élément obligatoire dans un “capabilities” WMS pour le WMS 1.3.0 (pour le WMS 1.1.0, c’est optionnel, mais c’est une bonne pratique de permettre à MapServer de l’inclure lorsque c’est possible).

  • Métadonnée “wms_onlineresource”:

    La métadonnée wms_onlineresource metadata est définie dans l’objet METADATA de l’objet WEB dans le block MAP et spécifie l’URL qui devrait être utilisée pour accéder à votre serveur. Cela est requis pour la sortie “GetCapabilities”. Si wms_onlineresource n’est pas fourni alors MapServer essayera d’en fournir un par défaut en utilisant le nom du script et de l’hôte, mais vous ne devriez pas trop compter sur comportement. Il est fortement recommandé que vous fournissiez la métadonnée wms_onlineresource.

    Voir la section 6.2.2 de la WMS 1.1.1 specification pour avoir l’ensemble de l’histoire à propos de l’URL “Online Resource”. Basiquement, ce que vous avez besoin est une URL HTTP complète incluant le préfixe http:// , le nom d’hôte, le nom du script, potentiellement un paramètre “map=”, et terminé par ”?” ou “&”.

    Voici ici une URL “Online Resource” valide:

    http://my.host.com/cgi-bin/mapserv?map=mywms.map&
    

    En créant un script d’encapsulation, il est possible de cacher le paramètre “map=” depuis l’URL et ainsi, votre URL “Online Resource” pourra être du type suivant:

    http://my.host.com/cgi-bin/mywms?
    

    Ceci est couvert plus en détails dans la section “En savoir plus sur l’URL Online Resource” ci-dessous.

  • Métadonnée “wms_enable_request”:

    Spécifie quelles requêtes permettre. Si ce n’est pas spécifié, aucun requête ne sera permise! Voir les explications ci-dessous.

  • Configurer les requêtes GetFeatureInfo:

    Vous devez définir le paramètre TEMPLATE du bloc LAYER pour que la couche soit interrogeable par des requêtes GetFeatureInfo (voir Templating). Pour des requêtes de type “text/html”, vous devriez aussi définir les paramètres HEADER et FOOTER de la couche.

    Depuis MapServer 4.6, vous devez obligatoirement définir la métadonnée gml_* pour les attributs de la couche qui doivent être renvoyés (voir l’objet METADATA du bloc LAYER dans la section de référence plus loin dans ce document). Pour inclure les géométries, gml_geometries et gml_[nom_de_la_géométrie]_type doivent être spécifié.

    Voici quelques examples qui fonctionnent de requêtes GetFeatureInfo: text/plain / text/html / gml (pour gml, votre navigateur risque de vous demander de sauver le fichier, si, c’est le cas, sauvez-le localement comme fichier .gml et regardez-le avec un éditeur de texte)

Tester votre serveur WMS

Valider les métadonnées des “Capabilities”

Ok, maintenant que nous avons un mapfile, nous devons vérifier les “capabilities ” du XML retourné par notre serveur en nous assurant que rien ne manque.

En utilisant un navigateur web, accédez à votre URL “Online Resource” auxquel vous vous ajouterez les paramètres “SERVICE=WMS&VERSION=1.1.1&REQUEST=GetCapabilities” à la fin, c’est à dire.

http://my.host.com/cgi-bin/mapserv?map=mywms.map&SERVICE=WMS&VERSION=1.1.1
                                                &REQUEST=GetCapabilities

Voici une requête GetCapabilities qui fonctionne (notez que le paramètre SERVICE est requis pour toutes les requêtes GetCapabilities):

http://demo.mapserver.org/cgi-bin/wms?SERVICE=WMS&VERSION=1.1.1&REQUEST=GetCapabilities

Cela devrait retourner un document de type MIME application/vnd.ogc.wms_xml, aisni, votre navigateur is susceptible de vous demander de sauver ce fichier. Sauvez-le et ouvrez-le dans un éditeur de texte (Emacs, Notepad, etc.), et vous pourrez voir le XML retourné depuis le serveur WMS.

Si vous avez un message d’erreur dans la sortie XML alors prenez les actions en conséquence pour corriger. Les problèmes et solutions communs sont listé dans la FAQ à la fin de ce document.

Si tout c’est bien passé, vous devriez avoir un document XML complet des “capabilities”. Cherchez dedans le mot “WARNING”... MapServer insère des commentaires XML qui commence avec “<!–WARNING: ” dans la sortie XML s’il détecte éléments de paramètres ou de métadonnées manquants dans le mapfile. Si vous voyez des avertissements de ce type dans votre sortie XML alors vous allez avoir à les corriger toutes avant d’appeler votre serveur avec un client WMS, sinon, les choses risquent fortement de ne pas marcher.

Notez que que quand une requête est lancée, elle est passée via WMS, WFS et WCS dans MapServer (dans cet ordre) jusqu’à ce qu’un des services lui réponde.

Tester avec une requête GetMap

OK, maintenant que nous savons que notre serveur peut produire une réponse GetCapabilities XML valide, nous devrions tester une requête GetMap. MapServer vérifie seulement vérifie seulement quelques-uns des paramètres GetMap requis, ainsi à la fois les paramètres MapServer minimum et une requête GetMap valide seront expliqués ci-dessous.

Ce qui suit est la liste des paramètres GetMap requis selon la spécification WMS:

VERSION=version: Version pour la requête

REQUEST=GetMap: Nom de la requête

LAYERS=liste_de_couches: Liste séparée par des virgules de une ou plusieurs couches de carte. Optionnelle si le paramètre SLD est présent.

STYLES=liste_du_style: Liste séparée par des virgules d’un style rendu par couche interrogée. Optionnelle si le paramètre SLD est présent. Définir “STYLES=” avec une valeur vide pour utiliser le(s) style(s) par défaut. Les styles nommés sont aussi supportés et sont controlés par noms de GROUP de CLASS dans le mapfile.

SRS=namespace:identifiant: Système de référence spatial.

BBOX=minx,miny,maxx,maxy: Coins du rectangle englobant (bas gauche, haut droite) dans l’unité du SRS.

WIDTH=largeur_de_sortie: Largeur en pixels d’une image de carte.

HEIGHT=hauteur_de_sortie: Hauteur en pixels de l’image de carte.

FORMAT=format_de_sortie: Format de sortie de la carte.

Note

Les serveurs WMS affichent les formats supportés qui sont présents dans les bibliothèques gd / gdal.

Un exemple valide serait donc:

http://my.host.com/cgi-bin/mapserv?map=mywms.map&SERVICE=WMS&VERSION=1.1.1
     &REQUEST=GetMap&LAYERS=prov_bound&STYLES=&SRS=EPSG:4326
     &BBOX=-173.537,35.8775,-11.9603,83.8009&WIDTH=400&HEIGHT=300
     &FORMAT=image/png

Voici une valid request qui fonctionne.

Testez avec un client réel

Si vous avez accès à un client WMS, alors enregistrez votre nouvelle “Online Resource” du serveur avec et vous devriez être bon pour que ça marche.

Si vous n’avez pas votre client WMS déjà installé, voici quelques pointeurs:

  • MapServer lui-même peut être utilisé comme client WMS, voir le guide du client WMS MapServer.

  • QGIS is a full GIS package which includes WMS client support. (recommended)
  • OpenJUMP est un logiciel SIG bureautique qui inclut le support du client WMS.

  • uDig est un logiciel SIG bureautique qui permet aux utilisateurs d’ajouter des couches WMS.

  • Deegree fournit un client WMS.

Cette liste n’est pas exhaustive, il y a de nombreux logiciels Open Source ou propriétaire qui offre le support WMS et qui peuvent être utilisé pour interagir avec votre nouvelle instance serveur WMS MapServer.

Requête GetLegendGraphic

Cette requête retourne une image de légende (icône) pour la couche spécifiée. La requête dessinera une icône et une étiquette pour toutes les classes définies sur la couche. Si le nom de la couche demandée est un NAME de GROUP, toutes les couches incluses seront retournées dans l’icône de légende.

Prérequis

The following are required in the WMS server mapfile to enable this GetLegendGraphic request:

  • un objet LEGEND.

  • un objet CLASS pour chaque couche.

  • un NAME dans l’objet CLASS.

  • le STATUS de chaque LAYER doit être mis à ON.

Paramètres

The following are valid parameters for this GetLegendGraphic request:

  • LAYER - (Requis) Nom de la couche WMS à retourner à l’image de légende. Notez que c’est le paramètre <Name> de <Layer> dans le “GetCapabilities”.

  • FORMAT - (Requis) Format de l’mage de légende (c’est à dire “image/png”).

  • WIDTH - (Optionnelle) Largeur de l’image de légende. Notez que le paramètre “Width” est seulement utilisé quand le paramètre “Rule” est aussi utilisé dans la requête.

  • HEIGHT - (Optionnelle) Hauteur de l’image de légende. Notez que le paramètre “Height” est seulement utilisé quand le paramètre “Rule” est aussi utilisé dans la requête.

  • SLD - (Optional) The URL to the SLD. Applies the SLD on the layer and the legend is drawn after the SLD is applied (using the classes specified by the SLD). Note here that you need to put a <Name>class1</Name> inside the Rule element so that a class name is created from the SLD and therefore a correct legend image.
  • SLD_BODY - (Optionnel) Le contenu (code) d SLD, à la place de la spécification d’une URL (comme dans le paramètre ‘SLD’).

  • SLD_VERSION - (Optionnel) La version du SLD.

  • SCALE - (Optionnelle) Spécifie l’échelle ainsi seules les couches qui tombent dans cette échelle auront une légende.

  • STYLE - (Optionnel) Le style.

  • RULE - (Optionnelle) Spécifie le nom de la CLASS pour lequel générer une image de légende (au contraire de générer une icône et une étiquette pour toutes les classes de la couches).

Note

Toutes les règles sont utilisées pour dessiner la légende dans le mode CGI normal qui s’applique ici. Voir le document de référence CGI si nécessaire.

Le paramètre KEYIMAGE de l’objet CLASS peut aussi être utilisé pour spécifier l’image de légende pour une CLASS. Voir document de référence MapFile si nécessaire. Requête exemple

Un exemple de requête pourrait ressembler à ceci:

http://127.0.0.1/cgi-bin/mapserv.exe?SERVICE=WMS&VERSION=1.1.1&layer=park&
REQUEST=getlegendgraphic&FORMAT=image/png

Content Dependent Legends

Support for content dependent legends is supported (since the MapServer 6.4 release) for WMS GetLegendGraphic calls on POINT, LINE and POLYGON layers, when the client includes the (non-standard) BBOX, SRS/CRS and WIDTH/HEIGHT parameters in the request URL (such as a GetMap request). If these parameters are not present, the normal legend rendering will occur. For more information, please see MS RFC 101: Add Support for Content Dependent Legend Responses.

Changer l’URL “Online Resource”

Comme mentionné dans la section “Configurer un Mapfile / métadonnée wms_onlineresource” ci-dessus, l’URL “Online Resource” suivante est parfaitement valide pour un WMS MapServer selon la section 6.2.2 ou la spécification WMS 1.1.1:

http://my.host.com/cgi-bin/mapserv?map=mywms.map&

Cependant, certains personnes feront remarquer que l’URL ci-dessus contient des paramètres obligatoires spécifiques à MapServer et que c’est illégal. Premièrement, nous voulons pointer que “map=...” n’est pas considéré comme un paramètre spécifique à MapServer dans ce cas comme c’est une partie de l’URL “Online Resource” qui est définit comme une chaîne opaque terminée par ”?” ou “&” (Voir la WMS 1.1.1 section 6.2.2).

Mais quelque soit le cas, même si elle est valide, l’URL ci-dessus est toujours laide. Et vous voudriez peut utiliser une URL plus jolie pour votre URL “Online Resource” WMS. Voici quelques suggestions.

Règles de réécritures Apache (utilisant mod_rewrite Apache)

L’un peut utiliser mod_rewrite de Apache pour éviter de spécifier la “map”, ou un autre paramètre par défaut dans l’URL de MapServer. Cette tâche consiste en trois étapes, en spécifiant que le module mod_rewrite soit chargé, en activant le module mod_rewrite pour les répertoires sélectionnés et enfin en écrivant un fichier .htaccess pour effectuer la réécriture d’URL.

Dans le fichier httpd.conf, le module mod_rewrite est par défaut désactivé. Pour l’activer, enlevez le # du début dans la ligne

#LoadModule rewrite_module modules/mod_rewrite.so

Pour être capable d’utiliser le module, il doit être activé, en utilisant la directive AllowOverride. Cela peut fait par serveur ou par répertoire. Si vous avez juste un seul serveur, ajoutez une ligne “AllowOverride All” dans le fichier httpd.conf (voir la documentation Apache pour être sûr des implications de sécurité de cette manipulation). Le fonctionnement par répertoire est la manière la plus facile de le faire fonctionner dans des hôtes virtuels. A l’intérieur de la section <virtualHost> de httpd.conf, insérez:

<Directory myhtdocsdir>
  AllowOverride All
</Directory>

Où myhtdocsdir est le répertoire définit comme “documentroot” pour le serveur virtuel actuel.

Quand les directives sont définies pour charger et permettre le fonctionnement du module mod_rewrite module, Apache doit être redémarré.

Dans un répertoire accessible au web, créez un fichier .htaccess comme suivant:

RewriteEngine on
RewriteRule wmsmap?(.*) /cgi-bin/mapserv?map=/home/www/mapserverstuff/mymapfile.map&$1

La règle de ré-écriture dit: étant donné qu’une page web commençant avec wmsmap, récupérez les paramètres d’interrogation, faites une requête de nouvelle page commençant avec /cgi-bin/mapserv?map=(…)? et ajoutez tous les paramètres d’interrogation venant de la requête dans la page originale.

c’est à dire, l’URL wmsmap?mode=map sera réécrite comme

::

/cgi-bin/mapserv?map=/home/www/trucmapserver/monmapfile.map&mode=map

Si juste une URL wmsmap est donnée (sans aucun paramètre), une page non trouvée sera affichée comme elle ne correspond pas à l’expression wmsmap?.

Variables d’environnement Apache - MS_MAPFILE

Un mapfile par défaut peut être spécifié en utilisant la variable d’environnement MS_MAPFILE:

Alias /mywms /usr/lib/cgi-bin/mapserver
<Location /mywms>
   SetHandler cgi-script
   Options ExecCGI
   SetEnv MS_MAPFILE /path/to/mymapfile.map
</Location>

SetEnvIf Apache

Une autre option est d’utiliser la fonctionnalité “setenvif” de Apache: utilisez des liens symboliques qui pointent tous vers le même binaire mapserv, et pour chacun des liens symboliques, testez l’URL, et définissez un environment MAP en fonction.

Pour les utilisateurs de Windows et Apache, les étapes sont comme suivantes (cela requiert Apache 1.3 ou plus récent):

  • Copiez mapserv.exe avec un nouveau nom pour votre WMS, comme “mywms.exe”.

  • Dans httpd.conf, ajouter:

SetEnvIf Request_URI "/cgi-bin/mywms" MS_MAPFILE=/path/to/mymap.map

Script ASP (IIS - Microsoft Windows)

Sur les serveurs IIS (Windows), vous pouvez utiliser le script ASP suivant:

Note

Le script ci-dessous, bien que fonctionnel, est seulement destiné à être un exemple d’usage d’ASP pour filtrer les requêtes MapServer. Utiliser ASP dans un serveur WMS de production devra sûrement requérir du code ASP supplémentaire en particulier dans la gestion des erreurs et la configuration des timeouts.*

<%
  Server.ScriptTimeout = 360

  Select Case Request.ServerVariables("REQUEST_METHOD")
    Case "GET"  strRequest = Request.QueryString
    Case "POST" strRequest = Request.Form
  End Select

  strURL = "http://myserver/cgi-bin/mapserv.exe?
            map=C:\Inetpub\wwwroot\workshop\itasca.map&" & strRequest

  Dim objHTTP
  Set objHTTP = Server.CreateObject("MSXML2.ServerXMLHTTP")
  objHTTP.open "GET", strURL, false
  objHTTP.send ""

  Response.ContentType = objHTTP.getResponseHeader("content-type")
  Response.BinaryWrite objHTTP.responseBody

  Set objHTTP = Nothing
%>

Wrapper Mapscript

Quelques services OGC (WFS, SOS) supportent à la fois des requêtes GET et POST. Ici, vous pouvez utiliser un wrapper WxS MapScript minimal. Voici un exemple Python:

#!/usr/bin/python

import mapscript

req = mapscript.OWSRequest()
req.loadParams()
map = mapscript.mapObj('/path/to/config.map')
map.OWSDispatch(req)

Script wrapper (Unix)

Sur les serveur Unix, vous pouvez configurer un script wrapper shell qui définit la variable d’environnement MS_MAPFILE et ensuite qui passe le contrôle à l’exécutable mapserv... qui résulte en une URL “OnlineResource” plus propre:

#! /bin/sh
MS_MAPFILE=/path/to/demo.map
export MS_MAPFILE
/path/to/mapserv

Note

Utiliser un script wrapper /bin/sh cause une surcharge sur les ressources système comme deux process doivent être servis plutôt qu’un, et que cela n’est pas recommandé.

Support WMS 1.3.0

MapServer 5.4 ajoute le support pour le WMS 1.3.0. Bien que le mécanisme général dans MapServer pour supporter cette nouvelle spécification soit le même, il y a des mises à jour notables.

Systèmes de coordonnées et orientation des axes

Les changements les plus notables introduit dans le WMS 1.3 sont:

  • les changements d’axes

  • l’introduction de nouveaux systèmes de coordonnées

  • l’utilisation du paramètre CRS (à la place de SRS)

L’ordre des axes dans les versions précédentes des spécifications WMS était de toujours utiliser l’abscisse (x ou lon ) et l’ordonnée (y ou lat). Le WMS 1.3.0 spécifie qu’en fonction d’un CRS particulier, l’axe x pourra ou non être orienté Ouest-Est, et que l’axe y pourra ou non être orienté Sud-Nord. L’opération de représentation WMS doit s’appliquer pour l’ordre des axes. Cela affecte certains des codes EPSG qui était couramment utilisé comme EPSG:4326. MapServer 5.x s’assure que les coordonnées passées au serveur (comme un partie du paramètre BBOX de GetMap) ainsi celles qui sont renvoyées dans le document des “capabilities” reflète l’inversion des ordres des axes pour les codes EPSG entre 4000 et 5000.

MapServer 6.0 et supérieur contient une liste des codes epsg ayant un ordre des axes inversés. Il est actuellement basé sur la base de données EPSG version 7.6. Il est aussi possible de définir l’ordre des axes à la compilation pour un code EPSG spécifique (voir #3582). Cela permet par exemple d’utiliser l’ordre “normal” des axes pour certains des codes EPSG entre 4000 and 5000.

En plus, le WMS 1.3.0 définit une série de nouveaux systèmes de coordonnées. Voici ceux qui, pour le moment, sont supportés dans MapServer:

  • CRS:84 (longitude-latitude WGS 84)

  • CRS:83 (longitude-latitude NAD83)

  • CRS:27 (longitude-latitude NAD27)

  • AUTO2:42001 (WGS 84 / Auto UTM )
  • AUTO2:42002 (WGS 84 / Auto Tr. Mercator)
  • AUTO2:42003 (WGS 84 / Auto Orthographic)
  • AUTO2:42004 (WGS 84 / Auto Equirectangular)
  • AUTO2:42005 (WGS 84 / Auto Mollweide)

Exemples de requêtes

Les utilisateurs peuvent utiliser le système de coordonnées CRS:84 et demander les coordonnées de la BBOX comme long/lat:

Les utilisateurs peuvent aussi utiliser les cooordonnées EPSG:4326 et demander l’ordre des axes avec lat/long

Autres changements notables

  • les valeurs valides pour le paramètre EXCEPTIONS dans une requête GetMap sont XML, INIMAGE, BLANK

  • la valeur valide pour le paramètre EXCEPTIONS dans une requête GetFeatureInfo est XML

  • Le paramètre “LayerLimit” est introduit, permettant à un serveur d’afficher et limiter le nombre de couches qu’un client est autorisé à appelé dans une requête GetMap

Quelque fonctionnalités manquantes

  • Une requête Post WMS 1.3.0 doit être un document XML contenant les différentes opérations et les différents paramètres.

  • Les documents SLD contenant des éléments provenant de la spécification Feature Encoding 1.1 peuvent potentiellement utiliser des projections ESPG avec quelques filtres. Il n’est pas encore bien claire ni même implémenté si l’ordre des axes doit être pris en compte dans ces cas spécifiques.

Tests de conformité OGC

A partir de la version 5.4, MapServer passe tous les tests basiques et d’interrogation de la suite de test OGC CITE pour le WMS 1.3.0.

Section de référence

Les métadonnées suivantes sont disponibles dans la configuration du mapfile

(Notez que chacune des métadonnées ci-dessous peut aussi être renseignée comme ‘ows_*’ au lieu de ‘wms_*’. MapServer essaye la métadonnée ‘wms_*’ en premier, et s’il ne la trouve pas, essaye le nom ‘ows_*’ correspondant. Utiliser ce foctionnement permet de réduire la quantité de duplication dans les mapfiles qui supporte des interfaces OGC multiples comme les métadonnées “ows_*” peuvent être utilisées partout pour les objets métadonnées communs, partagés par les interfaces OGC multiples.)

Objet Metadata de l’objet Web

ows_allowed_ip_list (or wms_allowed_ip_list)

  • Description: (Optional) A list of IP addresses that will be allowed access to the service.

    Example:

    METADATA
      "ows_allowed_ip_list" "123.45.67.89 11.22.33.44"
    END
    

ows_denied_ip_list (or wms_denied_ip_list)

  • Description: (Optional) A list of IP addresses that will be denied access to the service.

    Example:

    METADATA
      "ows_denied_ip_list" "123.45.67.89 11.22.33.44"
    END
    

ows_http_max_age

  • Description: (Optionnelle) Un entier (en seconds) pour spécifier combien de temps une réponse de carte doit être considérée comme nouvelle. Définir cette directive permet aux clients WMS avertis d’utiliser la valeur de l’en-tête HTTP résultant comme moyen d’optimiser (et diminuer) les requêtes au serveur WMS. Plus d’informations sont disponibles sur http://www.mnot.net/cache_docs/#CACHE-CONTROL

ows_schemas_location

  • Description: (Optional) (Note the name ows_schemas_location and not wms_... this is because all OGC Web Services (OWS) use the same metadata) Root of the web tree where the family of OGC WMS XMLSchema files are located. This must be a valid URL where the actual .xsd files are located if you want your WMS output to validate in a validating XML parser. Default is http://schemas.opengis.net.

ows_sld_enabled

  • Description: (Optionnelle) Une valeur (true ou false) qui, quand elle est définie à “false”, ignorera les paramètres SLD et SLD_BODY afin de désactiver le stylage distant des couches WMS. Aussi, SLD n’est pas affiché dans les “Capabilities” WMS par conséquent

ows_updatesequence

  • Description: (Optionnelle) Le paramètre updateSequence peut être utilisé pour maintenir la consistance dun cache client des contenus étant dans un document de service de métadonnée. La valeur du paramètre peut être un entier, un timestamp en format [ISO 8601:2000], ou n’importe quel autre nombre ou chaîne de caractères.

wms_abstract

  • Nom du TAG WMS: Abstract (WMS1.1.1, sect. 7.1.4.2)

  • Description: (Optionnelle) Un texte de présentation fournissant plus d’informations sur le serveur WMS

wms_accessconstraints

  • Nom du TAG WMS: AccessConstraints (WMS1.1.1, sect. 7.1.4.2)

  • Description: (Optionnelle) Informations de contraintes d’accès . Utilise le mot-clé réservé “none” si il n’y a pas de contraintes d’accès définies.

wms_addresstype, wms_address, wms_city, wms_stateorprovince, wms_postcode, wms_country

  • Nom du TAG WMS: ContactAddress et family (WMS1.1.1, sect. 7.1.4.2)

  • Description : Information d’adresse de contact, optionnelle. Si fournie, alors les six éléments de métadonnées sont requis.

wms_attribution_logourl_format

  • Description: (Optionnelle) Le type MIME de l’image du logo (par exemple “image/png”).. Notez que les autres métadonnées wms_attribution_logourl_* doivent être spécifiées.

  • Se réfèrer à la section 7.1.4.5.11 de la spécification WMS 1.1.1.

wms_attribution_logourl_height

  • Description: (Optionnelle) Hauteur de l’image du logo en pixels. Notez que les autres métadonnées wms_attribution_logourl_* doivent être spécifiées.

  • Se réfèrer à la section 7.1.4.5.11 de la spécification WMS 1.1.1.

wms_attribution_logourl_href

  • Description: (Optionnelle) URL de l’image du logo. Notez que les autres métadonnées wms_attribution_logourl_* doivent être spécifiées.

  • Se réfèrer à la section 7.1.4.5.11 de la spécification WMS 1.1.1.

wms_attribution_logourl_width

  • Description: (Optionnelle) Largeur de l’image du logo en pixels. Notez que les autres métadonnées wms_attribution_logourl_* doivent être spécifiées.

  • Se réfèrer à la section 7.1.4.5.11 de la spécification WMS 1.1.1.

wms_attribution_onlineresource

  • Description: (Optional) l’URL du fournisseur de données.

  • Se réfèrer à la section 7.1.4.5.11 de la spécification WMS 1.1.1.

wms_attribution_title

  • Description: (Optional) Human-readable string naming the data
    provider.
  • Se réfèrer à la section 7.1.4.5.11 de la spécification WMS 1.1.1.

wms_bbox_extended:

  • Description: (Optionnelle) “true” ou “false”. Si “true”, les rectangles englobants sont renvoyés pour tous les SRS / CRS supportés du document de “capabilities” . Si “false”, seul le rectangle englobant du premier SRS / CRS est retourné.

  • Introduit en version 6.0.

wms_contactelectronicmailaddress

  • WMS TAG Name: ContactElectronicMailAddress (WMS1.1.1,
    sect. 7.1.4.2)
  • Description : Adresse mail de contact, optionnelle.

wms_contactfacsimiletelephone

  • Nom du TAG WMS: ContactFacsimileTelephone (WMS1.1.1, sect. 7.1.4.2)

  • Description : Numéro de téléphone du fax du contact, optionnel.

wms_contactperson, wms_contactorganization, wms_contactposition

  • Nom du TAG WMS: ContactInformation, ContactPerson, ContactOrganization, ContactPosition (WMS1.1.1, sect. 7.1.4.2)

  • Description : Information de contact, optionnelle. Si définie, alors les trois éléments de métadonnées sont requis.

wms_contactvoicetelephone

  • Nom du TAG WMS: ContactVoiceTelephone (WMS1.1.1, sect. 7.1.4.2)

  • Description : Numéro de téléphone pour contact audio, optionnel.

wms_enable_request (ou ows_enable_request)

  • Description: Liste séparée par des espaces des requêtes à activer. Par défaut, la valeur est “none”. Les requêtes suivantes peuvent être activées: GetCapabilities, GetMap, GetFeatureInfo et GetLegendGraphic. Un ”!” juste avant le nom de la requête désactivera la requête. “*” permet d’avoit toutes les requêtes activées.

  • Exemples :

    Pour permettre d’utiliser seulement GetMap et GetFeatureInfo:

    "wms_enable_request" "GetMap GetFeatureInfo"
    

    Pour permettre toutes les requêtes sauf GetFeatureInfo

    "wms_enable_request" "* !GetFeatureInfo"
    

wms_encoding

  • Nom du TAG WMS: Encoding

  • Description: Type de l’encodage des “capabilities” optionnel. Celui par défaut est ISO-8859-1.

wms_feature_info_mime_type

  • Nom du TAG WMS: Feature_info_mime_type

  • Description:

    • Utilisé pour spécifier un type MIME supplémentaire qui peut être utilisé quand le serveur répond à la requête GetFeature.

      Par exemple si vous voulez utiliser le template HTML de la couche comme une base pour votre réponse, voius devez ajouter “WMS_FEATURE_INFO_MIME_TYPE” “text/html”. Faire cette configuration aura pour effet d’indiquer text/html comme l’un des types MIME supporté pour une requête GetFeature. Vous devez aussi vous assurer que la couche pointe vers un template html valide (voir Templating). Le client peut alors appeler le serveur avec INFO_FORMAT=text/html.

    • Si non spécifié, MapServer par défaut a text/plain et GML implémentés.

wms_fees

  • Nom du TAG WMS: Fees (WMS1.1.1, sect. 7.1.4.2)

  • Description: (Optionnelle) Informations de frais. Utiliser le mot clé réservé “none” s’il n’y a pas de frais.

wms_getcapabilities_version

  • Description: (Optionnelle) Version par défaut à utiliser pour les requêtes GetCapabilities qui n’ont pas de paramètre de version. Si il est non défini, la version la plus récente supportée sera retournée.

wms_getlegendgraphic_formatlist

  • Description: (Optionnelle) Une liste séparée par des virgules de formats valides pour une requête GetLegendGraphic WMS

wms_getmap_formatlist

  • Description: (Optionnelle) Une liste séparée par des virgules de formats valides pour une requête GetMap WMS

wms_keywordlist

  • Nom du TAG WMS: KeywordList (WMS1.1.1, sect. 7.1.4.2)

  • Description: (Optionnelle) Une liste séparée par des virgules des mots clés ou phrases clés pour aider la recherche du catalogue. A partir du WMS 1.1.0, aucun vocabulaire controllé n’a été défini.

wms_keywordlist_vocabulary

  • Nom de l’attribut WMS: vocabulaire de KeywordList -> Keyword

  • Description: (Optionnelle) Nom du vocabulaire utilisé dans wms_keywordlist_[nom_du_vocabulaire]_items comme décrit ci-dessous.

wms_keywordlist_[nom_du_vocabulaire]_items

  • Nom du TAG WMS: KeywordList -> Keyword

  • Description: (Optionnelle) Une liste séparée par des virgules des mots clés ou phrases clés pour aider la recherche du catalogue pour un vocabulaire donné.

wms_languages

wms_layerlimit

  • Nom du TAG WMS: LayerLimit (WMS1.3.0, sect. 7.2.4.3)

  • Description: (Optionnelle) Le nombre maximum de couches qu’un client WMS peut spécifier dans une requête GetMap. Si non défini, alors pas de limites n’est imposée.

wms_onlineresource

  • Nom du TAG WMS: OnlineResource (WMS1.1.1, sect. 6.2.2)

  • Description: (Recommandé) L’URL qui sera utilisée pour accéder au serveur WMS. Cette valeur est utilisée dans la réponse “GetCapabilities”.

    Voir aussi

    Sections “Setup a Mapfile / wms_onlineresource metadata” and “More About the Online Resource URL” above.

wms_remote_sld_max_bytes

  • Description: (Optional) Maximum size in bytes authorized when fetching a remote SLD through http. Defaults to 1 MegaByte (1048596).

wms_resx, wms_resy

  • Nom du TAG WMS: BoundingBox (WMS1.1.1, sect. 6.5.6)

  • Description: (Optionnelle) Uitlisée dans le tag BoundingBox pour fournir des informations sur la résolution spatiale de la donnée, les valeurs sont dans l’unité de la projection de la carte.

wms_rootlayer_abstract

  • Nom du TAG WMS: Abstract (WMS1.1.1, sect. 7.1.4.2)

  • Description: (Optionnelle) Identique à wms_abstract, appliqué à l’élément racine de la couche. S’il n’est pas défini, alors wms_abstract sera utilisé.

wms_rootlayer_keywordlist

  • Nom du TAG WMS: KeywordList (WMS1.1.1, sect. 7.1.4.2)

  • Description: (Optionnelle) Identique à wms_keywordlist, appliqué à l’élément racine de la couche. S’il n’est pas défini, alors wms_keywordlist sera utilisé.

wms_rootlayer_title

  • Nom du TAG WMS: Title (WMS1.1.1, sect. 7.1.4.1)

  • Description: (Optionnelle) Identique à wms_title, appliqué à l’élément racine de la couche. S’il n’est pas défini, alors wms_title sera utilisé.

wms_service_onlineresource

  • Description: (Optionnelle) URL onlineresource de premier niveau. MapServer utilise la métadonnée onlineresource (si fournie) dans l’ordre suivant:

    1. wms_service_onlineresource
    2. ows_service_onlineresource

    3. wms_onlineresource (or automatically generated URL, see the onlineresource section of this document)

wms_srs

  • Nom du TAG WMS: SRS (WMS1.1.1, sect. 6.5.5)

  • Description: (Recommandé) Contient une liste des codes de projection EPSG qui doivent être indiquer comme disponibles pour toutes les couches dans le serveur. La valeur peut contenir une ou plusieurs paires d’EPSG:<code> séparés par des espaces (par exemple “EPSG:4269 EPSG:4326”) Cette valeur devrait être mise en majuscule (EPSG:42304.....et non epsg:42304) pour éviter les problèmes liés aux plates-formes sensibles à la casse.

  • Voir aussi la section “Configurer votre Mapfile / PROJECTION de l’objet MAP et métadonnée wms_srs” ci-dessus.

wms_timeformat

  • Description: Le format de temps à utiliser quand une requête est envoyée. (par exemple “wms_timeformat” “%Y-%m-%d %H, %Y-%m-%d %H:%M”). Merci de voir le guide du support WMS Time pour plus d’informations.

wms_title

  • Nom du TAG WMS: Title (WMS1.1.1, sect. 7.1.4.1)

  • Description: (Requise) Un nom lisible par les hommes pour cette couche.

Objet Metadata de l’objet Layer

gml_exclude_items

  • Description: (Optionnelle, s’applique seulement aux requête GML GetFeatureInfo) Une liste séparée par des virgules d’éléments à exclure. Depuis MapServer 4.6, vous pouvez contrôler combien d’attributs (champs) vous exposez pour votre couche de données, avec cette métadonnée. Le comportement antérieur était simplement d’exposer tous les attributs dans tous les cas. Un exemple excluant un champ spécifique pourrait être:

    "gml_include_items" "all"
    "gml_exclude_items" "Phonenum"
    

gml_geometries

  • Description: (Optionnelle, s’applique seulement aux requête GML GetFeatureInfo) Fournit un nom pour les éléments de géométrie. La valeur est spécifiée comme une chaîne à utiliser pour les noms de l’élement de géométrie. Par défaut, les géométries GML ne sont pas écrites dans la sortie GetFeatureInfo GML, à moins que gml_geometries et gml_[nom_de_la_géométrie]_type ne soient tous les deux définis. Par défaut, seul le rectangle englobant est écrit. Si gml_geometries est défini à “none”, ni le rectangel englobant ni la géométrie ne sont écrits.

gml_groups

  • Description: (Optionnelle, s’applique seulement aux requête GML GetFeatureInfo) Une liste séparée par des virgules de noms de groupes pour cette couche.

gml_[nom_du_groupe]_group

  • Description: (Optionnelle, s’applique seulement aux requête GML GetFeatureInfo) Une liste séparée par des virgules d’attributs dans le groupe. Voici un exemple:

    "gml_include_items" "all"
    "gml_groups"        "display"
    "gml_display_group" "Name_e,Name_f"
    

gml_include_items

  • Description: (Optionnelle, s’applique seulement aux requête GML GetFeatureInfo) Une liste séparée par des virgules d’éléments à inclure, ou le mot-clé “all”. Depuis MapServer 4.6, vous pouvez contrôler combien d’attributs (champs) vous exposez pour votre couche de données, avec cette métadonnée. Le comportement antérieur était simplement d’exposer tous les attributs dans tous les cas. Vous pouvez permettre une exposition complète des champs en utilisant le mot-clé “all”, comme ceci:

    "gml_include_items" "all"
    

    Vous pouvez spécifier une liste d’attributs (champs) pour une exposition partielle, comme suivant :

    "gml_include_items" "Name,ID"
    

    Le nouveau comportement par défaut est ne pas exposer d’attributs du tout.

gml_[nom de l’élément]_alias

  • Description: (Optionnelle, s’applique seulement aux requête GML GetFeatureInfo) Un alias pour un nom d’attributs. Le GML servi se réfèrera à cet attribut par son alias. Voici un example:

    "gml_province_alias" "prov"
    

gml_[nom de l’élément]_type

  • Description: (Optional) Specifies the type of the attribute. Valid values are the OGR data types: Integer|Long|Real|Character|Date|Boolean. MapServer translates these to valid GML data types. Note: Long is to be used for 64-bit integers, starting with MapServer 7.0.1.

gml_[nom_de_la_géométrie]_type

  • Description: (Optionnelle, s’applique seulement aux requête GML GetFeatureInfo) Quand gml_geometries est employé, il est aussi nécessaire de spécifier le type de géométrie de la couche. Cela peut être réalisé en fournissant une valeur pour gml_[nom_de_la_géométrie]_type, où [nom_de_la_géométrie] est une valeur de chaîne spécifiée pour gml_geometries, et une valeur qui est parmi celles-ci:

    • point
    • multipoint
    • line
    • multiline
    • polygon
    • multipolygon

gml_xml_items

  • Description: (Optionnelle, s’applique seulement aux requête GML GetFeatureInfo). Une liste séparée par des virgules de champs à qui ne doivent pas être en XML encodé.

ows_allowed_ip_list
Same as ows_allowed_ip_list in the Web Object.
ows_denied_ip_list
Same as ows_denied_ip_list in the Web Object.
wms_abstract

Identique à wms_abstract dans l’objet WEB.

wms_attribution_logourl_format

  • Description: (Optionnelle) Le type MIME de l’image du logo (par exemple “image/png”).. Notez que les autres métadonnées wms_attribution_logourl_* doivent être spécifiées.

  • Se réfèrer à la section 7.1.4.5.11 de la spécification WMS 1.1.1.

wms_attribution_logourl_height

  • Description: (Optionnelle) Hauteur de l’image du logo en pixels. Notez que les autres métadonnées wms_attribution_logourl_* doivent être spécifiées.

  • Se réfèrer à la section 7.1.4.5.11 de la spécification WMS 1.1.1.

wms_attribution_logourl_href

  • Description: (Optionnelle) URL de l’image du logo. Notez que les autres métadonnées wms_attribution_logourl_* doivent être spécifiées.

  • Se réfèrer à la section 7.1.4.5.11 de la spécification WMS 1.1.1.

wms_attribution_logourl_width

  • Description: (Optionnelle) Largeur de l’image du logo en pixels. Notez que les autres métadonnées wms_attribution_logourl_* doivent être spécifiées.

  • Se réfèrer à la section 7.1.4.5.11 de la spécification WMS 1.1.1.

wms_attribution_onlineresource

  • Description: (Optional) l’URL du fournisseur de données.

  • Se réfèrer à la section 7.1.4.5.11 de la spécification WMS 1.1.1.

wms_attribution_title

  • Description: (Optional) Human-readable string naming the data
    provider.
  • Se réfèrer à la section 7.1.4.5.11 de la spécification WMS 1.1.1.

wms_authorityurl_name, wms_authorityurl_href

  • Description: (Optionnelle) AuthorityURL est utilisé en tandem avec les points d’accès de Identifier pour fournir un moyen de lier l’information de l’identifiant à un service web. Le paramètre wms_identifier_authority doit fournir un chaîne qui correspond à un wms_authorityurl_name déclaré. A la fois wms_authorityurl_name et wms_authorityurl_href doivent être présent pour qu’un tag AuthorityURL soit écrit dans les “capabilities”.

  • Se réfèrer à la section 7.1.4.5.12 of the WMS 1.1.1 spec.

wms_bbox_extended:

  • Description: (Optionnelle) “true” ou “false”. Si “true”, les rectangles englobants sont renvoyés pour tous les SRS / CRS supportés du document de “capabilities” . Si “false”, seul le rectangle englobant du premier SRS / CRS est retourné.

  • Introduit en version 6.0.

wms_dataurl_format

  • Description: (Optionnelle) Format de fichier non standardisé de la métadonnée. La métadonnée wms_dataurl_href de la couche doit aussi être spécifiée.

  • Se réfèrer à la section 7.1.4.5.14 de la spécification WMS 1.1.1.

wms_dataurl_href

  • Description: (Optionnelle) L’URL vers la métadonnée de la couche. La métadonnée wms_dataurl_format de la couche doit aussi être spécifiée.

  • Se réfèrer à la section 7.1.4.5.14 de la spécification WMS 1.1.1.

wms_enable_request (ou ows_enable_request)

  • Description: Liste séparée par des espaces des requêtes à activer. Par défaut, la valeur est “none”. Les requêtes suivantes peuvent être activées: GetCapabilities, GetMap, GetFeatureInfo et GetLegendGraphic. Un ”!” juste avant le nom de la requête désactivera la requête. “*” permet d’avoit toutes les requêtes activées.

  • Exemples :

    Pour permettre d’utiliser seulement GetMap et GetFeatureInfo:

    "wms_enable_request" "GetMap GetFeatureInfo"
    

    Pour permettre toutes les requêtes sauf GetFeatureInfo

    "wms_enable_request" "* !GetFeatureInfo"
    

wms_exclude_items

  • Description: (Optionnelle, s’applique seulement aux requête text/plain GetFeatureInfo). Une liste séparée par des virgules de champs à exclude, ou le mot-clé “all”.

    Voir gml_exclude_items ci-dessus.

wms_extent

  • Nom du TAG WMS: BoundingBox (WMS1.1.1, sect. 6.5.6)

  • Description: (Optionnelle) Utilisée pour le tag BoundingBox de la couche pour les cas où il est impossible (ou très inefficace) pour MapServer de deviner depuis la source de donnée son éténdue. La valeur pour cette métadonnée est “minx miny maxx maxy” séparée par des espaces, avec les valeurs dans l’unité de la projection de la couche. Si wms_extent est fournit, alors il est prioritaire et MapServer n’essayera PAS de lire l’étendue du fichier source.

    Pour les rasters servis via WMS, MapServer peut maintenant utiliser le paramètre de métadonnée wms_extent pour déclarer l’image. Si un fichier .wld ne peut être trouvé, MapServer regardera alors dans le paramètre de métadonnée wms_extent et utilisera l’étendue et la taille de l’image pour déclarer la position géographique.

wms_getfeatureinfo_formatlist

  • Description: (Optional) Comma-separted list of formats that should be valid for a GetFeatureInfo request. If defined, only these formats are advertised through in the Capabilities document.

wms_getlegendgraphic_formatlist

  • Description: (Optional) Comma-separted list of image formats that should be valid for a GetLegendGraphic request. If defined, only these formats are advertised through in the Capabilities document.

wms_getmap_formatlist

  • Description: (Optional) Comma-separted list of image formats that should be valid for a GetMap request. If defined, only these formats are advertised through in the Capabilities document.

wms_group_abstract

  • Description: (Optionnelle) Un texte de présentation fournissant plus d’informations sur le groupe. Seule une seule couche pour le groupe nécessite de contenir wms_group_abstract. MapServer trouvera et utilisera cette valeur. La valeur trouvée pour la première couche dans le groupe est celle utilisée. Ainsi, si de multiples couches ont un wms_group_abstract défini, alors seule la première valeur sera utilisée.

wms_group_title

  • Nom du TAG WMS: Group_title (WMS1.1.1, section 7.1.4.1)

  • Description: (Optionnelle) Un nom lisible par les hommes pour le groupe auxquel la couche appartient. Une seule une couche du groupe nécessite d’avoir le paramètre wms_group_title. MapServer trouvera et utilisera cette valeur. La valeur trouvée pour la première couche dans le groupe est celle utilisée. Ainsi, si de multiples couches ont un wms_group_title défini, alors seule la première valeur sera utilisée.

wms_identifier_authority, wms_identifier_value

  • Description: (Optionnelle) Identifier est utilisé en tandem avec les points d’accès de AuthorityURL pour fournir un moyen de lier l’information de l’identifiant à un service web. Le paramètre wms_identifier_authority doit fournir un chaîne qui correspond à un wms_authorityurl_name déclaré. A la fois wms_identifier_authority et wms_identifier_value doivent être présent pour qu’un tag Identifier soit écrit dans les “capabilities”.

  • Se réfèrer à la section 7.1.4.5.12 of the WMS 1.1.1 spec.

wms_include_items

  • Description: (Optionnelle, s’applique seulement aux requêtes text/plain de GetFeatureInfo) Une liste séparée par des virgules d’éléments à inclure, ou un mot-clé “all”.

    Voir gml_include_items ci-dessus.

wms_keywordlist

Identique à wms_keywordlist dans l’objet WEB

wms_keywordlist_vocabulary

Identique à wms_keywordlist_vocabulary dans l’objet WEB

wms_keywordlist_[nom_du_vocabulaire]_items

Identique à wms_keywordlist_[nom_du_vocabulaire]_items dans l’objet WEB

wms_layer_group

  • Description: (Optionnelle) Peut être utilisé pour assigner une couche à un nombre hiérarchiquement imbriqués de groupes. Cette hiérarchie groupéee sera exprimée dans le “capabilities”.

    WMS_LAYER_GROUP est différent du mot-clé GROUP par le fait qu’il ne publie pas forcément le nom du groupe dans le “capabilities” mais seulement le “title” est toujours publié. Si une couche avec le même nom que celui utilisé dans le WMS_LAYER_GROUP est trouvé, il est traité comme un groupe nommé et si aucune couche avec le même nom est trouvé en tant que groupe non nommé.

    Comme conséquence, les groupes définis avec le WMS_LAYER_GROUP ne peuvent pas toujours être interrogés avec une requête GetMap ou GetFeatureInfo (voir la section 7.1.4.5.2 de la spécification de l’implémentation WMS version 1.1.1. (OGC 01-068r2)). Une autre différence iest que ce GROUP ne supporte pas l’imbrication de groupes. Le but de la configuration de la métadonnée est de rendre un client WMS conscient du groupement de couches.

    Tous les noms de groupe doivent être précédés par un anti-slash (/). Il n’est pas autorisé d’utiliser à la fois la configuration WMS_LAYER_GROUP et un mot-clé GROUP pour une couche seule.

    LAYER
      NAME "mylayer"
      DATA "mylayer"
      TYPE LINE
      CLASS
        STYLE
          COLOR 100 100 255
        END
      END
      METADATA
       "WMS_LAYER_GROUP" "/rootgroup/subgroup"
      END
    END
    

wms_metadataurl_format

  • Description: (Optionnelle) Le type MIME du format de fichier de l’enregistrement de métadonnée (c’est à dire. “text/plain”). Les métadonnées metadata wms_metadataurl_type et wms_metadataurl_href de la couche doivent aussi être spécifiées.

  • Se réfèrer à la section 7.1.4.5.10 de la spécification WMS 1.1.1.

wms_metadataurl_href

  • Description: (Optionnelle) L’URL vers la méadonnée de la couche. Les métadonnées wms_metadataurl_format et wms_metadataurl_type de la couche doivent aussi être spécifiées.

  • Se réfèrer à la section 7.1.4.5.10 de la spécification WMS 1.1.1.

wms_metadataurl_type

  • Description: (Optionnelle) Le standard auxquel la métadonnée se conforme. Actuellement seulement deux types sont valides: “TC211” qui se réfère à [ISO 19115], et “FGDC” qui se réfère à [FGDC-STD-001-1988]. Les métadonnées wms_metadataurl_format et wms_metadataurl_href de la couche doivent aussi être spécifiées.

  • Se réfèrer à la section 7.1.4.5.10 de la spécification WMS 1.1.1.

wms_opaque

  • Nom du TAG WMS: Opaque (WMS 1.1.1, section 7.1.4.6.3)

  • Description: (Optionnelle) Définir cette métadonnée à “1” pour indiquer que la couche représente un couverture de remplissage de l’espace (par exemple une couche de bathymétrie et d’élèvation). Cela devrait être considéré par le client comme une indication que la couche devrait être placée en bas de la liste de couches.

wms_srs

Identique à wms_srs dans l’objet WEB.

wms_style

  • Description: (Optionnelle) Le nom du style de “LegendURL”. Nécessite les métadonnées suivantes: wms_style_[nom_du_style]_width, wms_style_[nom_du_style]_legendurl_height, wms_style_[nom_du_style]_legendurl_format, wms_style_[nom_du_style]_legendurl_href

  • Se réfèrer à la section 7.1.4.5.4 de la spécification WMS 1.1.1.

wms_style_[nom_du_style]_legendurl_format

  • Description: (Optionnelle) Le type MIME du format de fichier de l’image de légende. Nécessite la métadonnée suivante: wms_style_[nom_du_style]_width, wms_style_[nom_du_style]_legendurl_height, wms_style, wms_style_[nom_du_style]_legendurl_href.

  • Se réfèrer à la section 7.1.4.5.4 de la spécification WMS 1.1.1.

wms_style_[nom_du_style]_legendurl_height

  • Description: (Optionnelle) La hauteur de l’image de légende en pixels. Nécessite la métadonnée suivante: wms_style_[nom_du_style]_width, wms_style, wms_style_[nom_du_style]_legendurl_format, wms_style_[nom_du_style]_legendurl_href.

  • Se réfèrer à la section 7.1.4.5.4 de la spécification WMS 1.1.1.

wms_style_[nom_du_style]_legendurl_href

  • Description: (Optionnelle) L’URL vers la légende de la couche. Nécessite la métadonnée suivante: wms_style_[nom_du_style]_width, wms_style_[nom_du_style]_legendurl_height, wms_style_[nom_du_style]_legendurl_format, wms_style.

  • Se réfèrer à la section 7.1.4.5.4 de la spécification WMS 1.1.1.

wms_style_[nom_du_style]_legendurl_width

  • Description: (Optionnelle) La largeur de l’image de légende en pixels. Nécessite la métadonnée suivante : wms_style_[nom_du_style]_format, wms_style_[nom_du_style]_legendurl_height, wms_style, wms_style_[nom_du_style]_legendurl_href.

  • Se réfèrer à la section 7.1.4.5.4 de la spécification WMS 1.1.1.

wms_timedefault

  • Description: (Optionnelle pour le support du “Time”, WMS-T) Cette valeur est utilisée si elle est définie et que la valeur “Time” est manquante dans la requête. Merci de voir le guide du support WMS Time Support Howto for more information.

wms_timeextent

  • Description: (Obligatoire pour le support du “Time”, WMS-T) Il est utilisé dans les “capabilities” pour retourner les valeurs de temps valides pour la couche. La valeur définit ici doit être un intervalle de temps valide. Merci de vous reporter au guide du support WMS Time pour plus d’informations.

wms_timeitem

  • Description: (Obligatoire pour le support du Temps, WMS-T) C’est le nom du champ dans la base de donnée qui contient les valeurs de temps. Merci de vous reporter au guide du support WMS Time pour plus d’informations.

wms_title

Identique au wms_title dans l’objet WEB

Paramètres WMS spécifiques vendeur (c’est à dire à MapServer)

angle

  • Angle (en degrés) pour pivoter la carte.

Note

La valeur de l’angle est en degrés, dans le sens des aiguilles d’une montre.

radius

  • Ce paramètre accepte deux types d’arguments:

    • Un entier qui spécifie le rayon de recherche en pixels.

    • Une valeur spéciale bbox qui changera la requête en entrée en requête bbox basé sur la bbox donnée dans les paramètres de la requête.

bbox_pixel_is_point

  • Si ce paramètre est à “TRUE”, MapServer traitera la BBOX reçue dans les requêtes GetMap WMS comme si elle était fournie par le mode pixel_is_point. Essentiellement en désactivant la conversion de pixel_is_area (modèle WMS) à pixel_is_point qui est ésent dans mapwms.c pour ce module spécifique.

Requêtes WMS “en cascade”

Actuellement, il y a 3 requêtes qui supportent le WMS “en cascade”

  • GetMap

  • GetFeatureInfo

  • GetLegendGraphic

    Avant MapServer 6.2, une requête GetLegendGraphic n’était pas possible en cascade. Une légende était retournée en utilisant les classes de la couche. Pour préserver ce comportement, une requête GetLegendGraphic ne sera passée en cascade que si:

    1. La requête GetLegendGraphic est activé via le paramètre de métadonnée _enable_request.

    2. La couche ne contient aucune classe avec une propriété NAME définie, c’est à dire:

    CLASS
      NAME "Parks"
      STYLE
        COLOR 0 255 0
      END
    END
    

    Cette couche ne fonctionnera pas en cascade parce qu’elle contient au moins une classe avec une propriété NAME définie.

Note

Si vous savez que le serveur distant WMS ne supporte pas un type de requête WMS donné, vous devriez explicitement cette requête pour votre couche en utilisant la métadonnée (ows/wms)_enable_request. Sinon, vous obtiendrez simplement une exception XML depuis le serveur “en cascade”

Exemple de Mapfile de type serveur WMS

Ce qui suit est un mapfile très basique de type serveur WMS:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
MAP
  NAME "WMS-test"
  STATUS ON
  SIZE 400 300
  EXTENT -2200000 -712631 3072800 3840000
  UNITS METERS
  SHAPEPATH "../data"
  IMAGECOLOR 255 255 255
  FONTSET ../etc/fonts.txt

  WEB
    IMAGEPATH "/ms4w/tmp/ms_tmp/"
    IMAGEURL "/ms_tmp/"
    METADATA
      "wms_title"     "WMS Demo Server"  ##required
      "wms_onlineresource" "http://yourpath/cgi-bin/mapserv.exe?"   ##required
      "wms_srs"       "EPSG:42304 EPSG:42101 EPSG:4269 EPSG:4326"  ##recommended
      "wms_enable_request" "*"   ##necessary
    END
  END # Web

  PROJECTION
    "init=epsg:42304"   ##required
  END

  SYMBOL
    NAME "circle"
    TYPE ellipse
    POINTS 1 1 END
  END # Symbol

  #
  # Start of layer definitions
  #

  LAYER
    NAME "park"
    METADATA
      "wms_title"    "Parks"   ##required
    END
    TYPE POLYGON
    STATUS OFF
    DATA park
    PROJECTION
      "init=epsg:42304"   ##recommended
    END
    CLASS
      NAME "Parks"
      STYLE
        COLOR 200 255 0
        OUTLINECOLOR 120 120 120
      END # Style
    END # Class
  END # Layer

  LAYER
    NAME popplace
    METADATA
      "wms_title"    "Cities"  ##required
    END
    TYPE POINT
    STATUS ON
    DATA popplace
    PROJECTION
      "init=epsg:42304"   ##recommended
    END
    CLASS
      NAME "Cities"
      STYLE
        SYMBOL "circle"
        SIZE 8
        COLOR 0 0 0
      END # Style
    END # Class
  END # Layer

END # Map File

FAQ / Problèmes communs

Q:

Comment je peux trouver le code EPSG pour la projection de ma donnée?

A:

Si vous connaissez les paramètres de projection de votre donnée, vous pouvez simplement naviguer dans le fichier “epsg” fournit avec PROJ4 et regardez pour une définition de projection qui corresponde à celle de votre donnée. C’est un simple fichier texte et les codes EPSG sont entre les symboles < et > au début de chaque ligne.

Le fichier “epsg” est habituellement situé dans /usr/local/share/proj/ sur les systèmes Unix et dans C:/PROJ/ ou C:/PROJ/NAD dans les systèmes Windows (en fonction de votre installation). Les utilisateurs de MS4W trouveront le fichier epsg dans /MS4W/proj/nad/.


Q:

Mon serveur WMS produit une erreur “msProcessProjection(): no system list, errno: ..”

A:

C’est probablement PROJ4 qui se plaint qu’il ne peut pas trouver le fichier de définition de projection “epsg”. Assurez-vous que vous avez installé PROJ 4.4.3 ou plus récent et que ce fichier “epsg” est installé au bon emplacement. Sous Unix, cela devrait être sous /usr/local/share/proj/, et sous Windows, PROJ cherche le fichier dans C:/PROJ/ ou C:/PROJ/NAD (en fonction de votre installation). Vous devriez aussi vérifier la error documentation pour voir si votre erreur exacte est abordée.

Si vous n’avez pas le fichier “epsg” alors vous pouvez l’obtenir depuis la distribution de PROJ4 sur http://trac.osgeo.org/proj/ ou vous pouvez le télécharger sur http://www.maptools.org/dl/proj4-epsg.zip.


Q:

Comment les projections AUTO fonctionnent-elles?

A:

Quand un client WMS appelle un serveur WMS avec une projection auto, il doit spécifier le SRS sous la forme: AUTO: proj_id,unit_id,lon0,lat0 où:

  • proj_id est composé de 42001, 42002, 42003, 42004, ou 42005 (seulement cinq projections auto sont actuellement définies).

  • unit_id est toujours 9001 pour les mètres. (il est incertain que quelqu’un d’autre soit amené à utiliser d’autres unités.)

  • lon0 et lat0 sont les coordonnées à utiliser comme l’origine pour la projection.

Quand une projection AUTO dans un GetCapabilities WM est utilisée, vous devez seulement inclure la chaîne “AUTO:42003” dans votre métadonnée wms_srs, vous ne devez pas inclure les paramètres de la projection. Ces paramètres sont ajoutés par l’application (cliente) à l’exécution en fonction de votre vue carte. Par exemple:

NAME "DEMO"
...

WEB
  ...
  METADATA
    "wms_title"            "WMS Demo Server"
    "wms_onlineresource"   "http://my.host.com/cgi-bin/mapserv?map=wms.map&"
    "wms_srs"              "AUTO:42001 AUTO:42002"
    "wms_enable_request" "*"   ##necessary
  END # METADATA
END # WEB

Le serveur ci-dessous affiche les deux premières projections auto.