#1 Thu 23 October 2014 11:12
- 0liv
- Participant occasionnel
- Date d'inscription: 27 Nov 2013
- Messages: 29
Légende en fonction de l'échelle dans SLD
Bonjour à tous,
J'ai un problème auquel je suis confronté régulièrement depuis que je fais de la mise en forme de données pour une diffusion en WMS:
Je dois afficher une couche, ici des cours d'eau, et je désire changer la symbologie en fonction de l'échelle afin que la représentation soit esthétique à différents seuils de zoom. Avec les paramètres "MinScaleDenominator" et "MaxScaleDenominator". Je créé donc plusieurs règles, chacune étant limité par une échelle max et min, et je définis mes propriétés graphiques pour chaque règle.
Code:
<sld:StyledLayerDescriptor xmlns:sld="http://www.opengis.net/sld" version="1.0.0" xsi:schemaLocation="http://www.opengis.net/sld http://schemas.opengis.net/sld/1.0.0/StyledLayerDescriptor.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ogc="http://www.opengis.net/ogc" xmlns:gml="http://www.opengis.net/gml"> <sld:NamedLayer> <sld:Name>cagm-cagm-coursdeau-troncon_cd2</sld:Name> <sld:UserStyle> <sld:Name>Defaut</sld:Name> <sld:FeatureTypeStyle> <sld:Rule> <sld:Name>class_ext-gen9020</sld:Name> <sld:Title>Cours d'eau</sld:Title> <sld:MinScaleDenominator>500000</sld:MinScaleDenominator> <sld:MaxScaleDenominator>8080000</sld:MaxScaleDenominator> <sld:LineSymbolizer> <sld:Stroke> <sld:CssParameter name="stroke-dasharray">10.0 0</sld:CssParameter> <sld:CssParameter name="stroke">#0000FF</sld:CssParameter> <sld:CssParameter name="stroke-width">0.5</sld:CssParameter> </sld:Stroke> </sld:LineSymbolizer> </sld:Rule> <sld:Rule> <sld:Name>Defaut</sld:Name> <sld:Title>Cours d'eau</sld:Title> <sld:MinScaleDenominator>120000</sld:MinScaleDenominator> <sld:MaxScaleDenominator>499000</sld:MaxScaleDenominator> <sld:LineSymbolizer> <sld:Stroke> <sld:CssParameter name="stroke-dasharray">10.0 0</sld:CssParameter> <sld:CssParameter name="stroke">#0000FF</sld:CssParameter> <sld:CssParameter name="stroke-width">1</sld:CssParameter> </sld:Stroke> </sld:LineSymbolizer> </sld:Rule> <sld:Rule> <sld:Name>class_ext-gen7635</sld:Name> <sld:Title>Cours d'eau</sld:Title> <sld:MinScaleDenominator>250</sld:MinScaleDenominator> <sld:MaxScaleDenominator>121200</sld:MaxScaleDenominator> <sld:LineSymbolizer> <sld:Stroke> <sld:CssParameter name="stroke-dasharray">10.0 0</sld:CssParameter> <sld:CssParameter name="stroke">#0000FF</sld:CssParameter> <sld:CssParameter name="stroke-width">2</sld:CssParameter> </sld:Stroke> </sld:LineSymbolizer> </sld:Rule> </sld:FeatureTypeStyle> </sld:UserStyle> </sld:NamedLayer> </sld:StyledLayerDescriptor>
Le problème, c'est qu'une fois affichée, la requête GetLegendGraphic renvoit les 3 classes dans la légende, peut importe le seuil de zoom. J'obtiens donc 3 fois la classe "Cours d'eau" avec une symbologie différente pour chaque classe:
[img]http://img4.hostingpics.net/pics/5030812014102311h1024.png[/img]
Si je supprime les balises <name> et <title>, la légende contient tout de même 3 éléments non nommés (je n'en ai supprimé que 2 dans l'exemple):
[img]http://img4.hostingpics.net/pics/3762442014102311h0939.png[/img]
Ma question est donc, est ce que vous savez si il est possible de créer des classes de symbologie graphique, qui s'affichent dans la légende en fonction de l'échelle? A savoir que la légende n'affiche que la classe qui est comprise dans le seuil de zoom actuel de l'utilisateur de l'application.
Merci d'avance!
Hors ligne