|
Home | Docs | Issue Tracker | FAQ | Download |
|
|
| 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 |
Sommaire
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.
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.
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) :
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.
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 $