MapServer banner Home | Docs | Issue Tracker | FAQ | Download
en de es fr

Substitution à la volée

Author:Steve Lime
Contact:steve.lime at DNR.STATE.MN.US
Revision:$Revision: 9280 $
Date:$Date: 2009-08-28 13:53:52 +0200 (ven., 28 août 2009) $
Last Updated:2005/12/12

Introduction

La substitution à la volée pour le MapServer CGI a été mise en place depuis la version 4.0 et son utilisation a continué à se développer. En bref, il vous permet de modifier des parties d’un mapfile basée sur les données transmises via une requête CGI. Cette fonctionnalité est uniquement disponible via l’application standard CGI. Dans MapScript il est facile de faire cela puisque le développeur a le contrôle complet sur la façon dont est traitée l’entrée.

Exemple basic

Disons que vous souhaitez que l’utilisateur définsse dynamiquement une partie d’une expression pour qu’ils puissent mettre en évidence une certaine classe d’occupation des sols, et vous avez un formulaire (appelé ctype) qui leur permettent de choisir entre : forêts, eau, zones humides et développé . Vous pouvez ensuite

LAYER
    NAME 'covertypes'
    ...
    CLASSITEM 'type'
    CLASS # présentation en évidence
        EXPRESSION '%ctype%'
        ...
    END
    CLASS # présentation par défaut
        ...
    END
END

Quand une requête est traitée la valeur pour ctype est remplacé par la chaîne %Ctype% et le mapfile est traitée comme d’habitude. Si aucun ctype n’est passé dans EXPRESSION il ne sera jamais vraie alors il ne posera pas de problème sauf par une petite baisse de performance. Souvent, vous devrez définir une classe par défaut poru dessiner les géométries qui ne correspondent pas, mais ce n’est pas obligatoire.

Paramètres gérés

Tous les paramètres du mapfile ne sont pas gérés pour la substitution à la volée et une attention a été portée pour essayer de soutenir ceux qui font le plus de sens. N’oubliez pas, vous pouvez aussi configurer à la volée en utilisant la syntaxe du type map_object_property détaillée ailleurs (todo : ajouter un lien). Voici une liste des propriétés dont la substitution à la volée est permise (todo : ajouter la version de MapServer) :

  • LAYER: DATA (doit être validé par DATAPATTERN)
  • LAYER: TILEINDEX
  • LAYER: CONNECTION
  • LAYER: FILTER
  • CLASS EXPRESSION

FILTER

Vous pouvez utiliser des substitutions à la volée pour modifier des valeurs dans un FILTER. Par exemple, votre objet FILTER peut être écrit comme ceci:

FILTER ("multimedia='%multimedia%' and seats >= %nseats% and Sound= '%sound%')

Puis (en supposant que vous utilisez l’interface CGI), vous pourrez passer des variables nommées multimedia, nseats et le sound avec des valeurs définies par l’utilisateur dans un formulaire HTML.

Vous devez également définir des expressions de validation sur ces variables pour prévenir contre la soumission involontaire de requête SQL à PostGIS. Dans la couche métadonnées de la couche vous effectuerez les opérations suivantes :

METADATA
    'multimedia_validation_pattern' '^yes|no$'
    'sound_validation_pattern' '^yes|no$'
    'nseats_validation_pattern' '^[0-9]{1,2}$'
    '... more metadata ...'
END

Les chaînes de validation sont des expressions régulières qui sont appliquées sur les valeurs de la variable appropriée avant d’être ajoutée au filtre. Les deux premiers limitent la valeur de multimedia et de sounds à oui ou non. La troisième limite la valeur pour nseats à un nombre entier à 2 chiffres.

Valeurs par défaut si non définie dans l’URL

Le mécanisme de substitution à la volée créera toujours des mapfiles incorrect au niveau de la syntaxe et presque toujours au niveau sématique si le paramètre de substitution n’a pas été fournie dans l’url.

Depuis la version 5.6, vous pouvez fournir une valeur par défaut pour n’importe quel paramètre de substitution qui seront appliqué si le paramètre n’était pas trouvé dans l’url. Vous pouvez réaliser cela en fournissant une entré spéciale dans les métadonnées de la couche :

METADATA
    'default_sound' 'yes'
    'default_nseats' '5'
    'default_multimedia' 'yes'
END

Dans cet exemple, le mapfile sera créé comme si l’url contenait “&sound=yes&nseats=5&multimedia=yes”

Ce comportement est également accessible par la commande shp2ig, vous permettant de tester la substitution à la volé de mapfile sans utiliser de serveur web.

$ revision: 9764 $