Map Context

Author:Jeff McKenna
Contact:jmckenna at gatewaygeomatics.com
Last Updated:

07-10-2010

Introduction

Le terme ‘map context’ vient de la spécification v1.0.0 du Web Map Context (WMC) de l’Open Geospatial Consortium (OGC) , qui coïncide avec la spécification Web Map Server (WMS) de l’OGC. Un contexte de carte est un document XML qui décrit l’apparition des couches venant d’un ou plusieurs serveurs WMS, et peut être transféré entre les clients tout en maintenant les vues au démarrage, l’état de la vue (et de ses couches), et en stockant des informations de couche additionnelles.

Le support du “Web Map Context” de l’OGC a été ajouté dans MapServer en version 3.7/4.0. Il permet aux applications clientes de charger et sauvegarder une configuration de carte dans un format XML standard. MapServer peut lire les documents de contexte des versions 0.1.2, 0.1.4, 0.1.7, 1.0.0, 1.1.0 et peut exporter des contenus en versions 0.1.4, 0.1.7, 1.0.0, 1.1.0. Le support “Web Map Context” 1.1.0 a été ajouté depuis MapServer 4.10

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

  • Développement d’applications MapServer et configuration de mapfiles.

  • L’habitude des spécifications WMS est un avantage. Vous pouvez regarder la section suivante pour les liens vers des sources associées.

Implémenter un Web Map Context (WMC)

Considérations spéciales pour la compilation

La gestion du “Map Context” nécessite la gestion des bibliothèques PROJ4, GDAL/OGR et PHP.

Compilez/installez les bibliothèques ci-dessus sur votre système et compilez MapServer avec les options de configure ‘–with-wmsclient –with-proj –with-ogr –with-gdal –with-php’. Assurez vous aussi que votre compilation utilise les drapeaux (“flags”) USE_WMS_LYR et USE_OGR. Pour plus de détails sur la compilation de MapServer, voir lae guide approprié Unix / Windows

Les utilisateurs Windows peuvent utiliser MS4W, qui est déjà prêt pour l’usage “Map Context”.

Mapfile pour le “Map Context”

Un document “map context” peut SEULEMENT contenir des couches WMS (c’est à dire avec CONNECTIONTYPE WMS). Merci de vous référer au guide du client WMS dans MapServer pour plus d’informations sur la déclaration de couches WMS.

Métadonnées du Mapfile

Les métadonnées suivantes du mapfile sont utilisées par MapServer pour gérer les informations du “map context” :

(Notez que certains paramètres ont une “width”, une “height”, un “format”, et un “href”, et certains n’ont que “format” et “href”. C’est parce que “width” et “height” ne sont seulement utilisés pour les images et les paramètres qui ne les ont pas sont “text” ou “html”. Pour être consistant avec la spécification, MapServer supporte “height” et “width” pour tous les paramètres, mais ils devraient seulement être utilisés pour les images)

Objet Metadata de l’objet Web

  • ows_schemas_location : Emplacement du document de schéma XML. Par défaut, c’est http://schemas.opengis.net. Voir http://ogc.dmsolutions.ca pour un exemple d’arbre de schéma valide.

  • wms_abstract : Un texte de présentation fournissant plus d’informations sur le serveur WMS.

  • wms_address : S’il est indiqué, il faut aussi fournir wms_addresstype, wms_city, wms_stateorprovince, wms_postcode, et wms_country)

  • wms_addresstype : S’il est indiqué, il faut aussi fournir wms_address, wms_city, wms_stateorprovince, wms_postcode, et wms_country)

  • wms_city : S’il est indiqué, il faut aussi fournir wms_address, wms_addresstype, wms_stateorprovince, wms_postcode, et wms_country)

  • wms_contactelectronicmailaddress : Adresse Email de contact.

  • wms_contactfacsimiletelephone : Numéro de téléphone du fax du contact.

  • wms_contactorganization :
  • wms_contactperson :
  • wms_contactposition :
  • wms_contactvoicetelephone : numéro de téléphone du contact.

  • wms_context_fid : l’identifiant de l’objet du contexte. Définit à 0 si non définie lors de la sauvegarde.

  • wms_context_version : la version de la spécification “map context”.

  • wms_country : S’il est indiqué, il faut aussi fournir wms_address, wms_city, wms_stateorprovince, wms_postcode, et wms_addresstype.

  • wms_descriptionurl_format : Format de la page web qui contient les informations relatives à la vue.

  • wms_descriptionurl_href : Référence vers la page web qui contient les informations relatives à la vue.

  • wms_keywordlist : Une liste séparée par des virgules de mots-clés ou phrases -clés pour aider à la recherche du catalogue.

  • wms_logourl_width : Largeur du logo de contexte.

  • wms_logourl_height : Hauteur du logo de contexte.

  • wms_logourl_format : Format du logo de contexte.

  • wms_logourl_href : Emplacement du logo de contexte.

  • wms_postcode : S’il est indiqué, il faut aussi fournir wms_address, wms_city, wms_stateorprovince, wms_addresstype, et wms_country.

  • wms_stateorprovince : S’il est indiqué, il faut aussi fournir wms_address, wms_city, wms_addresstype, wms_postcode, et wms_country.

  • wms_title : (Requis) Un nom lisible par les humains pour cette couche (cette métadonnée n’existe pas au delà de la version 0.1.4)

Objet Metadata de l’objet Layer

  • wms_abstract : Un texte de présentation fournissant plus d’informations sur le serveur WMS.

  • wms_dataurl_href : Lien vers une “online resource” où la donnée correspondant à la couche peut être trouvée.

  • wms_dataurl_format : Format de la “online resource” où la donnée correspondant à la couche peut être trouvée.

  • wms_dimension : Dimension courante utilisée.

    Nouveau dans la version 4.10.

  • wms_dimensionlist : Liste des dimensions disponibles.

    Nouveau dans la version 4.10.

  • wms_dimension_%s_default : Valeur de la dimension par défaut. MapServer vérifiera les métadonnées wms_time et wms_timedefault quand cela n’est pas spécifié. %s = le nom de la dimension.

    Nouveau dans la version 4.10.

  • wms_dimension_%s_multiplevalues : Multiples valeurs de dimension. %s = le nom de la dimension.

    Nouveau dans la version 4.10.

  • wms_dimension_%s_nearestvalue : Valeur de dimension la plus proche. La valeur par défaut est 0. %s = le nom de la dimension.

    Nouveau dans la version 4.10.

  • wms_dimension_%s_units : Unités pour les valeurs de dimension. La valeur par défaut est ISO8601. %s = le nom de la dimension.

    Nouveau dans la version 4.10.

  • wms_dimension_%s_unitsymbol : Symbole pour les unités de dimension. La valeur par défaut est t. %s = le nom de la dimension.

    Nouveau dans la version 4.10.

  • wms_dimension_%s_uservalue : Valeur de dimension utilisateur. MapServer vérifiera les métadonnées wms_time et wms_timedefault quand cela n’est pas spécifié. %s = le nom de la dimension.

    Nouveau dans la version 4.10.

  • wms_format : Format courant utilisé.

  • wms_formatlist : Liste des formats disponibles pour cette couche.

  • wms_metadataurl_href : Lien vers la “ressource online” où la métadonnée descriptive de la couche correspondante peut être trouvée.

  • wms_metadataurl_format : Format de la “ressource online” où la métadonnée descriptive de la couche correspondante peut être trouvée.

  • wms_name : Nom de la couche WMS sur le serveur.

  • wms_onlineresource : Requise URL pour accéder au serveur.

  • wms_server_version : La version de la spécification Web Map Server (WMS).

  • wms_server_title : Titre du serveur cartographique.

  • wms_stylelist : Style courant utilisé.

  • wms_style_%s_legendurl_width : Largeur de l’image décrivant le style. %s = le nom du style.

  • wms_style_%s_legendurl_height : Hauteur de l’image décrivant le style. %s = le nom du style.

  • wms_style_%s_legendurl_format : Format de l’image décrivant le style. %s = le nom du style.

  • wms_style_%s_legendurl_href :Emplacement de l’image décrivant le style. %s = le nom du style.

  • wms_style_%s_sld : URL vers le document SLD de ce style. %s = le nom du style.

  • wms_style_%s_sld_body : document SLD_BODY de ce style. %s = le nom du style.

  • wms_style_%s_title : Titre de la couche. %s = le nom du style.

  • wms_title : (Requis) Un nom lisible par les humains pour cette couche.

Exemple de Mapfile pour le Map Context

 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
    MAP

    NAME "mapcontext"
    STATUS ON
    SIZE 400 300
    SYMBOLSET "../etc/symbols.txt"
    EXTENT -180 -90 180 90
    UNITS DD
    SHAPEPATH "../data"
    IMAGECOLOR 255 255 255
    FONTSET "../etc/fonts.txt"


    #
    # Start of web interface definition
    #
    WEB
      IMAGEPATH "/ms4w/tmp/ms_tmp/"
      IMAGEURL "/ms_tmp/"
      METADATA
        "wms_abstract" "Demo for map context document. Blah blah..."
        "wms_title" "Map Context demo"   #### REQUIRED
      END
    END

    PROJECTION
      "init=epsg:4326"
    END

    #
    # Start of layer definitions
    #

        LAYER
          NAME "country_bounds"
          TYPE RASTER
          STATUS ON
          CONNECTION "http://demo.mapserver.org/cgi-bin/wms?"
          CONNECTIONTYPE WMS
          METADATA
            "wms_title"                     "World Country Boundaries"  #### REQUIRED
            "wms_onlineresource"            "http://demo.mapserver.org/cgi-bin/wms?"  #### REQUIRED
            "wms_srs"                       "EPSG:4326"
            "wms_name"                      "country_bounds"
            "wms_server_version"            "1.1.1"
            "wms_format"                    "image/gif"
            "wms_dimensionlist"             "time,width"
            "wms_dimension"                 "time"
            "wms_dimension_time_unitsymbol" "t"
            "wms_dimension_time_units"      "ISO8601"
            "wms_dimension_time_uservalue"  "1310"
            "wms_dimension_time_default"    "1310"
            "wms_dimension_time_multiplevalues"  "1310,1410"
            "wms_dimension_time_nearestvalue"  "0"
          END
        END

    END # Map File

Tester le support du Map Context

  1. La première chose à faire est de sauver votre mapfile en utilisant le la fonction saveMapContext disponible depuis la bibliothèque PHP/MapScript. Un script exemple est montré ci-dessous:

    <?php
      if (!extension_loaded("MapScript")) dl(MODULE);
      $oMap = ms_newMapObj("mapcontext.map");
      $oMap->saveMapContext("mapcontext_output.xml");
    ?>
    
  2. Balayer la sortie XML en cherchant les commentaires <!– WARNING: ... –>. Ensuite, faire les changements nécessaire pour corriger tous les avertissements que vous rencontrez. A la fin de ceci, vous devriez avoir un mapfile compatible avec la spécification Map Context.

  3. Maintenant vous pouvez charger le nouveau document Map Context dans une application utilisant la fonction loadMapContext de la bibliothèque PHP/MapScript.

Exemple de document Map Context

Ce qui suit est un exemple de document Map Context:

 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
    <?xml version='1.0' encoding="ISO-8859-1" standalone="no" ?>
    <ViewContext version="1.1.0" id="mapcontext" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ogc="http://www.opengis.net/ogc" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.opengis.net/context" xmlns:sld="http://www.opengis.net/sld" xsi:schemaLocation="http://www.opengis.net/context http://schemas.opengis.net/context/1.1.0/context.xsd">
      <General>
        <Window width="400" height="300"/>
        <!-- Bounding box corners and spatial reference system -->
        <BoundingBox SRS="EPSG:4326" minx="-180.000000" miny="-90.000000" maxx="180.000000" maxy="90.000000"/>
        <!-- Title of Context -->
        <Title>Map Context demo</Title>
        <Abstract>Demo for map context document. Blah blah...</Abstract>
        <ContactInformation>
        </ContactInformation>
      </General>
      <LayerList>
        <Layer queryable="0" hidden="0">
          <Server service="OGC:WMS" version="1.1.1" title="World Country Boundaries">
            <OnlineResource xlink:type="simple" xlink:href="http://demo.mapserver.org/cgi-bin/wms?"/>
          </Server>
          <Name>country_bounds</Name>
          <Title>World Country Boundaries</Title>
          <SRS>EPSG:4326</SRS>
          <FormatList>
            <Format current="1">image/gif</Format>
          </FormatList>
          <DimensionList>
            <Dimension name="time" units="ISO8601" unitSymbol="t" userValue="1310" default="1310" multipleValues="1310,1410" nearestValue="0" current="1"/>
          </DimensionList>
        </Layer>
      </LayerList>
    </ViewContext>

Support du Map Context via CGI

MapServer CGI vous permet de charger un map context via l’utilisation d’un paramètre CONTEXT, et vous pouvez pointer ce paramètre vers un fichier de “context” stocké localement ou un fichier de “context” accessible via une URL. Pour plus d’informations sur MapServer CGI, voir la référence CGI.

Gestion des fichiers de contexte de carte locale

Il y a un nouveau paramètre cgi appelé CONTEXT qui est utilisé pour spécifier un fichier de “context” local. L’utilisateur peut ensuite utiliser MapServer pour demander une carte utilisant la syntaxe suivante:

http://localhost/mapserver.cgi?MODE=map&MAP=/path/to/mapfile.map&CONTEXT=
                     /path/to/contextfile.xml&LAYERS=layer_name1 layers_name2

Note

Toutes les couches crées à partir du fichier contexte ont leur status à ON. Pour afficher des couches, l’utilisateur doit ajouter l’argument LAYERS dans l’URL.

Gestion de fichier de contexte accédé par une URL

La syntaxe pour utiliser un fichier de contexte accessible par le web devrait être similaire à l’accès d’un fichier de contexte local.

http://localhost/mapserver.cgi?MODE=map&MAP=/path/to/mapfile.map&CONTEXT=
            http://URL/path/to/contextfile.xml&LAYERS=layers_name1 layer_name2

A cause de problèmes de sécurité, charger un fichier depuis une URL est désactivé par défaut. Pour activer cette fonctionnalité, l’utilisateur doit définir un paramètre CONFIG appelé CGI_CONTEXT_URL dans le mapfile par défaut qui permettra d’activer cette fonctionnalité. Voici un exemple de fichier map avec le paramètre CONFIG:

# Start of map file
NAME "map-context"
STATUS ON
SIZE 400 300
EXTENT -2200000 -712631 3072800 3840000
UNITS METERS
IMAGECOLOR 255 255 255
IMAGETYPE png
CONFIG "CGI_CONTEXT_URL" "1"
...
WEB
  ...
END
LAYER
  ...
END

END

Mapfile par défaut

Pour faire fonctionner sans problème une application CGI MapServer avec un Map Context, l’administrateur de l’application doit fournir un mapfile par défaut avec au moins les paramètres requis par défaut qui seront utilisés avec le fichier de contexte. Le mapfile par défaut peut contenir aussi peu d’informations que imagepath et imageurl ou bien qu’une liste de couches. Les informations venant du contexte (c’est à dire: couches, largeur, hauteur, ...) seraient dans tous les cas ajoutées ou remplaceraient les valeurs trouvées dans le mapfile.

Voici un exemple d’un fichier map par défaut contenant les paramètres minimales obligatoire :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
NAME "CGI-CONTEXT-DEMO"
STATUS ON
SIZE 400 300
EXTENT -2200000 -712631 3072800 3840000
UNITS METERS
IMAGECOLOR 255 255 255
IMAGETYPE png
#
# Start of web interface definition
#
WEB
  MINSCALE 2000000
  MAXSCALE 50000000
#
# On Windows systems, /tmp and /tmp/ms_tmp/ should be created at the root
# of the drive where the .MAP file resides.
#
  IMAGEPATH "/ms4w/tmp/ms_tmp/"
  IMAGEURL "/ms_tmp/"
END
END # Map File

Support du Map Context via WMS

MapServer peut aussi fournir vos couches WMS comme un document de contexte. MapServer étend le standard WMS en ajoutant une opération request=GetContext qui vous permet de récupérer un contexte pour un mapfile basé sur le WMS avec un appel comme:

http://localhost/mapserver.cgi?map=/path/to/mapfile.map&service=WMS&
request=GetContext&version=1.1.0

Le paramètre VERSION contrôle la version du document de contexte à retourner.

GetContext est désactivé par défaut parce qu’il pourrait être considéré comme une faille de sécurité: il pourrait exposer publiquement les URLs des couches WMS utilisées (en cascade) par un mapfile.

Pour l’activer, définir la métadonnée du bloc web “wms_getcontext_enabled” à “1” dans votre mapfile de serveur WMS.